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

Commit 6c8506a0 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Simplify aodVisibility to reflect whether we're in KeyguardState.AOD.

isDozing/isAodAvailable/wakeAndUnlocking are all taken into account now whenever we decide to transition to/from AOD.

Fixes: 330475572
Test: screen off/on with and without flexi enabled, while locked and unlocked
Flag: com.android.systemui.keyguard_wm_state_refactor
Change-Id: Ia7686d1093a33f73afad4e05c729a921e77288c0
parent 32b4056b
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -1045,6 +1045,41 @@ class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
            assertThat(usingKeyguardGoingAwayAnimation).isFalse()
        }

    @Test
    fun aodVisibility_visibleFullyInAod_falseOtherwise() =
        testScope.runTest {
            val aodVisibility by collectValues(underTest.value.aodVisibility)

            transitionRepository.sendTransitionStepsThroughRunning(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.AOD,
                testScope,
                throughValue = 0.5f,
            )

            assertEquals(listOf(false), aodVisibility)

            transitionRepository.sendTransitionStep(
                TransitionStep(
                    transitionState = TransitionState.FINISHED,
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.AOD,
                )
            )
            runCurrent()

            assertEquals(listOf(false, true), aodVisibility)

            transitionRepository.sendTransitionStepsThroughRunning(
                from = KeyguardState.AOD,
                to = KeyguardState.GONE,
                testScope,
            )
            runCurrent()

            assertEquals(listOf(false, true, false), aodVisibility)
        }

    companion object {
        private val progress = MutableStateFlow(0f)

+3 −12
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import com.android.systemui.Flags.transitionRaceCondition
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.Companion.deviceIsAsleepInState
@@ -331,17 +330,9 @@ constructor(
     * clock/smartspace/notif icons are visible.
     */
    val aodVisibility: Flow<Boolean> =
        combine(
                keyguardInteractor.isDozing,
                keyguardInteractor.isAodAvailable,
                keyguardInteractor.biometricUnlockState,
            ) { isDozing, isAodAvailable, biometricUnlockState ->
                // AOD is visible if we're dozing, unless we are wake and unlocking (where we go
                // directly from AOD to unlocked while dozing).
                isDozing &&
                    isAodAvailable &&
                    !BiometricUnlockMode.isWakeAndUnlock(biometricUnlockState.mode)
            }
        transitionInteractor
            .transitionValue(KeyguardState.AOD)
            .map { it == 1f }
            .distinctUntilChanged()

    companion object {
+27 −6
Original line number Diff line number Diff line
@@ -124,8 +124,8 @@ class FakeKeyguardTransitionRepository(
    /**
     * Sends TransitionSteps between [from] and [to], calling [runCurrent] after each step.
     *
     * By default, sends steps through FINISHED (STARTED, RUNNING, FINISHED) but can be halted part
     * way using [throughTransitionState].
     * By default, sends steps through FINISHED (STARTED, RUNNING @0.5f, RUNNING @1f, FINISHED) but
     * can be halted part way using [throughTransitionState].
     */
    suspend fun sendTransitionSteps(
        from: KeyguardState,
@@ -136,6 +136,25 @@ class FakeKeyguardTransitionRepository(
        sendTransitionSteps(from, to, testScope.testScheduler, throughTransitionState)
    }

    /**
     * Sends a STARTED step between [from] and [to], followed by two RUNNING steps at value
     * [throughValue] / 2 and [throughValue], calling [runCurrent] after each step.
     */
    suspend fun sendTransitionStepsThroughRunning(
        from: KeyguardState,
        to: KeyguardState,
        testScope: TestScope,
        throughValue: Float = 1f,
    ) {
        sendTransitionSteps(
            from,
            to,
            testScope.testScheduler,
            TransitionState.RUNNING,
            throughValue,
        )
    }

    /**
     * Sends the provided [step] and makes sure that all previous [TransitionState]'s are sent when
     * [fillInSteps] is true. e.g. when a step FINISHED is provided, a step with STARTED and RUNNING
@@ -178,14 +197,15 @@ class FakeKeyguardTransitionRepository(
    /**
     * Sends TransitionSteps between [from] and [to], calling [runCurrent] after each step.
     *
     * By default, sends steps through FINISHED (STARTED, RUNNING, FINISHED) but can be halted part
     * way using [throughTransitionState].
     * By default, sends steps through FINISHED (STARTED, RUNNING @0.5f, RUNNING @1f, FINISHED) but
     * can be halted part way using [throughTransitionState].
     */
    suspend fun sendTransitionSteps(
        from: KeyguardState,
        to: KeyguardState,
        testScheduler: TestCoroutineScheduler,
        throughTransitionState: TransitionState = TransitionState.FINISHED,
        throughTransitionValue: Float = 1f,
    ) {
        val lastStep = _transitions.replayCache.lastOrNull()
        if (lastStep != null && lastStep.transitionState != TransitionState.FINISHED) {
@@ -216,13 +236,14 @@ class FakeKeyguardTransitionRepository(
            throughTransitionState == TransitionState.RUNNING ||
                throughTransitionState == TransitionState.FINISHED
        ) {
            // Send two steps to better simulate RUNNING transitions.
            sendTransitionStep(
                step =
                    TransitionStep(
                        transitionState = TransitionState.RUNNING,
                        from = from,
                        to = to,
                        value = 0.5f,
                        value = throughTransitionValue / 2f,
                    )
            )
            testScheduler.runCurrent()
@@ -233,7 +254,7 @@ class FakeKeyguardTransitionRepository(
                        transitionState = TransitionState.RUNNING,
                        from = from,
                        to = to,
                        value = 1f,
                        value = throughTransitionValue,
                    )
            )
            testScheduler.runCurrent()