Merge "Apply early wake-up flags when requesting blur" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c4f12f0d80
@@ -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" />
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user