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

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

Replace hidden keyguard states with occluded state

Instead of manually tracking hidden states in KeyguardRootViewModel,
just track the occlusion state.

Bug: 361796575
Test: atest KeyguardRootViewModelTest
Flag: EXEMPT bugfix
Change-Id: I21996ca5f3605e1a76d9408a8491575bcf6cc4dd
parent 0e0eb496
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -360,6 +360,7 @@ class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase()
        }

    @Test
    @DisableSceneContainer
    fun alpha_transitionBetweenHubAndDream_isZero() =
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha(viewState))
+10 −30
Original line number Diff line number Diff line
@@ -34,20 +34,18 @@ import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
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.GONE
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.ui.StateToValue
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
import com.android.systemui.util.kotlin.BooleanFlowOperators.any
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import com.android.systemui.util.kotlin.pairwise
import com.android.systemui.util.kotlin.sample
@@ -86,6 +84,7 @@ constructor(
    private val communalInteractor: CommunalInteractor,
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    private val notificationsKeyguardInteractor: NotificationsKeyguardInteractor,
    notificationShadeWindowModel: NotificationShadeWindowModel,
    private val alternateBouncerToAodTransitionViewModel: AlternateBouncerToAodTransitionViewModel,
    private val alternateBouncerToGoneTransitionViewModel:
        AlternateBouncerToGoneTransitionViewModel,
@@ -196,38 +195,19 @@ constructor(
            }
            .distinctUntilChanged()

    /**
     * Keyguard states which should fully hide the keyguard.
     *
     * Note: [GONE] is not included as it is handled separately.
     */
    private val hiddenKeyguardStates = listOf(OCCLUDED, DREAMING, GLANCEABLE_HUB)

    /**
     * Keyguard should not show if fully transitioned into a hidden keyguard state or if
     * transitioning between hidden states.
     */
    private val hideKeyguard: Flow<Boolean> =
        (hiddenKeyguardStates.map { state ->
                keyguardTransitionInteractor
                    .transitionValue(state)
                    .map { it == 1f }
                    .onStart { emit(false) }
            } +
                listOf(
        anyOf(
            notificationShadeWindowModel.isKeyguardOccluded,
            communalInteractor.isIdleOnCommunal,
            keyguardTransitionInteractor
                .transitionValue(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
                .map { it == 1f }
                .onStart { emit(false) },
                    keyguardTransitionInteractor
                        .isInTransitionWhere(
                            fromStatePredicate = { hiddenKeyguardStates.contains(it) },
                            toStatePredicate = { hiddenKeyguardStates.contains(it) },
        )
                        .onStart { emit(false) },
                ))
            .any()

    /** Last point that the root view was tapped */
    val lastRootViewTapPosition: Flow<Point?> = keyguardInteractor.lastRootViewTapPosition
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.ui.viewmodel.notificationShadeWindowModel
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
import com.android.systemui.statusbar.phone.dozeParameters
import com.android.systemui.statusbar.phone.screenOffAnimationController
@@ -39,6 +40,7 @@ val Kosmos.keyguardRootViewModel by Fixture {
        communalInteractor = communalInteractor,
        keyguardTransitionInteractor = keyguardTransitionInteractor,
        notificationsKeyguardInteractor = notificationsKeyguardInteractor,
        notificationShadeWindowModel = notificationShadeWindowModel,
        alternateBouncerToAodTransitionViewModel = alternateBouncerToAodTransitionViewModel,
        alternateBouncerToGoneTransitionViewModel = alternateBouncerToGoneTransitionViewModel,
        alternateBouncerToLockscreenTransitionViewModel =