Loading packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayout.kt +15 −2 Original line number Diff line number Diff line Loading @@ -130,10 +130,23 @@ interface SceneScope { sealed interface UserAction /** The user navigated back, either using a gesture or by triggering a KEYCODE_BACK event. */ object Back : UserAction data object Back : UserAction /** The user swiped on the container. */ enum class Swipe : UserAction { data class Swipe( val direction: SwipeDirection, val pointerCount: Int = 1, val fromEdge: Edge? = null, ) : UserAction { companion object { val Left = Swipe(SwipeDirection.Left) val Up = Swipe(SwipeDirection.Up) val Right = Swipe(SwipeDirection.Right) val Down = Swipe(SwipeDirection.Down) } } enum class SwipeDirection { Up, Down, Left, Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt +5 −2 Original line number Diff line number Diff line Loading @@ -36,13 +36,14 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isVisible import com.android.compose.animation.scene.SceneScope import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.qualifiers.KeyguardRootView import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel import com.android.systemui.scene.shared.model.UserAction Loading Loading @@ -99,7 +100,9 @@ constructor( return buildMap { up?.let { this[UserAction.Swipe(Direction.UP)] = SceneModel(up) } left?.let { this[UserAction.Swipe(Direction.LEFT)] = SceneModel(left) } this[UserAction.Swipe(Direction.DOWN)] = SceneModel(SceneKey.Shade) this[UserAction.Swipe(fromEdge = Edge.TOP, direction = Direction.DOWN)] = SceneModel(SceneKey.QuickSettings) this[UserAction.Swipe(direction = Direction.DOWN)] = SceneModel(SceneKey.Shade) } } } Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.systemui.dagger.SysUISingleton import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel import com.android.systemui.scene.shared.model.UserAction Loading @@ -41,7 +42,12 @@ class GoneScene @Inject constructor() : ComposableScene { override val destinationScenes: StateFlow<Map<UserAction, SceneModel>> = MutableStateFlow<Map<UserAction, SceneModel>>( mapOf( UserAction.Swipe(Direction.DOWN) to SceneModel(SceneKey.Shade), UserAction.Swipe( pointerCount = 2, fromEdge = Edge.TOP, direction = Direction.DOWN, ) to SceneModel(SceneKey.QuickSettings), UserAction.Swipe(direction = Direction.DOWN) to SceneModel(SceneKey.Shade), ) ) .asStateFlow() Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +21 −6 Original line number Diff line number Diff line Loading @@ -35,15 +35,18 @@ import androidx.compose.ui.input.pointer.PointerEventPass import androidx.compose.ui.input.pointer.motionEventSpy import androidx.compose.ui.input.pointer.pointerInput import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.Edge as SceneTransitionEdge import com.android.compose.animation.scene.ObservableTransitionState as SceneTransitionObservableTransitionState import com.android.compose.animation.scene.SceneKey as SceneTransitionSceneKey import com.android.compose.animation.scene.SceneTransitionLayout import com.android.compose.animation.scene.SceneTransitionLayoutState import com.android.compose.animation.scene.Swipe import com.android.compose.animation.scene.SwipeDirection import com.android.compose.animation.scene.UserAction as SceneTransitionUserAction import com.android.compose.animation.scene.observableTransitionState import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.ObservableTransitionState import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel Loading Loading @@ -181,12 +184,24 @@ private fun SceneTransitionSceneKey.toModel(): SceneModel { private fun UserAction.toTransitionUserAction(): SceneTransitionUserAction { return when (this) { is UserAction.Swipe -> Swipe( pointerCount = pointerCount, fromEdge = when (this.fromEdge) { null -> null Edge.LEFT -> SceneTransitionEdge.Left Edge.TOP -> SceneTransitionEdge.Top Edge.RIGHT -> SceneTransitionEdge.Right Edge.BOTTOM -> SceneTransitionEdge.Bottom }, direction = when (this.direction) { Direction.LEFT -> Swipe.Left Direction.UP -> Swipe.Up Direction.RIGHT -> Swipe.Right Direction.DOWN -> Swipe.Down Direction.LEFT -> SwipeDirection.Left Direction.UP -> SwipeDirection.Up Direction.RIGHT -> SwipeDirection.Right Direction.DOWN -> SwipeDirection.Down } ) is UserAction.Back -> Back } } Loading packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt +14 −1 Original line number Diff line number Diff line Loading @@ -61,12 +61,17 @@ sealed interface UserAction { data class Swipe( /** The direction of the swipe. */ val direction: Direction, /** * The edge from which the swipe originated or `null`, if the swipe didn't start close to an * edge. */ val fromEdge: Edge? = null, /** The number of pointers that were used (for example, one or two fingers). */ val pointerCount: Int = 1, ) : UserAction /** The user has hit the back button or performed the back navigation gesture. */ object Back : UserAction data object Back : UserAction } /** Enumerates all known "cardinal" directions for user actions. */ Loading @@ -76,3 +81,11 @@ enum class Direction { RIGHT, DOWN, } /** Enumerates all known edges from which a swipe can start. */ enum class Edge { LEFT, TOP, RIGHT, BOTTOM, } Loading
packages/SystemUI/compose/core/src/com/android/compose/animation/scene/SceneTransitionLayout.kt +15 −2 Original line number Diff line number Diff line Loading @@ -130,10 +130,23 @@ interface SceneScope { sealed interface UserAction /** The user navigated back, either using a gesture or by triggering a KEYCODE_BACK event. */ object Back : UserAction data object Back : UserAction /** The user swiped on the container. */ enum class Swipe : UserAction { data class Swipe( val direction: SwipeDirection, val pointerCount: Int = 1, val fromEdge: Edge? = null, ) : UserAction { companion object { val Left = Swipe(SwipeDirection.Left) val Up = Swipe(SwipeDirection.Up) val Right = Swipe(SwipeDirection.Right) val Down = Swipe(SwipeDirection.Down) } } enum class SwipeDirection { Up, Down, Left, Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/LockscreenScene.kt +5 −2 Original line number Diff line number Diff line Loading @@ -36,13 +36,14 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.isVisible import com.android.compose.animation.scene.SceneScope import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.qualifiers.KeyguardRootView import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel import com.android.systemui.scene.shared.model.UserAction Loading Loading @@ -99,7 +100,9 @@ constructor( return buildMap { up?.let { this[UserAction.Swipe(Direction.UP)] = SceneModel(up) } left?.let { this[UserAction.Swipe(Direction.LEFT)] = SceneModel(left) } this[UserAction.Swipe(Direction.DOWN)] = SceneModel(SceneKey.Shade) this[UserAction.Swipe(fromEdge = Edge.TOP, direction = Direction.DOWN)] = SceneModel(SceneKey.QuickSettings) this[UserAction.Swipe(direction = Direction.DOWN)] = SceneModel(SceneKey.Shade) } } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import androidx.compose.ui.Modifier import com.android.compose.animation.scene.SceneScope import com.android.systemui.dagger.SysUISingleton import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel import com.android.systemui.scene.shared.model.UserAction Loading @@ -41,7 +42,12 @@ class GoneScene @Inject constructor() : ComposableScene { override val destinationScenes: StateFlow<Map<UserAction, SceneModel>> = MutableStateFlow<Map<UserAction, SceneModel>>( mapOf( UserAction.Swipe(Direction.DOWN) to SceneModel(SceneKey.Shade), UserAction.Swipe( pointerCount = 2, fromEdge = Edge.TOP, direction = Direction.DOWN, ) to SceneModel(SceneKey.QuickSettings), UserAction.Swipe(direction = Direction.DOWN) to SceneModel(SceneKey.Shade), ) ) .asStateFlow() Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +21 −6 Original line number Diff line number Diff line Loading @@ -35,15 +35,18 @@ import androidx.compose.ui.input.pointer.PointerEventPass import androidx.compose.ui.input.pointer.motionEventSpy import androidx.compose.ui.input.pointer.pointerInput import com.android.compose.animation.scene.Back import com.android.compose.animation.scene.Edge as SceneTransitionEdge import com.android.compose.animation.scene.ObservableTransitionState as SceneTransitionObservableTransitionState import com.android.compose.animation.scene.SceneKey as SceneTransitionSceneKey import com.android.compose.animation.scene.SceneTransitionLayout import com.android.compose.animation.scene.SceneTransitionLayoutState import com.android.compose.animation.scene.Swipe import com.android.compose.animation.scene.SwipeDirection import com.android.compose.animation.scene.UserAction as SceneTransitionUserAction import com.android.compose.animation.scene.observableTransitionState import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon import com.android.systemui.scene.shared.model.Direction import com.android.systemui.scene.shared.model.Edge import com.android.systemui.scene.shared.model.ObservableTransitionState import com.android.systemui.scene.shared.model.SceneKey import com.android.systemui.scene.shared.model.SceneModel Loading Loading @@ -181,12 +184,24 @@ private fun SceneTransitionSceneKey.toModel(): SceneModel { private fun UserAction.toTransitionUserAction(): SceneTransitionUserAction { return when (this) { is UserAction.Swipe -> Swipe( pointerCount = pointerCount, fromEdge = when (this.fromEdge) { null -> null Edge.LEFT -> SceneTransitionEdge.Left Edge.TOP -> SceneTransitionEdge.Top Edge.RIGHT -> SceneTransitionEdge.Right Edge.BOTTOM -> SceneTransitionEdge.Bottom }, direction = when (this.direction) { Direction.LEFT -> Swipe.Left Direction.UP -> Swipe.Up Direction.RIGHT -> Swipe.Right Direction.DOWN -> Swipe.Down Direction.LEFT -> SwipeDirection.Left Direction.UP -> SwipeDirection.Up Direction.RIGHT -> SwipeDirection.Right Direction.DOWN -> SwipeDirection.Down } ) is UserAction.Back -> Back } } Loading
packages/SystemUI/src/com/android/systemui/scene/shared/model/Scene.kt +14 −1 Original line number Diff line number Diff line Loading @@ -61,12 +61,17 @@ sealed interface UserAction { data class Swipe( /** The direction of the swipe. */ val direction: Direction, /** * The edge from which the swipe originated or `null`, if the swipe didn't start close to an * edge. */ val fromEdge: Edge? = null, /** The number of pointers that were used (for example, one or two fingers). */ val pointerCount: Int = 1, ) : UserAction /** The user has hit the back button or performed the back navigation gesture. */ object Back : UserAction data object Back : UserAction } /** Enumerates all known "cardinal" directions for user actions. */ Loading @@ -76,3 +81,11 @@ enum class Direction { RIGHT, DOWN, } /** Enumerates all known edges from which a swipe can start. */ enum class Edge { LEFT, TOP, RIGHT, BOTTOM, }