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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
index cfbe3b2..cf2328f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
@@ -80,22 +80,23 @@
      * @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
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt
index 8e52588..e9676c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/BlurUtilsTest.kt
@@ -27,9 +27,12 @@
 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 @@
     @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()
     }
 
@@ -76,6 +78,21 @@
     }
 
     @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
         val surfaceControl = mock(SurfaceControl::class.java)
@@ -89,9 +106,11 @@
         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 {