diff options
3 files changed, 44 insertions, 13 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt index a0ebca2bc379..5a350a69920b 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt @@ -2,6 +2,7 @@ package com.android.systemui.scene.ui.composable import androidx.compose.foundation.gestures.Orientation import com.android.compose.animation.scene.ProgressConverter +import com.android.compose.animation.scene.TransitionKey import com.android.compose.animation.scene.transitions import com.android.systemui.bouncer.ui.composable.Bouncer import com.android.systemui.notifications.ui.composable.Notifications @@ -9,6 +10,7 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.TransitionKeys.SlightlyFasterShadeCollapse import com.android.systemui.scene.shared.model.TransitionKeys.ToSplitShade import com.android.systemui.scene.ui.composable.transitions.bouncerToGoneTransition +import com.android.systemui.scene.ui.composable.transitions.bouncerToLockscreenPreview import com.android.systemui.scene.ui.composable.transitions.goneToNotificationsShadeTransition import com.android.systemui.scene.ui.composable.transitions.goneToQuickSettingsShadeTransition import com.android.systemui.scene.ui.composable.transitions.goneToQuickSettingsTransition @@ -59,6 +61,14 @@ val SceneContainerTransitions = transitions { } from(Scenes.Lockscreen, to = Scenes.Bouncer) { lockscreenToBouncerTransition() } + from( + Scenes.Lockscreen, + to = Scenes.Bouncer, + key = TransitionKey.PredictiveBack, + reversePreview = { bouncerToLockscreenPreview() } + ) { + lockscreenToBouncerTransition() + } from(Scenes.Lockscreen, to = Scenes.Communal) { lockscreenToCommunalTransition() } from(Scenes.Lockscreen, to = Scenes.NotificationsShade) { lockscreenToNotificationsShadeTransition() diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToBouncerTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToBouncerTransition.kt index 022eb1f5ef77..ac54896c5031 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToBouncerTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToBouncerTransition.kt @@ -1,5 +1,6 @@ package com.android.systemui.scene.ui.composable.transitions +import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.animation.core.tween import androidx.compose.ui.unit.dp import com.android.compose.animation.scene.TransitionBuilder @@ -18,3 +19,9 @@ fun TransitionBuilder.lockscreenToBouncerTransition() { fade(Bouncer.Elements.Content) } } + +fun TransitionBuilder.bouncerToLockscreenPreview() { + fractionRange(easing = CubicBezierEasing(0.1f, 0.1f, 0f, 1f)) { + scaleDraw(Bouncer.Elements.Content, scaleY = 0.8f, scaleX = 0.8f) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt index e51a8bc65970..738b18495f3f 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt @@ -38,6 +38,8 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapConcat +import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch @@ -73,22 +75,34 @@ constructor( sceneInteractorProvider .get() .transitionState - .map { state -> + .flatMapConcat { state -> when (state) { is ObservableTransitionState.Idle -> - state.currentScene == Scenes.Shade || - state.currentScene == Scenes.NotificationsShade || - state.currentScene == Scenes.QuickSettingsShade || - state.currentScene == Scenes.Lockscreen + flowOf( + state.currentScene == Scenes.Shade || + state.currentScene == Scenes.NotificationsShade || + state.currentScene == Scenes.QuickSettingsShade || + state.currentScene == Scenes.Lockscreen + ) is ObservableTransitionState.Transition -> - state.toContent == Scenes.Shade || - state.toContent == Scenes.NotificationsShade || - state.toContent == Scenes.QuickSettingsShade || - state.toContent == Scenes.Lockscreen || - state.fromContent == Scenes.Shade || - state.fromContent == Scenes.NotificationsShade || - state.fromContent == Scenes.QuickSettingsShade || - state.fromContent == Scenes.Lockscreen + if ( + state.fromContent == Scenes.Bouncer && + state.toContent == Scenes.Lockscreen + ) { + // Lockscreen is not visible during preview stage of predictive back + state.isInPreviewStage.map { !it } + } else { + flowOf( + state.toContent == Scenes.Shade || + state.toContent == Scenes.NotificationsShade || + state.toContent == Scenes.QuickSettingsShade || + state.toContent == Scenes.Lockscreen || + state.fromContent == Scenes.Shade || + state.fromContent == Scenes.NotificationsShade || + state.fromContent == Scenes.QuickSettingsShade || + state.fromContent == Scenes.Lockscreen + ) + } } } .distinctUntilChanged() |