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
This commit is contained in:
Jordan Demeulenaere
2021-10-18 10:08:40 +02:00
parent bb6c39d397
commit 4dcdafc4c7
2 changed files with 34 additions and 14 deletions

View File

@@ -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

View File

@@ -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 {