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