diff options
26 files changed, 56 insertions, 131 deletions
diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt index 2b1268e40f00..5b368df9d0ef 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt @@ -17,7 +17,7 @@ package com.android.systemui.scene import com.android.systemui.bouncer.ui.composable.BouncerScene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/CommunalSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/CommunalSceneModule.kt index 94b5db2535ab..74ce4bb754ba 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/CommunalSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/CommunalSceneModule.kt @@ -17,7 +17,7 @@ package com.android.systemui.scene import com.android.systemui.communal.ui.compose.CommunalScene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/GoneSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/GoneSceneModule.kt index bc3fef15e577..871ade90a5dd 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/GoneSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/GoneSceneModule.kt @@ -16,8 +16,8 @@ package com.android.systemui.scene -import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.ui.composable.GoneScene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/LockscreenSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/LockscreenSceneModule.kt index 72965fb24d89..bfeaf928dfe8 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/LockscreenSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/LockscreenSceneModule.kt @@ -27,7 +27,7 @@ import com.android.systemui.keyguard.ui.composable.LockscreenScene import com.android.systemui.keyguard.ui.composable.LockscreenSceneBlueprintModule import com.android.systemui.keyguard.ui.composable.blueprint.ComposableLockscreenSceneBlueprint import com.android.systemui.keyguard.ui.viewmodel.LockscreenContentViewModel -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.Provides diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/NotificationsShadeSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/NotificationsShadeSceneModule.kt index 9b736b8edcbf..c58df35fd6cb 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/NotificationsShadeSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/NotificationsShadeSceneModule.kt @@ -17,7 +17,7 @@ package com.android.systemui.scene import com.android.systemui.notifications.ui.composable.NotificationsShadeScene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsSceneModule.kt index ee1f5259ec69..d55210da3739 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsSceneModule.kt @@ -17,7 +17,7 @@ package com.android.systemui.scene import com.android.systemui.qs.ui.composable.QuickSettingsScene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsShadeSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsShadeSceneModule.kt index 3d7401d8f263..5bb6ae46bae2 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsShadeSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/QuickSettingsShadeSceneModule.kt @@ -17,7 +17,7 @@ package com.android.systemui.scene import com.android.systemui.qs.ui.composable.QuickSettingsShadeScene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import dagger.Binds import dagger.Module import dagger.multibindings.IntoSet diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/ShadeSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/ShadeSceneModule.kt index c655d6ba3f2f..186914f56b06 100644 --- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/ShadeSceneModule.kt +++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/ShadeSceneModule.kt @@ -16,7 +16,7 @@ package com.android.systemui.scene -import com.android.systemui.scene.shared.model.Scene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.shade.ui.composable.ShadeScene import dagger.Binds import dagger.Module diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt index 270d751d2d3c..c5bb33c414b1 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt @@ -34,7 +34,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -57,7 +57,7 @@ constructor( private val actionsViewModelFactory: BouncerSceneActionsViewModel.Factory, private val contentViewModelFactory: BouncerSceneContentViewModel.Factory, private val dialogFactory: BouncerDialogFactory, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.Bouncer private val actionsViewModel: BouncerSceneActionsViewModel by lazy { diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalScene.kt index 54ffcf475680..f658169a24ff 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalScene.kt @@ -29,7 +29,7 @@ import com.android.systemui.communal.widgets.WidgetInteractionHandler import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.statusbar.phone.SystemUIDialogFactory import javax.inject.Inject import kotlinx.coroutines.awaitCancellation @@ -46,7 +46,7 @@ constructor( private val dialogFactory: SystemUIDialogFactory, private val interactionHandler: WidgetInteractionHandler, private val widgetSection: CommunalAppWidgetSection, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.Communal override val destinationScenes: Flow<Map<UserAction, UserActionResult>> = diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt index 2029e9e7f139..5f600d3002cc 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt @@ -22,13 +22,13 @@ import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult -import com.android.compose.animation.scene.animateSceneFloatAsState +import com.android.compose.animation.scene.animateContentFloatAsState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneActionsViewModel import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.flow.Flow @@ -40,7 +40,7 @@ class LockscreenScene constructor( actionsViewModelFactory: LockscreenSceneActionsViewModel.Factory, private val lockscreenContent: Lazy<LockscreenContent>, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.Lockscreen private val actionsViewModel: LockscreenSceneActionsViewModel by lazy { @@ -70,7 +70,7 @@ private fun SceneScope.LockscreenScene( lockscreenContent: Lazy<LockscreenContent>, modifier: Modifier = Modifier, ) { - animateSceneFloatAsState( + animateContentFloatAsState( value = QuickSettings.SharedValues.SquishinessValues.LockscreenSceneStarting, key = QuickSettings.SharedValues.TilesSquishiness, ) diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt index 8c159c52763c..ea3f066960c1 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeScene.kt @@ -32,7 +32,7 @@ import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeSceneActionsViewModel import com.android.systemui.scene.session.ui.composable.SaveableSession import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.composable.ExpandedShadeHeader import com.android.systemui.shade.ui.composable.OverlayShade @@ -57,7 +57,7 @@ constructor( private val statusBarIconController: StatusBarIconController, private val shadeSession: SaveableSession, private val stackScrollView: Lazy<NotificationScrollView>, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.NotificationsShade diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt index d372577142c1..373383f0a2fe 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt @@ -98,7 +98,7 @@ import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneContentViewModel import com.android.systemui.res.R import com.android.systemui.scene.session.ui.composable.SaveableSession import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.composable.CollapsedShadeHeader import com.android.systemui.shade.ui.composable.ExpandedShadeHeader @@ -113,9 +113,11 @@ import dagger.Lazy import javax.inject.Inject import javax.inject.Named import kotlin.math.roundToInt +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow /** The Quick Settings (AKA "QS") scene shows the quick setting tiles. */ +@OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton class QuickSettingsScene @Inject @@ -130,7 +132,7 @@ constructor( private val statusBarIconController: StatusBarIconController, private val mediaCarouselController: MediaCarouselController, @Named(MediaModule.QS_PANEL) private val mediaHost: MediaHost, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.QuickSettings private val actionsViewModel: QuickSettingsSceneActionsViewModel by lazy { diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt index 9769205396aa..9316eb90a7a2 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeScene.kt @@ -19,7 +19,6 @@ package com.android.systemui.qs.ui.composable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.UserAction @@ -31,7 +30,7 @@ import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.ui.viewmodel.QuickSettingsShadeSceneActionsViewModel import com.android.systemui.qs.ui.viewmodel.QuickSettingsShadeSceneContentViewModel import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.shade.ui.composable.ExpandedShadeHeader import com.android.systemui.shade.ui.composable.OverlayShade import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel @@ -50,7 +49,7 @@ constructor( private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, private val statusBarIconController: StatusBarIconController, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.QuickSettingsShade diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/ComposableScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/ComposableScene.kt deleted file mode 100644 index 3da6a02d08d3..000000000000 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/ComposableScene.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.scene.ui.composable - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import com.android.compose.animation.scene.SceneScope -import com.android.systemui.scene.shared.model.Scene - -/** Compose-capable extension of [Scene]. */ -interface ComposableScene : Scene { - @Composable fun SceneScope.Content(modifier: Modifier) -} diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt index cbbace47ecc4..6fb4724426fc 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt @@ -23,8 +23,8 @@ import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult -import com.android.compose.animation.scene.animateSceneDpAsState -import com.android.compose.animation.scene.animateSceneFloatAsState +import com.android.compose.animation.scene.animateContentDpAsState +import com.android.compose.animation.scene.animateContentFloatAsState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.lifecycle.ExclusiveActivatable import com.android.systemui.lifecycle.rememberViewModel @@ -51,7 +51,7 @@ constructor( private val notificationStackScrolLView: Lazy<NotificationScrollView>, private val notificationsPlaceholderViewModelFactory: NotificationsPlaceholderViewModel.Factory, private val viewModelFactory: GoneSceneActionsViewModel.Factory, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.Gone private val actionsViewModel: GoneSceneActionsViewModel by lazy { viewModelFactory.create() } @@ -67,11 +67,11 @@ constructor( override fun SceneScope.Content( modifier: Modifier, ) { - animateSceneFloatAsState( + animateContentFloatAsState( value = QuickSettings.SharedValues.SquishinessValues.GoneSceneStarting, key = QuickSettings.SharedValues.TilesSquishiness, ) - animateSceneDpAsState(value = Default, key = MediaLandscapeTopOffset, canOverflow = false) + animateContentDpAsState(value = Default, key = MediaLandscapeTopOffset, canOverflow = false) Spacer(modifier.fillMaxSize()) SnoozeableHeadsUpNotificationSpace( stackScrollView = notificationStackScrolLView.get(), diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/Scene.kt index 8e2e8a1d521b..5319ec345d00 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/Scene.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,12 @@ * limitations under the License. */ -package com.android.systemui.scene.shared.model +package com.android.systemui.scene.ui.composable +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneKey +import com.android.compose.animation.scene.SceneScope import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.systemui.lifecycle.Activatable @@ -56,4 +59,6 @@ interface Scene : Activatable { * current scene is this one. */ val destinationScenes: Flow<Map<UserAction, UserActionResult>> + + @Composable fun SceneScope.Content(modifier: Modifier) } 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 f9723d99656b..851fa3ff005e 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 @@ -54,11 +54,11 @@ import kotlinx.coroutines.flow.collectLatest * containers. * * @param viewModel The UI state holder for this container. - * @param sceneByKey Mapping of [ComposableScene] by [SceneKey], ordered by z-order such that the - * last scene is rendered on top of all other scenes. It's critical that this map contains exactly - * and only the scenes on this container. In other words: (a) there should be no scene in this map - * that is not in the configuration for this container and (b) all scenes in the configuration - * must have entries in this map. + * @param sceneByKey Mapping of [Scene] by [SceneKey], ordered by z-order such that the last scene + * is rendered on top of all other scenes. It's critical that this map contains exactly and only + * the scenes on this container. In other words: (a) there should be no scene in this map that is + * not in the configuration for this container and (b) all scenes in the configuration must have + * entries in this map. * @param overlayByKey Mapping of [Overlay] by [OverlayKey], ordered by z-order such that the last * overlay is rendered on top of all other overlays. It's critical that this map contains exactly * and only the overlays on this container. In other words: (a) there should be no overlay in this @@ -69,7 +69,7 @@ import kotlinx.coroutines.flow.collectLatest @Composable fun SceneContainer( viewModel: SceneContainerViewModel, - sceneByKey: Map<SceneKey, ComposableScene>, + sceneByKey: Map<SceneKey, Scene>, overlayByKey: Map<OverlayKey, Overlay>, initialSceneKey: SceneKey, dataSourceDelegator: SceneDataSourceDelegator, @@ -123,16 +123,16 @@ fun SceneContainer( }, ) { SceneTransitionLayout(state = state, modifier = modifier.fillMaxSize()) { - sceneByKey.forEach { (sceneKey, composableScene) -> + sceneByKey.forEach { (sceneKey, scene) -> scene( key = sceneKey, userActions = userActionsByContentKey.getOrDefault(sceneKey, emptyMap()) ) { // Activate the scene. - LaunchedEffect(composableScene) { composableScene.activate() } + LaunchedEffect(scene) { scene.activate() } // Render the scene. - with(composableScene) { + with(scene) { this@scene.Content( modifier = Modifier.element(sceneKey.rootElementKey).fillMaxSize(), ) diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt index d8ab0a1ab577..5fcf5226a585 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt @@ -106,7 +106,7 @@ import com.android.systemui.qs.ui.composable.QuickSettings.SharedValues.MediaOff import com.android.systemui.res.R import com.android.systemui.scene.session.ui.composable.SaveableSession import com.android.systemui.scene.shared.model.Scenes -import com.android.systemui.scene.ui.composable.ComposableScene +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneActionsViewModel import com.android.systemui.shade.ui.viewmodel.ShadeSceneContentViewModel @@ -120,6 +120,7 @@ import dagger.Lazy import javax.inject.Inject import javax.inject.Named import kotlin.math.roundToInt +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow object Shade { @@ -146,6 +147,7 @@ object Shade { } /** The shade scene shows scrolling list of notifications and some of the quick setting tiles. */ +@OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton class ShadeScene @Inject @@ -161,7 +163,7 @@ constructor( private val mediaCarouselController: MediaCarouselController, @Named(QUICK_QS_PANEL) private val qqsMediaHost: MediaHost, @Named(QS_PANEL) private val qsMediaHost: MediaHost, -) : ExclusiveActivatable(), ComposableScene { +) : ExclusiveActivatable(), Scene { override val key = Scenes.Shade diff --git a/packages/SystemUI/docs/scene.md b/packages/SystemUI/docs/scene.md index 2f50bbd66d16..a7740c677d51 100644 --- a/packages/SystemUI/docs/scene.md +++ b/packages/SystemUI/docs/scene.md @@ -121,7 +121,7 @@ Should a variant owner or OEM want to replace or add a new scene, they could do so by defining their own scene. This section describes how to do that. Each scene is defined as an implementation of the -[`ComposableScene`](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/ComposableScene.kt) +[`Scene`](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/Scene.kt) interface, which has three parts: 1. The `key` property returns the [`SceneKey`](https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/packages/SystemUI/src/com/android/systemui/scene/shared/model/SceneKey.kt) that uniquely identifies that scene 2. The `destinationScenes` `Flow` returns @@ -138,7 +138,7 @@ see the [Scene transition animations](#Scene-transition-animations) section For example: ```kotlin -@SysUISingleton class YourScene @Inject constructor( /* your dependencies here */ ) : ComposableScene { +@SysUISingleton class YourScene @Inject constructor( /* your dependencies here */ ) : Scene { override val key = SceneKey.YourScene override val destinationScenes: StateFlow<Map<UserAction, SceneModel>> = diff --git a/packages/SystemUI/src/com/android/systemui/scene/EmptySceneModule.kt b/packages/SystemUI/src/com/android/systemui/scene/EmptySceneModule.kt index 4c730a03f0a9..7a57fba9bb81 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/EmptySceneModule.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/EmptySceneModule.kt @@ -16,8 +16,8 @@ package com.android.systemui.scene -import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.ui.composable.Overlay +import com.android.systemui.scene.ui.composable.Scene import dagger.Module import dagger.Provides import dagger.multibindings.ElementsIntoSet diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt index c1bb6fb57685..8a2e2745264e 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneWindowRootView.kt @@ -6,10 +6,10 @@ import android.view.MotionEvent import android.view.View import android.view.WindowInsets import com.android.systemui.keyguard.ui.viewmodel.AlternateBouncerDependencies -import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.SceneDataSourceDelegator import com.android.systemui.scene.ui.composable.Overlay +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.shade.TouchLogger import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer 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 ec6513a99cad..075599b9505f 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 @@ -44,11 +44,10 @@ import com.android.systemui.lifecycle.setSnapshotBinding import com.android.systemui.lifecycle.viewModel import com.android.systemui.res.R import com.android.systemui.scene.shared.flag.SceneContainerFlag -import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.SceneDataSourceDelegator -import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.scene.ui.composable.Overlay +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.scene.ui.composable.SceneContainer import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer @@ -187,8 +186,7 @@ object SceneWindowRootViewBinder { ) { SceneContainer( viewModel = viewModel, - sceneByKey = - sceneByKey.mapValues { (_, scene) -> scene as ComposableScene }, + sceneByKey = sceneByKey, overlayByKey = overlayByKey, initialSceneKey = containerConfig.initialSceneKey, dataSourceDelegator = dataSourceDelegator, diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt index 018144b8a704..fc8a59395b14 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewProviderModule.kt @@ -37,10 +37,10 @@ import com.android.systemui.keyguard.ui.viewmodel.AlternateBouncerDependencies import com.android.systemui.privacy.OngoingPrivacyChip import com.android.systemui.res.R import com.android.systemui.scene.shared.flag.SceneContainerFlag -import com.android.systemui.scene.shared.model.Scene import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.SceneDataSourceDelegator import com.android.systemui.scene.ui.composable.Overlay +import com.android.systemui.scene.ui.composable.Scene import com.android.systemui.scene.ui.view.SceneWindowRootView import com.android.systemui.scene.ui.view.WindowRootView import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel 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 dc45d939ac1b..b3664e107d72 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 @@ -2,7 +2,6 @@ package com.android.systemui.scene import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture -import com.android.systemui.scene.shared.model.FakeScene import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.shared.model.SceneContainerConfig import com.android.systemui.scene.shared.model.Scenes @@ -19,10 +18,6 @@ var Kosmos.sceneKeys by Fixture { ) } -val Kosmos.fakeScenes by Fixture { sceneKeys.map { key -> FakeScene(key) }.toSet() } - -val Kosmos.scenes by Fixture { fakeScenes } - val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen } var Kosmos.overlayKeys by Fixture { diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt deleted file mode 100644 index 78358f5a9187..000000000000 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2024 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.scene.shared.model - -import com.android.compose.animation.scene.SceneKey -import com.android.compose.animation.scene.UserAction -import com.android.compose.animation.scene.UserActionResult -import com.android.systemui.lifecycle.ExclusiveActivatable -import kotlinx.coroutines.awaitCancellation -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.flow.onCompletion -import kotlinx.coroutines.flow.onStart -import kotlinx.coroutines.flow.receiveAsFlow - -class FakeScene( - override val key: SceneKey, -) : ExclusiveActivatable(), Scene { - var isDestinationScenesBeingCollected = false - - private val destinationScenesChannel = Channel<Map<UserAction, UserActionResult>>() - - override val destinationScenes = - destinationScenesChannel - .receiveAsFlow() - .onStart { isDestinationScenesBeingCollected = true } - .onCompletion { isDestinationScenesBeingCollected = false } - - override suspend fun onActivated(): Nothing { - awaitCancellation() - } - - suspend fun setDestinationScenes(value: Map<UserAction, UserActionResult>) { - destinationScenesChannel.send(value) - } -} |