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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index cfbe3b2..cf2328f 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 @@ * @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) + 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) - if (lastAppliedBlur == 0 && radius != 0) { - it.setEarlyWakeupStart() - } - if (lastAppliedBlur != 0 && radius == 0) { - it.setEarlyWakeupEnd() - } 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 8e52588..e9676c8 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.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 @@ @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() } @@ -76,6 +78,21 @@ } @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 val surfaceControl = mock(SurfaceControl::class.java) @@ -89,9 +106,11 @@ 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 {