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

Commit 1f360526 authored by Andreas Miko's avatar Andreas Miko Committed by Android (Google) Code Review
Browse files

Merge changes I185151b0,I477a24b0,If6425f1a,I937d926b into main

* changes:
  [Scene container] Transform KeyguardOcclusionInteractor
  [Scene container] Transform KeyguardSurfaceBehindInteractor
  [Scene container] Disable boot to GONE
  [Scene container] Disable invalid edges in FromDozingTransitionInteractor
parents 904e0c5f 0fb96d50
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.authentication.data.repository.fakeAuthenticationRep
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
@@ -54,6 +55,9 @@ import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -208,6 +212,7 @@ class KeyguardOcclusionInteractorTest : SysuiTestCase() {
        }

    @Test
    @DisableSceneContainer
    fun showWhenLockedActivityLaunchedFromPowerGesture_falseIfReturningToGone() =
        testScope.runTest {
            val values by collectValues(underTest.showWhenLockedActivityLaunchedFromPowerGesture)
@@ -243,6 +248,42 @@ class KeyguardOcclusionInteractorTest : SysuiTestCase() {
                )
        }

    @Test
    @EnableSceneContainer
    fun showWhenLockedActivityLaunchedFromPowerGesture_falseIfReturningToGone_scene_container() =
        testScope.runTest {
            val values by collectValues(underTest.showWhenLockedActivityLaunchedFromPowerGesture)
            powerInteractor.setAwakeForTest()
            kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))

            powerInteractor.setAsleepForTest()

            kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Lockscreen))
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.UNDEFINED,
                to = KeyguardState.AOD,
                testScope = testScope,
                throughTransitionState = TransitionState.RUNNING
            )

            powerInteractor.onCameraLaunchGestureDetected()
            kosmos.keyguardOcclusionRepository.setShowWhenLockedActivityInfo(true)
            powerInteractor.setAwakeForTest()
            runCurrent()

            kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.UNDEFINED,
                testScope = testScope,
            )

            assertThat(values)
                .containsExactly(
                    false,
                )
        }

    @Test
    @EnableSceneContainer
    fun occludingActivityWillDismissKeyguard() =
+84 −33
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.util.kotlin.Utils.Companion.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
@@ -100,6 +101,9 @@ constructor(
                        biometricUnlockState,
                    ) ->
                    if (isWakeAndUnlock(biometricUnlockState.mode)) {
                        if (SceneContainerFlag.isEnabled) {
                            // TODO(b/336576536): Check if adaptation for scene framework is needed
                        } else {
                            startTransitionTo(
                                KeyguardState.GONE,
                                ownerReason = "biometric wake and unlock",
@@ -108,6 +112,7 @@ constructor(
                    }
                }
        }
    }

    private fun listenForDozingToAny() {
        if (KeyguardWmStateRefactor.isEnabled) {
@@ -131,21 +136,35 @@ constructor(
                        isIdleOnCommunal,
                        canTransitionToGoneOnWake,
                        primaryBouncerShowing) ->
                    startTransitionTo(
                    if (!deviceEntryRepository.isLockscreenEnabled()) {
                            KeyguardState.GONE
                        if (SceneContainerFlag.isEnabled) {
                            // TODO(b/336576536): Check if adaptation for scene framework is needed
                        } else {
                            startTransitionTo(KeyguardState.GONE)
                        }
                    } else if (canTransitionToGoneOnWake) {
                            KeyguardState.GONE
                        if (SceneContainerFlag.isEnabled) {
                            // TODO(b/336576536): Check if adaptation for scene framework is needed
                        } else {
                            startTransitionTo(KeyguardState.GONE)
                        }
                    } else if (primaryBouncerShowing) {
                            KeyguardState.PRIMARY_BOUNCER
                        if (SceneContainerFlag.isEnabled) {
                            // TODO(b/336576536): Check if adaptation for scene framework is needed
                        } else {
                            startTransitionTo(KeyguardState.PRIMARY_BOUNCER)
                        }
                    } else if (occluded) {
                            KeyguardState.OCCLUDED
                        startTransitionTo(KeyguardState.OCCLUDED)
                    } else if (isIdleOnCommunal) {
                            KeyguardState.GLANCEABLE_HUB
                        if (SceneContainerFlag.isEnabled) {
                            // TODO(b/336576536): Check if adaptation for scene framework is needed
                        } else {
                            KeyguardState.LOCKSCREEN
                            startTransitionTo(KeyguardState.GLANCEABLE_HUB)
                        }
                    } else {
                        startTransitionTo(KeyguardState.LOCKSCREEN)
                    }
                    )
                }
        }
    }
@@ -177,24 +196,56 @@ constructor(
                            // Handled by dismissFromDozing().
                            !isWakeAndUnlock(biometricUnlockState.mode)
                    ) {
                        startTransitionTo(
                        if (!KeyguardWmStateRefactor.isEnabled && canDismissLockscreen) {
                                KeyguardState.GONE
                            if (SceneContainerFlag.isEnabled) {
                                // TODO(b/336576536): Check if adaptation for scene framework is
                                // needed
                            } else {
                                startTransitionTo(
                                    KeyguardState.GONE,
                                    ownerReason = "waking from dozing"
                                )
                            }
                        } else if (
                            KeyguardWmStateRefactor.isEnabled &&
                                !deviceEntryRepository.isLockscreenEnabled()
                        ) {
                                KeyguardState.GONE
                            if (SceneContainerFlag.isEnabled) {
                                // TODO(b/336576536): Check if adaptation for scene framework is
                                // needed
                            } else {
                                startTransitionTo(
                                    KeyguardState.GONE,
                                    ownerReason = "waking from dozing"
                                )
                            }
                        } else if (primaryBouncerShowing) {
                                KeyguardState.PRIMARY_BOUNCER
                            if (SceneContainerFlag.isEnabled) {
                                // TODO(b/336576536): Check if adaptation for scene framework is
                                // needed
                            } else {
                                startTransitionTo(
                                    KeyguardState.PRIMARY_BOUNCER,
                                    ownerReason = "waking from dozing"
                                )
                            }
                        } else if (isIdleOnCommunal) {
                                KeyguardState.GLANCEABLE_HUB
                            if (SceneContainerFlag.isEnabled) {
                                // TODO(b/336576536): Check if adaptation for scene framework is
                                // needed
                            } else {
                                KeyguardState.LOCKSCREEN
                            },
                                startTransitionTo(
                                    KeyguardState.GLANCEABLE_HUB,
                                    ownerReason = "waking from dozing"
                                )
                            }
                        } else {
                            startTransitionTo(
                                KeyguardState.LOCKSCREEN,
                                ownerReason = "waking from dozing"
                            )
                        }
                    }
                }
        }
    }
+6 −4
Original line number Diff line number Diff line
@@ -91,8 +91,8 @@ constructor(

    private fun listenForDreamingToGlanceableHub() {
        if (!communalHub()) return
        if (SceneContainerFlag.isEnabled)
            return // TODO(b/336576536): Check if adaptation for scene framework is needed
        // TODO(b/336576536): Check if adaptation for scene framework is needed
        if (SceneContainerFlag.isEnabled) return
        scope.launch("$TAG#listenForDreamingToGlanceableHub", mainDispatcher) {
            glanceableHubTransitions.listenForGlanceableHubTransition(
                transitionOwnerName = TAG,
@@ -103,6 +103,8 @@ constructor(
    }

    private fun listenForDreamingToPrimaryBouncer() {
        // TODO(b/336576536): Check if adaptation for scene framework is needed
        if (SceneContainerFlag.isEnabled) return
        scope.launch {
            keyguardInteractor.primaryBouncerShowing
                .sample(startedKeyguardTransitionStep, ::Pair)
@@ -179,8 +181,8 @@ constructor(
    }

    private fun listenForDreamingToGoneWhenDismissable() {
        if (SceneContainerFlag.isEnabled)
            return // TODO(b/336576536): Check if adaptation for scene framework is needed
        // TODO(b/336576536): Check if adaptation for scene framework is needed
        if (SceneContainerFlag.isEnabled) return
        scope.launch {
            keyguardInteractor.isAbleToDream
                .sampleCombine(
+10 −4
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardOcclusionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.sample
import dagger.Lazy
import javax.inject.Inject
@@ -94,10 +95,15 @@ constructor(
                // currently
                // GONE, in which case we're going back to GONE and launching the insecure camera).
                powerInteractor.detailedWakefulness
                    .sample(transitionInteractor.currentKeyguardState, ::Pair)
                    .map { (wakefulness, currentKeyguardState) ->
                        wakefulness.powerButtonLaunchGestureTriggered &&
                            currentKeyguardState != KeyguardState.GONE
                    .sample(
                        transitionInteractor.isFinishedIn(
                            Scenes.Gone,
                            stateWithoutSceneContainer = KeyguardState.GONE
                        ),
                        ::Pair
                    )
                    .map { (wakefulness, isOnGone) ->
                        wakefulness.powerButtonLaunchGestureTriggered && !isOnGone
                    },
                // Emit false once that activity goes away.
                isShowWhenLockedActivityOnTop.filter { !it }.map { false }
+23 −12
Original line number Diff line number Diff line
@@ -19,9 +19,10 @@ package com.android.systemui.keyguard.domain.interactor
import android.content.Context
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.KeyguardSurfaceBehindRepository
import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor.Companion.isSurfaceVisible
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.notification.domain.interactor.NotificationLaunchAnimationInteractor
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.toPx
@@ -56,12 +57,18 @@ constructor(
     */
    val viewParams: Flow<KeyguardSurfaceBehindModel> =
        combine(
                transitionInteractor.startedKeyguardTransitionStep,
                transitionInteractor.currentKeyguardState,
                transitionInteractor.isInTransition(
                    Edge.create(to = Scenes.Gone),
                    edgeWithoutSceneContainer = Edge.create(to = KeyguardState.GONE)
                ),
                transitionInteractor.isFinishedIn(
                    Scenes.Gone,
                    stateWithoutSceneContainer = KeyguardState.GONE
                ),
                notificationLaunchInteractor.isLaunchAnimationRunning,
            ) { startedStep, currentState, notifAnimationRunning ->
            ) { transitioningToGone, isOnGone, notifAnimationRunning ->
                // If we're in transition to GONE, special unlock animation params apply.
                if (startedStep.to == KeyguardState.GONE && currentState != KeyguardState.GONE) {
                if (transitioningToGone) {
                    if (notifAnimationRunning) {
                        // If the notification launch animation is running, leave the alpha at 0f.
                        // The ActivityLaunchAnimator will morph it from the notification at the
@@ -87,14 +94,14 @@ constructor(
                            animateFromTranslationY =
                                SURFACE_TRANSLATION_Y_DISTANCE_DP.toPx(context).toFloat(),
                            translationY = 0f,
                            startVelocity = swipeToDismissInteractor.dismissFling.value?.velocity
                                    ?: 0f,
                            startVelocity =
                                swipeToDismissInteractor.dismissFling.value?.velocity ?: 0f,
                        )
                    }
                }

                // Default to the visibility of the current state, with no animations.
                KeyguardSurfaceBehindModel(alpha = if (isSurfaceVisible(currentState)) 1f else 0f)
                KeyguardSurfaceBehindModel(alpha = if (isOnGone) 1f else 0f)
            }
            .distinctUntilChanged()

@@ -103,10 +110,14 @@ constructor(
     */
    private val isNotificationLaunchAnimationRunningOnKeyguard =
        notificationLaunchInteractor.isLaunchAnimationRunning
            .sample(transitionInteractor.finishedKeyguardState, ::Pair)
            .map { (animationRunning, finishedState) ->
                animationRunning && finishedState != KeyguardState.GONE
            }
            .sample(
                transitionInteractor.isFinishedIn(
                    Scenes.Gone,
                    stateWithoutSceneContainer = KeyguardState.GONE
                ),
                ::Pair
            )
            .map { (animationRunning, isOnGone) -> animationRunning && !isOnGone }
            .onStart { emit(false) }

    /**
Loading