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

Commit 3beebdab authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Apply early wake-up flags when requesting blur" into sc-dev am: c4f12f0d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15315831

Change-Id: I6bb958f7cd3b1b5e5c2275fe5b2101674d06ea44
parents 2e8d79c7 c4f12f0d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -272,6 +272,9 @@
    <!-- Permission to register process observer -->
    <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 -->
    <uses-permission android:name="android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE" />

+12 −2
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ open class BlurUtils @Inject constructor(
    val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius)
    val maxBlurRadius = resources.getDimensionPixelSize(R.dimen.max_window_blur_radius)

    private var lastAppliedBlur = 0

    init {
        dumpManager.registerDumpable(javaClass.name, this)
    }
@@ -75,17 +77,25 @@ open class BlurUtils @Inject constructor(
     *
     * @param viewRootImpl The window root.
     * @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 ||
                !supportsBlursOnWindows()) {
            return
        }
        createTransaction().use {
            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()
        }
        lastAppliedBlur = radius
    }

    @VisibleForTesting
+18 −3
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
@@ -38,13 +39,13 @@ class BlurUtilsTest : SysuiTestCase() {
    @Mock lateinit var resources: Resources
    @Mock lateinit var dumpManager: DumpManager
    @Mock lateinit var transaction: SurfaceControl.Transaction
    @Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners
    @Mock lateinit var crossWindowBlurListeners: CrossWindowBlurListeners
    lateinit var blurUtils: BlurUtils

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        `when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true)
        `when`(crossWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true)
        blurUtils = TestableBlurUtils()
    }

@@ -74,7 +75,21 @@ class BlurUtilsTest : SysuiTestCase() {
        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 {
            return true
        }