From 4dcdafc4c78c172093aaba2d85bc328640ed8382 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Mon, 18 Oct 2021 10:08:40 +0200 Subject: Set Shade opaqueness on devices that don't support blurs This CL makes sure that we still set the shade opaqueness even for devices that don't support blurs. This noticeably improves the dialog launch animation, and will probably improve performance overall. Bug: 202936526 Test: Manual Change-Id: I4517906cbef3f06bfb2f7419afea0fd18a1c1688 --- .../com/android/systemui/statusbar/BlurUtils.kt | 21 +++++++++-------- .../android/systemui/statusbar/BlurUtilsTest.kt | 27 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index cfbe3b29783a..cf2328f5af97 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt @@ -80,22 +80,23 @@ open class BlurUtils @Inject constructor( * @param opaque if surface is opaque, regardless or having blurs or no. */ fun applyBlur(viewRootImpl: ViewRootImpl?, radius: Int, opaque: Boolean) { - if (viewRootImpl == null || !viewRootImpl.surfaceControl.isValid || - !supportsBlursOnWindows()) { + if (viewRootImpl == null || !viewRootImpl.surfaceControl.isValid) { return } createTransaction().use { - it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) - it.setOpaque(viewRootImpl.surfaceControl, opaque) - if (lastAppliedBlur == 0 && radius != 0) { - it.setEarlyWakeupStart() - } - if (lastAppliedBlur != 0 && radius == 0) { - it.setEarlyWakeupEnd() + if (supportsBlursOnWindows()) { + it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) + if (lastAppliedBlur == 0 && radius != 0) { + it.setEarlyWakeupStart() + } + if (lastAppliedBlur != 0 && radius == 0) { + it.setEarlyWakeupEnd() + } + lastAppliedBlur = radius } + it.setOpaque(viewRootImpl.surfaceControl, opaque) it.apply() } - lastAppliedBlur = radius } @VisibleForTesting diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt index 8e52588e5390..e9676c83c39e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt @@ -27,9 +27,12 @@ import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.`when` +import org.mockito.Mockito.any +import org.mockito.Mockito.anyInt import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.eq import org.mockito.Mockito.mock +import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @@ -40,12 +43,11 @@ class BlurUtilsTest : SysuiTestCase() { @Mock lateinit var dumpManager: DumpManager @Mock lateinit var transaction: SurfaceControl.Transaction @Mock lateinit var crossWindowBlurListeners: CrossWindowBlurListeners - lateinit var blurUtils: BlurUtils + lateinit var blurUtils: TestableBlurUtils @Before fun setup() { MockitoAnnotations.initMocks(this) - `when`(crossWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) blurUtils = TestableBlurUtils() } @@ -75,6 +77,21 @@ class BlurUtilsTest : SysuiTestCase() { verify(transaction).apply() } + @Test + fun testApplyBlur_blurDisabled() { + val radius = 10 + val surfaceControl = mock(SurfaceControl::class.java) + val viewRootImpl = mock(ViewRootImpl::class.java) + `when`(viewRootImpl.surfaceControl).thenReturn(surfaceControl) + `when`(surfaceControl.isValid).thenReturn(true) + + blurUtils.blursEnabled = false + blurUtils.applyBlur(viewRootImpl, radius, true /* opaque */) + verify(transaction).setOpaque(eq(surfaceControl), eq(true)) + verify(transaction, never()).setBackgroundBlurRadius(any(), anyInt()) + verify(transaction).apply() + } + @Test fun testEarlyWakeUp() { val radius = 10 @@ -89,9 +106,11 @@ class BlurUtilsTest : SysuiTestCase() { verify(transaction).setEarlyWakeupEnd() } - inner class TestableBlurUtils() : BlurUtils(resources, crossWindowBlurListeners, dumpManager) { + inner class TestableBlurUtils : BlurUtils(resources, crossWindowBlurListeners, dumpManager) { + var blursEnabled = true + override fun supportsBlursOnWindows(): Boolean { - return true + return blursEnabled } override fun createTransaction(): SurfaceControl.Transaction { -- cgit v1.2.3-59-g8ed1b