Loading packages/SystemUI/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,9 @@ <!-- Permission to register process observer --> <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/> <!-- Be allowed to send commands to Flinger via SurfaceControl. --> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <!-- Restore settings (used by QS) even if they have been modified --> <uses-permission android:name="android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE" /> Loading packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +12 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ open class BlurUtils @Inject constructor( val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) private var lastAppliedBlur = 0 init { dumpManager.registerDumpable(javaClass.name, this) } Loading Loading @@ -75,17 +77,25 @@ open class BlurUtils @Inject constructor( * * @param viewRootImpl The window root. * @param radius blur radius in pixels. * @param opaque if surface is opaque, regardless or having blurs or no. */ fun applyBlur(viewRootImpl: ViewRootImpl?, radius: Int, opaqueBackground: Boolean) { fun applyBlur(viewRootImpl: ViewRootImpl?, radius: Int, opaque: Boolean) { if (viewRootImpl == null || !viewRootImpl.surfaceControl.isValid || !supportsBlursOnWindows()) { return } createTransaction().use { it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) it.setOpaque(viewRootImpl.surfaceControl, opaqueBackground) it.setOpaque(viewRootImpl.surfaceControl, opaque) if (lastAppliedBlur == 0 && radius != 0) { it.setEarlyWakeupStart() } if (lastAppliedBlur != 0 && radius == 0) { it.setEarlyWakeupEnd() } it.apply() } lastAppliedBlur = radius } @VisibleForTesting Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt +18 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.eq import org.mockito.Mockito.mock import org.mockito.Mockito.verify Loading @@ -38,13 +39,13 @@ class BlurUtilsTest : SysuiTestCase() { @Mock lateinit var resources: Resources @Mock lateinit var dumpManager: DumpManager @Mock lateinit var transaction: SurfaceControl.Transaction @Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners @Mock lateinit var crossWindowBlurListeners: CrossWindowBlurListeners lateinit var blurUtils: BlurUtils @Before fun setup() { MockitoAnnotations.initMocks(this) `when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) `when`(crossWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) blurUtils = TestableBlurUtils() } Loading Loading @@ -74,7 +75,21 @@ class BlurUtilsTest : SysuiTestCase() { verify(transaction).apply() } inner class TestableBlurUtils() : BlurUtils(resources, corssWindowBlurListeners, dumpManager) { @Test fun testEarlyWakeUp() { 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.applyBlur(viewRootImpl, radius, true /* opaque */) verify(transaction).setEarlyWakeupStart() clearInvocations(transaction) blurUtils.applyBlur(viewRootImpl, 0, true /* opaque */) verify(transaction).setEarlyWakeupEnd() } inner class TestableBlurUtils() : BlurUtils(resources, crossWindowBlurListeners, dumpManager) { override fun supportsBlursOnWindows(): Boolean { return true } Loading Loading
packages/SystemUI/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,9 @@ <!-- Permission to register process observer --> <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/> <!-- Be allowed to send commands to Flinger via SurfaceControl. --> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <!-- Restore settings (used by QS) even if they have been modified --> <uses-permission android:name="android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE" /> Loading
packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt +12 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ open class BlurUtils @Inject constructor( val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) private var lastAppliedBlur = 0 init { dumpManager.registerDumpable(javaClass.name, this) } Loading Loading @@ -75,17 +77,25 @@ open class BlurUtils @Inject constructor( * * @param viewRootImpl The window root. * @param radius blur radius in pixels. * @param opaque if surface is opaque, regardless or having blurs or no. */ fun applyBlur(viewRootImpl: ViewRootImpl?, radius: Int, opaqueBackground: Boolean) { fun applyBlur(viewRootImpl: ViewRootImpl?, radius: Int, opaque: Boolean) { if (viewRootImpl == null || !viewRootImpl.surfaceControl.isValid || !supportsBlursOnWindows()) { return } createTransaction().use { it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) it.setOpaque(viewRootImpl.surfaceControl, opaqueBackground) it.setOpaque(viewRootImpl.surfaceControl, opaque) if (lastAppliedBlur == 0 && radius != 0) { it.setEarlyWakeupStart() } if (lastAppliedBlur != 0 && radius == 0) { it.setEarlyWakeupEnd() } it.apply() } lastAppliedBlur = radius } @VisibleForTesting Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt +18 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.`when` import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.eq import org.mockito.Mockito.mock import org.mockito.Mockito.verify Loading @@ -38,13 +39,13 @@ class BlurUtilsTest : SysuiTestCase() { @Mock lateinit var resources: Resources @Mock lateinit var dumpManager: DumpManager @Mock lateinit var transaction: SurfaceControl.Transaction @Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners @Mock lateinit var crossWindowBlurListeners: CrossWindowBlurListeners lateinit var blurUtils: BlurUtils @Before fun setup() { MockitoAnnotations.initMocks(this) `when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) `when`(crossWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) blurUtils = TestableBlurUtils() } Loading Loading @@ -74,7 +75,21 @@ class BlurUtilsTest : SysuiTestCase() { verify(transaction).apply() } inner class TestableBlurUtils() : BlurUtils(resources, corssWindowBlurListeners, dumpManager) { @Test fun testEarlyWakeUp() { 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.applyBlur(viewRootImpl, radius, true /* opaque */) verify(transaction).setEarlyWakeupStart() clearInvocations(transaction) blurUtils.applyBlur(viewRootImpl, 0, true /* opaque */) verify(transaction).setEarlyWakeupEnd() } inner class TestableBlurUtils() : BlurUtils(resources, crossWindowBlurListeners, dumpManager) { override fun supportsBlursOnWindows(): Boolean { return true } Loading