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

Commit 8ab059aa authored by Sherry Zhou's avatar Sherry Zhou
Browse files

Fix clock staying in AOD state in LS when transitioning from bouncer and camera

Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint STAGING
Bug: 330187403
Test: manual, atest ClockEventControllerTest

Change-Id: Iff695057d0aabd8c279fd509a29bcaa1b0201581
parent acb32169
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -432,6 +432,7 @@ constructor(
                    if (MigrateClocksToBlueprint.isEnabled) {
                        listenForDozeAmountTransition(this)
                        listenForAnyStateToAodTransition(this)
                        listenForAnyStateToLockscreenTransition(this)
                    } else {
                        listenForDozeAmount(this)
                    }
@@ -565,6 +566,17 @@ constructor(
        }
    }

    @VisibleForTesting
    internal fun listenForAnyStateToLockscreenTransition(scope: CoroutineScope): Job {
        return scope.launch("$TAG#listenForAnyStateToLockscreenTransition") {
            keyguardTransitionInteractor
                    .transitionStepsToState(LOCKSCREEN)
                    .filter { it.transitionState == TransitionState.STARTED }
                    .filter { it.from != AOD }
                    .collect { handleDoze(0f) }
        }
    }

    @VisibleForTesting
    internal fun listenForDozing(scope: CoroutineScope): Job {
        return scope.launch("$TAG#listenForDozing") {
+42 −0
Original line number Diff line number Diff line
@@ -361,6 +361,27 @@ class ClockEventControllerTest : SysuiTestCase() {
            job.cancel()
        }

    @Test
    fun listenForTransitionToLSFromOccluded_updatesClockDozeAmountToOne() =
        runBlocking(IMMEDIATE) {
            val transitionStep = MutableStateFlow(TransitionStep())
            whenever(keyguardTransitionInteractor.transitionStepsToState(KeyguardState.LOCKSCREEN))
                    .thenReturn(transitionStep)

            val job = underTest.listenForAnyStateToLockscreenTransition(this)
            transitionStep.value =
                    TransitionStep(
                            from = KeyguardState.OCCLUDED,
                            to = KeyguardState.LOCKSCREEN,
                            transitionState = TransitionState.STARTED,
                    )
            yield()

            verify(animations, times(2)).doze(0f)

            job.cancel()
        }

    @Test
    fun listenForTransitionToAodFromLockscreen_neverUpdatesClockDozeAmount() =
        runBlocking(IMMEDIATE) {
@@ -382,6 +403,27 @@ class ClockEventControllerTest : SysuiTestCase() {
                job.cancel()
            }

    @Test
    fun listenForAnyStateToLockscreenTransition_neverUpdatesClockDozeAmount() =
        runBlocking(IMMEDIATE) {
            val transitionStep = MutableStateFlow(TransitionStep())
            whenever(keyguardTransitionInteractor.transitionStepsToState(KeyguardState.LOCKSCREEN))
                    .thenReturn(transitionStep)

            val job = underTest.listenForAnyStateToLockscreenTransition(this)
            transitionStep.value =
                    TransitionStep(
                            from = KeyguardState.AOD,
                            to = KeyguardState.LOCKSCREEN,
                            transitionState = TransitionState.STARTED,
                    )
            yield()

            verify(animations, never()).doze(0f)

            job.cancel()
        }

    @Test
    fun unregisterListeners_validate() =
        runBlocking(IMMEDIATE) {