Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4dcdafc4 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

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
parent bb6c39d3
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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 {
            if (supportsBlursOnWindows()) {
                it.setBackgroundBlurRadius(viewRootImpl.surfaceControl, radius)
            it.setOpaque(viewRootImpl.surfaceControl, opaque)
                if (lastAppliedBlur == 0 && radius != 0) {
                    it.setEarlyWakeupStart()
                }
                if (lastAppliedBlur != 0 && radius == 0) {
                    it.setEarlyWakeupEnd()
                }
                lastAppliedBlur = radius
            }
            it.setOpaque(viewRootImpl.surfaceControl, opaque)
            it.apply()
        }
        lastAppliedBlur = radius
    }

    @VisibleForTesting
+23 −4
Original line number Diff line number Diff line
@@ -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 {