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

Commit 3462506f authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Modify occluded for shade window" into main

parents fff2dd77 8e022543
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -83,4 +85,69 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
            )
            assertThat(isKeyguardOccluded).isFalse()
        }

    @Test
    fun transitionFromOccludedToDreamingTransitionRemainsTrue() =
        testScope.runTest {
            val isKeyguardOccluded by collectLastValue(underTest.isKeyguardOccluded)
            assertThat(isKeyguardOccluded).isFalse()

            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        from = KeyguardState.LOCKSCREEN,
                        to = KeyguardState.DREAMING,
                        value = 0f,
                        transitionState = TransitionState.STARTED,
                    ),
                    TransitionStep(
                        from = KeyguardState.LOCKSCREEN,
                        to = KeyguardState.DREAMING,
                        value = 0.5f,
                        transitionState = TransitionState.RUNNING,
                    ),
                ),
                testScope,
            )
            assertThat(isKeyguardOccluded).isFalse()

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.DREAMING,
                    value = 1f,
                    transitionState = TransitionState.FINISHED,
                ),
            )
            assertThat(isKeyguardOccluded).isTrue()

            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        from = KeyguardState.DREAMING,
                        to = KeyguardState.OCCLUDED,
                        value = 0f,
                        transitionState = TransitionState.STARTED,
                    ),
                    TransitionStep(
                        from = KeyguardState.DREAMING,
                        to = KeyguardState.OCCLUDED,
                        value = 0.5f,
                        transitionState = TransitionState.RUNNING,
                    ),
                ),
                testScope,
            )
            assertThat(isKeyguardOccluded).isTrue()

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.DREAMING,
                    to = KeyguardState.OCCLUDED,
                    value = 1f,
                    transitionState = TransitionState.FINISHED,
                ),
            )
            assertThat(isKeyguardOccluded).isTrue()
        }
}
+36 −8
Original line number Diff line number Diff line
@@ -17,14 +17,15 @@
package com.android.systemui.shade.ui.viewmodel

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB
import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.BooleanFlowOperators.any
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

/** Models UI state for the shade window. */
@SysUISingleton
@@ -32,11 +33,38 @@ class NotificationShadeWindowModel
@Inject
constructor(
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
    keyguardInteractor: KeyguardInteractor,
) {
    /**
     * Considered to be occluded if in OCCLUDED, DREAMING, GLANCEABLE_HUB/Communal, or transitioning
     * between those states. Every permutation is listed so we can use optimal flows and support
     * Scenes.
     */
    val isKeyguardOccluded: Flow<Boolean> =
        anyOf(
            keyguardTransitionInteractor.transitionValue(OCCLUDED).map { it == 1f },
            keyguardTransitionInteractor.transitionValue(DREAMING).map { it == 1f },
        listOf(
                // Finished in state...
                keyguardTransitionInteractor.isFinishedIn(OCCLUDED),
                keyguardTransitionInteractor.isFinishedIn(DREAMING),
                keyguardTransitionInteractor.isFinishedIn(Scenes.Communal, GLANCEABLE_HUB),

                // ... or transitions between those states
                keyguardTransitionInteractor.isInTransition(Edge.create(OCCLUDED, DREAMING)),
                keyguardTransitionInteractor.isInTransition(Edge.create(DREAMING, OCCLUDED)),
                keyguardTransitionInteractor.isInTransition(
                    edge = Edge.create(from = OCCLUDED, to = Scenes.Communal),
                    edgeWithoutSceneContainer = Edge.create(from = OCCLUDED, to = GLANCEABLE_HUB),
                ),
                keyguardTransitionInteractor.isInTransition(
                    edge = Edge.create(from = Scenes.Communal, to = OCCLUDED),
                    edgeWithoutSceneContainer = Edge.create(from = GLANCEABLE_HUB, to = OCCLUDED),
                ),
                keyguardTransitionInteractor.isInTransition(
                    edge = Edge.create(from = DREAMING, to = Scenes.Communal),
                    edgeWithoutSceneContainer = Edge.create(from = DREAMING, to = GLANCEABLE_HUB),
                ),
                keyguardTransitionInteractor.isInTransition(
                    edge = Edge.create(from = Scenes.Communal, to = DREAMING),
                    edgeWithoutSceneContainer = Edge.create(from = GLANCEABLE_HUB, to = DREAMING),
                ),
            )
            .any()
}
+0 −2
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.shade.ui.viewmodel

import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos

@@ -24,6 +23,5 @@ val Kosmos.notificationShadeWindowModel: NotificationShadeWindowModel by
    Kosmos.Fixture {
        NotificationShadeWindowModel(
            keyguardTransitionInteractor,
            keyguardInteractor,
        )
    }