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

Commit 1a125b1d authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Don't show sideFpsIndicator if requested while asleep

The sideFps indicator should never be requested when
the device is asleep. If it is requested, don't
show it - instead try to hide() and Log an error.

Test: atest SideFpsOverlayViewBindertest
Bug: 431188311
Flag: EXEMPT bugfix
Change-Id: I426bfd280f051927c59c940fc0f204b28eb030ca
parent 4bff6fb6
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@ import com.android.systemui.display.data.repository.displayRepository
import com.android.systemui.display.data.repository.displayStateRepository
import com.android.systemui.display.shared.model.DisplayRotation
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.res.R
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.eq
@@ -90,6 +93,15 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() {
        }
    }

    @Test
    fun verifyIndicatorNotAdded_whenAsleep() {
        kosmos.testScope.runTest {
            setupTestConfiguration(asleep = true)
            updateSfpsIndicatorRequests(kosmos, mContext, primaryBouncerRequest = true)
            verify(kosmos.windowManager, never()).addView(any(), any())
        }
    }

    @Test
    fun verifyIndicatorShowAndHide_onPrimaryBouncerShowAndHide() {
        kosmos.testScope.runTest {
@@ -194,7 +206,10 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() {
        }
    }

    private suspend fun TestScope.setupTestConfiguration(isInRearDisplayMode: Boolean) {
    private suspend fun TestScope.setupTestConfiguration(
        isInRearDisplayMode: Boolean = false,
        asleep: Boolean = false,
    ) {
        kosmos.fingerprintPropertyRepository.setProperties(
            sensorId = 1,
            strength = SensorStrength.STRONG,
@@ -205,6 +220,12 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() {
        kosmos.displayStateRepository.setIsInRearDisplayMode(isInRearDisplayMode)
        kosmos.displayStateRepository.setCurrentRotation(DisplayRotation.ROTATION_0)
        kosmos.displayRepository.emitDisplayChangeEvent(0)
        kosmos.fakePowerRepository.updateWakefulness(
            if (asleep) WakefulnessState.ASLEEP else WakefulnessState.AWAKE,
            WakeSleepReason.POWER_BUTTON,
            WakeSleepReason.POWER_BUTTON,
            false,
        )
        kosmos.sideFpsOverlayViewBinder.start()
        runCurrent()
    }
+28 −9
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import com.android.systemui.keyguard.domain.interactor.DeviceEntrySideFpsOverlayInteractor
import com.android.systemui.keyguard.ui.viewmodel.SideFpsProgressBarViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.res.R
import dagger.Lazy
import javax.inject.Inject
@@ -68,6 +69,7 @@ constructor(
    private val sideFpsProgressBarViewModel: Lazy<SideFpsProgressBarViewModel>,
    private val sfpsSensorInteractor: Lazy<SideFpsSensorInteractor>,
    private val windowManager: Lazy<WindowManager>,
    private val powerInteractor: Lazy<PowerInteractor>,
) : CoreStartable {
    private val pauseDelegate: AccessibilityDelegateCompat =
        object : AccessibilityDelegateCompat() {
@@ -132,28 +134,45 @@ constructor(
                            deviceEntrySideFpsOverlayInteractor.get().showIndicatorForDeviceEntry,
                            sideFpsProgressBarViewModel.get().isVisible,
                            displayStateInteractor.get().isInRearDisplayMode,
                            powerInteractor.get().isAsleep,
                        ) {
                            systemServerAuthReason,
                            showIndicatorForDeviceEntry,
                            progressBarIsVisible,
                            isInRearDisplayMode ->
                            isInRearDisplayMode,
                            isAsleep ->
                            Log.d(
                                TAG,
                                "systemServerAuthReason = $systemServerAuthReason, " +
                                    "showIndicatorForDeviceEntry = " +
                                    "$showIndicatorForDeviceEntry, " +
                                    "progressBarIsVisible = $progressBarIsVisible, " +
                                    "isInRearDisplayMode = $isInRearDisplayMode",
                                    "isInRearDisplayMode = $isInRearDisplayMode " +
                                    "isAsleep = $isAsleep",
                            )
                            if (!isInRearDisplayMode) {
                                if (progressBarIsVisible) {
                            if (isInRearDisplayMode || progressBarIsVisible) {
                                hide()
                            } else if (systemServerAuthReason != NotRunning) {
                                if (isAsleep) {
                                    Log.e(
                                        TAG,
                                        "requesting SideFpsIndicator for " +
                                            "$systemServerAuthReason while asleep.",
                                    )
                                    hide()
                                } else {
                                    show()
                                }
                            } else if (showIndicatorForDeviceEntry) {
                                    show()
                                } else {
                                if (isAsleep) {
                                    Log.e(
                                        TAG,
                                        "requesting SideFpsIndicator for " +
                                            "DeviceEntry while asleep.",
                                    )
                                    hide()
                                } else {
                                    show()
                                }
                            } else {
                                hide()
@@ -200,8 +219,8 @@ constructor(
    private fun hide() {
        if (overlayView != null) {
            val lottie = overlayView!!.requireViewById<LottieAnimationView>(R.id.sidefps_animation)
            lottie.pauseAnimation()
            lottie.removeAllLottieOnCompositionLoadedListener()
            lottie.pauseAnimation()
            Log.d(TAG, "hide(): removing overlayView $overlayView, setting to null")
            windowManager.get().removeView(overlayView)
            overlayView = null
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.keyguard.ui.viewmodel.sideFpsProgressBarViewModel
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.power.domain.interactor.powerInteractor

val Kosmos.sideFpsOverlayViewBinder by Fixture {
    SideFpsOverlayViewBinder(
@@ -39,5 +40,6 @@ val Kosmos.sideFpsOverlayViewBinder by Fixture {
        { sideFpsProgressBarViewModel },
        { sideFpsSensorInteractor },
        { windowManager },
        { powerInteractor },
    )
}