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

Commit 71d19085 authored by Lucas Silva's avatar Lucas Silva
Browse files

Avoid transitioning to GH from dozing/AOD when occluded

Bug: 402645064
Test: atest FromAodTransitionInteractor
Test: atest FromDozingTransitionInteractor
Flag: com.android.systemui.glanceable_hub_v2
Change-Id: Iddb908b3d5174096d3721d96f5fad499208239c1
parent aa09e1ba
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
import com.android.systemui.kosmos.advanceTimeBy
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
@@ -71,6 +72,7 @@ import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInterac
import com.android.systemui.testKosmos
import com.google.common.truth.Truth
import junit.framework.Assert.assertEquals
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
@@ -464,6 +466,27 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN)
        }

    @Test
    @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
    fun testTransitionToOccluded_onWakeUpFromAod_whenGlanceableHubEnabled() =
        kosmos.runTest {
            setCommunalV2Available(true)
            fakeKeyguardRepository.setKeyguardOccluded(true)

            val currentScene by collectLastValue(communalSceneInteractor.currentScene)
            fakeCommunalSceneRepository.changeScene(CommunalScenes.Blank)

            // Communal is not showing
            Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Blank)

            powerInteractor.setAwakeForTest()
            advanceTimeBy(100.milliseconds) // account for debouncing

            Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Blank)
            assertThat(transitionRepository)
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.OCCLUDED)
        }

    /** Regression test for b/348583197. */
    @Test
    fun testTransitionToAod_ifOccludedDuringTransitingToAod_fromGone() =
+24 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.advanceTimeBy
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
@@ -60,6 +61,7 @@ import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth
import junit.framework.Assert.assertEquals
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.advanceTimeBy
@@ -247,6 +249,28 @@ class FromDozingTransitionInteractorTest(flags: FlagsParameterization?) : SysuiT
                .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.LOCKSCREEN)
        }

    @Test
    @DisableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR, FLAG_SCENE_CONTAINER)
    fun testTransitionOccluded_onWakeup_ifGlanceableHubAvailableAndOccluded() =
        kosmos.runTest {
            setCommunalAvailable(true)
            fakeKeyguardRepository.setKeyguardOccluded(true)
            if (!glanceableHubV2()) {
                whenever(dreamManager.canStartDreaming(anyBoolean())).thenReturn(true)
            }

            // Device turns on.
            powerInteractor.setAwakeForTest()
            advanceTimeBy(100.milliseconds)

            // We do not transition to the hub.
            Truth.assertThat(communalSceneRepository.currentScene.value)
                .isEqualTo(CommunalScenes.Blank)
            // No transitions are directly started by this interactor.
            assertThat(transitionRepository)
                .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.OCCLUDED)
        }

    @Test
    @EnableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR)
    fun testTransitionToOccluded_onWakeup_whenOccludingActivityOnTop() =
+2 −1
Original line number Diff line number Diff line
@@ -137,7 +137,8 @@ constructor(
                        val shouldTransitionToCommunal =
                            communalSettingsInteractor.isV2FlagEnabled() &&
                                autoOpenCommunal &&
                                !detailedWakefulness.isAwakeFromMotionOrLift()
                                !detailedWakefulness.isAwakeFromMotionOrLift() &&
                                !isKeyguardOccludedLegacy

                        if (shouldTransitionToGone) {
                            // TODO(b/360368320): Adapt for scene framework
+3 −1
Original line number Diff line number Diff line
@@ -125,7 +125,9 @@ constructor(
        wakefulness: WakefulnessModel,
    ) =
        if (communalSettingsInteractor.isV2FlagEnabled()) {
            shouldShowCommunal && !wakefulness.isAwakeFromMotionOrLift()
            shouldShowCommunal &&
                !wakefulness.isAwakeFromMotionOrLift() &&
                !keyguardInteractor.isKeyguardOccluded.value
        } else {
            isCommunalAvailable && dreamManager.canStartDreaming(false)
        }