1 package com.android.systemui.scene.ui.composable
2
3 import androidx.compose.foundation.gestures.Orientation
4 import com.android.compose.animation.scene.transitions
5 import com.android.systemui.bouncer.ui.composable.Bouncer
6 import com.android.systemui.notifications.ui.composable.Notifications
7 import com.android.systemui.scene.shared.model.Scenes
8 import com.android.systemui.scene.shared.model.TransitionKeys.SlightlyFasterShadeCollapse
9 import com.android.systemui.scene.shared.model.TransitionKeys.ToSplitShade
10 import com.android.systemui.scene.ui.composable.transitions.bouncerToGoneTransition
11 import com.android.systemui.scene.ui.composable.transitions.goneToNotificationsShadeTransition
12 import com.android.systemui.scene.ui.composable.transitions.goneToQuickSettingsShadeTransition
13 import com.android.systemui.scene.ui.composable.transitions.goneToQuickSettingsTransition
14 import com.android.systemui.scene.ui.composable.transitions.goneToShadeTransition
15 import com.android.systemui.scene.ui.composable.transitions.goneToSplitShadeTransition
16 import com.android.systemui.scene.ui.composable.transitions.lockscreenToBouncerTransition
17 import com.android.systemui.scene.ui.composable.transitions.lockscreenToCommunalTransition
18 import com.android.systemui.scene.ui.composable.transitions.lockscreenToGoneTransition
19 import com.android.systemui.scene.ui.composable.transitions.lockscreenToNotificationsShadeTransition
20 import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsShadeTransition
21 import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsTransition
22 import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition
23 import com.android.systemui.scene.ui.composable.transitions.lockscreenToSplitShadeTransition
24 import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition
25 import com.android.systemui.shade.ui.composable.OverlayShade
26 import com.android.systemui.shade.ui.composable.Shade
27
28 /**
29 * Comprehensive definition of all transitions between scenes in [SceneContainer].
30 *
31 * Transitions are automatically reversible, so define only one transition per scene pair. By\
32 * convention, use the more common transition direction when defining the pair order, e.g.
33 * Lockscreen to Bouncer rather than Bouncer to Lockscreen.
34 *
35 * The actual transition DSL must be placed in a separate file under the package
36 * [com.android.systemui.scene.ui.composable.transitions].
37 *
38 * Please keep the list sorted alphabetically.
39 */
<lambda>null40 val SceneContainerTransitions = transitions {
41
42 // Scene transitions
43
44 from(Scenes.Bouncer, to = Scenes.Gone) { bouncerToGoneTransition() }
45 from(Scenes.Gone, to = Scenes.NotificationsShade) { goneToNotificationsShadeTransition() }
46 from(Scenes.Gone, to = Scenes.Shade) { goneToShadeTransition() }
47 from(
48 Scenes.Gone,
49 to = Scenes.Shade,
50 key = ToSplitShade,
51 ) {
52 goneToSplitShadeTransition()
53 }
54 from(
55 Scenes.Gone,
56 to = Scenes.Shade,
57 key = SlightlyFasterShadeCollapse,
58 ) {
59 goneToShadeTransition(durationScale = 0.9)
60 }
61 from(Scenes.Gone, to = Scenes.QuickSettings) { goneToQuickSettingsTransition() }
62 from(
63 Scenes.Gone,
64 to = Scenes.QuickSettings,
65 key = SlightlyFasterShadeCollapse,
66 ) {
67 goneToQuickSettingsTransition(durationScale = 0.9)
68 }
69 from(Scenes.Gone, to = Scenes.QuickSettingsShade) { goneToQuickSettingsShadeTransition() }
70 from(Scenes.Lockscreen, to = Scenes.Bouncer) { lockscreenToBouncerTransition() }
71 from(Scenes.Lockscreen, to = Scenes.Communal) { lockscreenToCommunalTransition() }
72 from(Scenes.Lockscreen, to = Scenes.NotificationsShade) {
73 lockscreenToNotificationsShadeTransition()
74 }
75 from(Scenes.Lockscreen, to = Scenes.QuickSettingsShade) {
76 lockscreenToQuickSettingsShadeTransition()
77 }
78 from(Scenes.Lockscreen, to = Scenes.Shade) { lockscreenToShadeTransition() }
79 from(
80 Scenes.Lockscreen,
81 to = Scenes.Shade,
82 key = ToSplitShade,
83 ) {
84 lockscreenToSplitShadeTransition()
85 }
86 from(
87 Scenes.Lockscreen,
88 to = Scenes.Shade,
89 key = SlightlyFasterShadeCollapse,
90 ) {
91 lockscreenToShadeTransition(durationScale = 0.9)
92 }
93 from(Scenes.Lockscreen, to = Scenes.QuickSettings) { lockscreenToQuickSettingsTransition() }
94 from(Scenes.Lockscreen, to = Scenes.Gone) { lockscreenToGoneTransition() }
95 from(Scenes.Shade, to = Scenes.QuickSettings) { shadeToQuickSettingsTransition() }
96
97 // Scene overscroll
98
99 overscroll(Scenes.Gone, Orientation.Vertical) {}
100 overscroll(Scenes.Bouncer, Orientation.Vertical) {
101 translate(Bouncer.Elements.Content, y = { absoluteDistance })
102 }
103 overscroll(Scenes.Shade, Orientation.Vertical) {
104 translate(
105 Notifications.Elements.NotificationScrim,
106 y = Shade.Dimensions.ScrimOverscrollLimit
107 )
108 translate(Shade.Elements.SplitShadeStartColumn, y = Shade.Dimensions.ScrimOverscrollLimit)
109 translate(
110 Notifications.Elements.NotificationStackPlaceholder,
111 y = Shade.Dimensions.ScrimOverscrollLimit,
112 )
113 }
114 overscroll(Scenes.NotificationsShade, Orientation.Vertical) {
115 translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
116 }
117 overscroll(Scenes.QuickSettingsShade, Orientation.Vertical) {
118 translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
119 }
120 }
121