diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt index cfbe3b29783ae..cf2328f5af977 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) + 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 8e52588e5390a..e9676c83c39e4 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 {