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:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user