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

Commit be0a85bb authored by Lucas Silva's avatar Lucas Silva
Browse files

Exit GH when dreaming starts

When dreaming starts, exit the glanceable hub to transition to the
dream when glanceable hub v2 is enabled.

Bug: 391704017
Test: atest KeyguardTransitionScenariosTest
Flag: com.android.systemui.glanceable_hub_v2
Change-Id: Ia1e19d7132ba160a45f2a9d0c66569f0184ac2b1
parent 53d05392
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN
import com.android.systemui.Flags
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.Flags.FLAG_COMMUNAL_SCENE_KTF_REFACTOR
import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
import com.android.systemui.Flags.glanceableHubV2
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.communal.domain.interactor.CommunalSceneTransitionInteractor
@@ -34,6 +36,8 @@ import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.communal.domain.interactor.communalSceneTransitionInteractor
import com.android.systemui.communal.domain.interactor.setCommunalAvailable
import com.android.systemui.communal.domain.interactor.setCommunalV2ConfigEnabled
import com.android.systemui.communal.domain.interactor.setCommunalV2Enabled
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.flags.BrokenWithSceneContainer
import com.android.systemui.flags.DisableSceneContainer
@@ -153,6 +157,9 @@ class KeyguardTransitionScenariosTest(flags: FlagsParameterization?) : SysuiTest
        if (!SceneContainerFlag.isEnabled) {
            mSetFlagsRule.disableFlags(Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR)
        }
        if (glanceableHubV2()) {
            kosmos.setCommunalV2ConfigEnabled(true)
        }
        featureFlags = FakeFeatureFlags()

        fromLockscreenTransitionInteractor.start()
@@ -1946,6 +1953,39 @@ class KeyguardTransitionScenariosTest(flags: FlagsParameterization?) : SysuiTest
            coroutineContext.cancelChildren()
        }

    @Test
    @DisableSceneContainer
    @EnableFlags(FLAG_COMMUNAL_SCENE_KTF_REFACTOR, FLAG_GLANCEABLE_HUB_V2)
    fun glanceableHubToDreaming_v2() =
        testScope.runTest {
            kosmos.setCommunalV2Enabled(true)

            // GIVEN a device that is not dreaming or dozing
            keyguardRepository.setDreamingWithOverlay(false)
            keyguardRepository.setDozeTransitionModel(
                DozeTransitionModel(from = DozeStateModel.DOZE, to = DozeStateModel.FINISH)
            )
            advanceTimeBy(600.milliseconds)

            // GIVEN a prior transition has run to glanceable hub
            communalSceneInteractor.changeScene(CommunalScenes.Communal, "test")
            runCurrent()
            clearInvocations(transitionRepository)

            keyguardRepository.setDreamingWithOverlay(true)
            advanceTimeBy(100.milliseconds)

            assertThat(transitionRepository)
                .startedTransition(
                    ownerName = CommunalSceneTransitionInteractor::class.simpleName,
                    from = KeyguardState.GLANCEABLE_HUB,
                    to = KeyguardState.DREAMING,
                    animatorAssertion = { it.isNull() },
                )

            coroutineContext.cancelChildren()
        }

    @Test
    @DisableSceneContainer
    @DisableFlags(FLAG_COMMUNAL_SCENE_KTF_REFACTOR)
+19 −1
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import com.android.app.tracing.coroutines.launchTraced as launch
import kotlinx.coroutines.withContext

@OptIn(FlowPreview::class)
@@ -92,6 +91,7 @@ constructor(
        listenForHubToAlternateBouncer()
        listenForHubToOccluded()
        listenForHubToGone()
        listenForHubToDreaming()
    }

    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
@@ -177,6 +177,24 @@ constructor(
        }
    }

    private fun listenForHubToDreaming() {
        if (!communalSettingsInteractor.isV2FlagEnabled()) {
            return
        }

        scope.launch {
            keyguardInteractor.isAbleToDream
                .filterRelevantKeyguardStateAnd { isAbleToDream -> isAbleToDream }
                .collect {
                    communalSceneInteractor.changeScene(
                        newScene = CommunalScenes.Blank,
                        loggingReason = "hub to dreaming",
                        keyguardState = KeyguardState.DREAMING,
                    )
                }
        }
    }

    private fun listenForHubToOccluded() {
        if (KeyguardWmStateRefactor.isEnabled) {
            scope.launch {