Merge "Apply early wake-up flags when requesting blur" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-17 19:12:48 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 5 deletions

View File

@@ -272,6 +272,9 @@
<!-- Permission to register process observer --> <!-- Permission to register process observer -->
<uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/> <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 --> <!-- Restore settings (used by QS) even if they have been modified -->
<uses-permission android:name="android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE" /> <uses-permission android:name="android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE" />

View File

@@ -45,6 +45,8 @@ open class BlurUtils @Inject constructor(
val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius)
val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius) val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius)
private var lastAppliedBlur = 0
init { init {
dumpManager.registerDumpable(javaClass.name, this) dumpManager.registerDumpable(javaClass.name, this)
} }
@@ -75,17 +77,25 @@ open class BlurUtils @Inject constructor(
* *
* @param viewRootImpl The window root. * @param viewRootImpl The window root.
* @param radius blur radius in pixels. * @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 || if (viewRootImpl == null || !viewRootImpl.surfaceControl.isValid ||
!supportsBlursOnWindows()) { !supportsBlursOnWindows()) {
return return
} }
createTransaction().use { createTransaction().use {
it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius) 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() it.apply()
} }
lastAppliedBlur = radius
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -27,6 +27,7 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.eq import org.mockito.Mockito.eq
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
@@ -38,13 +39,13 @@ class BlurUtilsTest : SysuiTestCase() {
@Mock lateinit var resources: Resources @Mock lateinit var resources: Resources
@Mock lateinit var dumpManager: DumpManager @Mock lateinit var dumpManager: DumpManager
@Mock lateinit var transaction: SurfaceControl.Transaction @Mock lateinit var transaction: SurfaceControl.Transaction
@Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners @Mock lateinit var crossWindowBlurListeners: CrossWindowBlurListeners
lateinit var blurUtils: BlurUtils lateinit var blurUtils: BlurUtils
@Before @Before
fun setup() { fun setup() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
`when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true) `when`(crossWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true)
blurUtils = TestableBlurUtils() blurUtils = TestableBlurUtils()
} }
@@ -74,7 +75,21 @@ class BlurUtilsTest : SysuiTestCase() {
verify(transaction).apply() 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 { override fun supportsBlursOnWindows(): Boolean {
return true return true
} }