diff options
9 files changed, 31 insertions, 15 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt index a266e7eb44a1..c3dc84d0a12c 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt @@ -39,6 +39,7 @@ import com.android.compose.animation.scene.MutableSceneTransitionLayoutState import com.android.compose.animation.scene.OverlayKey import com.android.compose.animation.scene.SceneKey import com.android.compose.animation.scene.SceneTransitionLayout +import com.android.compose.animation.scene.SceneTransitions import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.compose.animation.scene.observableTransitionState @@ -78,6 +79,7 @@ fun SceneContainer( sceneByKey: Map<SceneKey, Scene>, overlayByKey: Map<OverlayKey, Overlay>, initialSceneKey: SceneKey, + sceneTransitions: SceneTransitions, dataSourceDelegator: SceneDataSourceDelegator, qsSceneAdapter: Provider<QSSceneAdapter>, modifier: Modifier = Modifier, @@ -87,7 +89,7 @@ fun SceneContainer( MutableSceneTransitionLayoutState( initialScene = initialSceneKey, canChangeScene = { toScene -> viewModel.canChangeScene(toScene) }, - transitions = SceneContainerTransitions, + transitions = sceneTransitions, ) } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt index af8c357e6d36..b33a83cf202a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt @@ -68,6 +68,7 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.sceneDataSourceDelegator import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.scene.ui.composable.SceneContainer +import com.android.systemui.scene.ui.composable.SceneContainerTransitions import com.android.systemui.testKosmos import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.awaitCancellation @@ -115,7 +116,13 @@ class BouncerPredictiveBackTest : SysuiTestCase() { private val Kosmos.initialSceneKey by Fixture { Scenes.Bouncer } private val Kosmos.sceneContainerConfig by Fixture { val navigationDistances = mapOf(Scenes.Lockscreen to 1, Scenes.Bouncer to 0) - SceneContainerConfig(sceneKeys, initialSceneKey, emptyList(), navigationDistances) + SceneContainerConfig( + sceneKeys, + initialSceneKey, + SceneContainerTransitions, + emptyList(), + navigationDistances, + ) } private val view = mock<View>() @@ -182,6 +189,7 @@ class BouncerPredictiveBackTest : SysuiTestCase() { Scenes.Bouncer to bouncerScene, ), initialSceneKey = Scenes.Bouncer, + sceneTransitions = SceneContainerTransitions, overlayByKey = emptyMap(), dataSourceDelegator = kosmos.sceneDataSourceDelegator, qsSceneAdapter = { kosmos.fakeQsSceneAdapter }, diff --git a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt index 44dd34a89303..8ddd1ed04f33 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt @@ -34,6 +34,7 @@ import com.android.systemui.communal.shared.log.CommunalStatsLogProxyImpl import com.android.systemui.communal.shared.model.CommunalScenes import com.android.systemui.communal.shared.model.GlanceableHubMultiUserHelper import com.android.systemui.communal.shared.model.GlanceableHubMultiUserHelperImpl +import com.android.systemui.communal.ui.compose.sceneTransitions import com.android.systemui.communal.util.CommunalColors import com.android.systemui.communal.util.CommunalColorsImpl import com.android.systemui.communal.widgets.CommunalWidgetModule @@ -113,6 +114,7 @@ interface CommunalModule { SceneContainerConfig( sceneKeys = listOf(CommunalScenes.Blank, CommunalScenes.Communal), initialSceneKey = CommunalScenes.Blank, + transitions = sceneTransitions, navigationDistances = mapOf(CommunalScenes.Blank to 0, CommunalScenes.Communal to 1), ) diff --git a/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt index e441a23d3725..e36e40d312b5 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/KeyguardlessSceneContainerFrameworkModule.kt @@ -29,6 +29,7 @@ import com.android.systemui.scene.domain.startable.StatusBarStartable import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.scene.ui.composable.SceneContainerTransitions import com.android.systemui.scene.ui.viewmodel.SplitEdgeDetector import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.flag.DualShade @@ -98,6 +99,7 @@ interface KeyguardlessSceneContainerFrameworkModule { Scenes.Shade.takeUnless { DualShade.isEnabled }, ), initialSceneKey = Scenes.Gone, + transitions = SceneContainerTransitions, overlayKeys = listOfNotNull( Overlays.NotificationsShade.takeIf { DualShade.isEnabled }, diff --git a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt index 4beec1041a03..fe014524e3da 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt @@ -29,6 +29,7 @@ import com.android.systemui.scene.domain.startable.StatusBarStartable import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.scene.ui.composable.SceneContainerTransitions import com.android.systemui.scene.ui.viewmodel.SplitEdgeDetector import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.flag.DualShade @@ -106,6 +107,7 @@ interface SceneContainerFrameworkModule { Scenes.Shade.takeUnless { DualShade.isEnabled }, ), initialSceneKey = Scenes.Lockscreen, + transitions = SceneContainerTransitions, overlayKeys = listOfNotNull( Overlays.NotificationsShade.takeIf { DualShade.isEnabled }, diff --git a/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt index 16ed59f4e6f2..c1646b8f2060 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt @@ -20,6 +20,7 @@ import com.android.systemui.scene.domain.SceneDomainModule import com.android.systemui.scene.domain.resolver.HomeSceneFamilyResolverModule import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.scene.ui.composable.SceneContainerTransitions import dagger.Module import dagger.Provides @@ -35,7 +36,7 @@ import dagger.Provides // List SceneResolver modules for supported SceneFamilies HomeSceneFamilyResolverModule::class, - ], + ] ) object ShadelessSceneContainerFrameworkModule { @@ -46,20 +47,12 @@ object ShadelessSceneContainerFrameworkModule { return SceneContainerConfig( // Note that this list is in z-order. The first one is the bottom-most and the // last one is top-most. - sceneKeys = - listOf( - Scenes.Gone, - Scenes.Lockscreen, - Scenes.Bouncer, - ), + sceneKeys = listOf(Scenes.Gone, Scenes.Lockscreen, Scenes.Bouncer), initialSceneKey = Scenes.Lockscreen, + transitions = SceneContainerTransitions, overlayKeys = emptyList(), navigationDistances = - mapOf( - Scenes.Gone to 0, - Scenes.Lockscreen to 0, - Scenes.Bouncer to 1, - ) + mapOf(Scenes.Gone to 0, Scenes.Lockscreen to 0, Scenes.Bouncer to 1), ) } } diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneContainerConfig.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneContainerConfig.kt index 2311e47abfae..ce7be8311c68 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneContainerConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneContainerConfig.kt @@ -18,6 +18,7 @@ package com.android.systemui.scene.shared.model import com.android.compose.animation.scene.OverlayKey import com.android.compose.animation.scene.SceneKey +import com.android.compose.animation.scene.SceneTransitions /** Models the configuration of the scene container. */ data class SceneContainerConfig( @@ -38,6 +39,9 @@ data class SceneContainerConfig( */ val initialSceneKey: SceneKey, + /** Transition definitions to be used when animating between scene transitions. */ + val transitions: SceneTransitions, + /** * The keys to all overlays in the container, sorted by z-order such that the last one renders * on top of all previous ones. Overlay keys within the same container must not repeat but it's @@ -61,7 +65,7 @@ data class SceneContainerConfig( * Note that this is not the z-order of rendering; that's determined by the order of declaration * of scenes in the [sceneKeys] list. */ - val navigationDistances: Map<SceneKey, Int> + val navigationDistances: Map<SceneKey, Int>, ) { init { check(sceneKeys.isNotEmpty()) { "A container must have at least one scene key." } diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt index 1e3a233bfc7e..1c15c74d5631 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootViewBinder.kt @@ -196,6 +196,7 @@ object SceneWindowRootViewBinder { sceneByKey = sceneByKey, overlayByKey = overlayByKey, initialSceneKey = containerConfig.initialSceneKey, + sceneTransitions = containerConfig.transitions, dataSourceDelegator = dataSourceDelegator, qsSceneAdapter = qsSceneAdapter, ) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt index 3300c96b87fd..0eca818e9aac 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt @@ -13,6 +13,7 @@ import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.ui.FakeOverlay +import com.android.systemui.scene.ui.composable.SceneContainerTransitions import com.android.systemui.scene.ui.viewmodel.SceneContainerHapticsViewModel import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.scene.ui.viewmodel.splitEdgeDetector @@ -60,6 +61,7 @@ var Kosmos.sceneContainerConfig by Fixture { SceneContainerConfig( sceneKeys = sceneKeys, initialSceneKey = initialSceneKey, + transitions = SceneContainerTransitions, overlayKeys = overlayKeys, navigationDistances = navigationDistances, ) |