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

Commit 339d4f73 authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge "Add hub -> dreaming transition" into main

parents b97eff1d 04507d67
Loading
Loading
Loading
Loading
+19 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleMultiple
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.milliseconds
@@ -64,6 +65,7 @@ constructor(
        listenForHubToAlternateBouncer()
        listenForHubToAlternateBouncer()
        listenForHubToOccluded()
        listenForHubToOccluded()
        listenForHubToGone()
        listenForHubToGone()
        listenForHubToDreaming()
    }
    }


    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
@@ -131,6 +133,23 @@ constructor(
        }
        }
    }
    }


    private fun listenForHubToDreaming() {
        val invalidFromStates = setOf(KeyguardState.AOD, KeyguardState.DOZING)
        scope.launch("$TAG#listenForHubToDreaming") {
            keyguardInteractor.isAbleToDream
                .sampleMultiple(startedKeyguardTransitionStep, finishedKeyguardState)
                .collect { (isAbleToDream, lastStartedTransition, finishedKeyguardState) ->
                    val isOnHub = finishedKeyguardState == KeyguardState.GLANCEABLE_HUB
                    val isTransitionInterruptible =
                        lastStartedTransition.to == KeyguardState.GLANCEABLE_HUB &&
                            !invalidFromStates.contains(lastStartedTransition.from)
                    if (isAbleToDream && (isOnHub || isTransitionInterruptible)) {
                        startTransitionTo(KeyguardState.DREAMING)
                    }
                }
        }
    }

    private fun listenForHubToOccluded() {
    private fun listenForHubToOccluded() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isKeyguardOccluded.sample(startedKeyguardState, ::Pair).collect {
            keyguardInteractor.isKeyguardOccluded.sample(startedKeyguardState, ::Pair).collect {
+31 −0
Original line number Original line Diff line number Diff line
@@ -1895,6 +1895,37 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() {
            coroutineContext.cancelChildren()
            coroutineContext.cancelChildren()
        }
        }


    @Test
    fun glanceableHubToDreaming() =
        testScope.runTest {
            // GIVEN a device that is not dreaming or dozing
            keyguardRepository.setDreamingWithOverlay(false)
            keyguardRepository.setDozeTransitionModel(
                DozeTransitionModel(from = DozeStateModel.DOZE, to = DozeStateModel.FINISH)
            )
            runCurrent()

            // GIVEN a prior transition has run to GLANCEABLE_HUB
            runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.GLANCEABLE_HUB)

            // WHEN the device begins to dream
            keyguardRepository.setDreamingWithOverlay(true)
            advanceUntilIdle()

            val info =
                withArgCaptor<TransitionInfo> {
                    verify(transitionRepository).startTransition(capture())
                }
            // THEN a transition to DREAMING should occur
            assertThat(info.ownerName)
                .isEqualTo(FromGlanceableHubTransitionInteractor::class.simpleName)
            assertThat(info.from).isEqualTo(KeyguardState.GLANCEABLE_HUB)
            assertThat(info.to).isEqualTo(KeyguardState.DREAMING)
            assertThat(info.animator).isNotNull()

            coroutineContext.cancelChildren()
        }

    private fun createKeyguardInteractor(): KeyguardInteractor {
    private fun createKeyguardInteractor(): KeyguardInteractor {
        return KeyguardInteractorFactory.create(
        return KeyguardInteractorFactory.create(
                featureFlags = featureFlags,
                featureFlags = featureFlags,