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

Commit 8e022543 authored by Matt Pietal's avatar Matt Pietal
Browse files

Modify occluded for shade window

This will count GLANCEABLE_HUB as an occluded state,
and not change the value when transitioning between
occluded states.

Fixes: 359939084
Test: atest NotificationShadeWindowModelTest
Flag: com.android.systemui.use_transitions_for_keyguard_occluded
Change-Id: I29ae4abc688624700a1288e6f9fd2cfe7d38ea9a
parent f584cfc3
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,
        )
    }