Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt +6 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import com.android.systemui.scene.ui.composable.transitions.lockscreenToGoneTran import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsTransition import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition import com.android.systemui.shade.ui.composable.Shade /** * Comprehensive definition of all transitions between scenes in [SceneContainer]. Loading Loading @@ -73,10 +74,14 @@ val SceneContainerTransitions = transitions { // Scene overscroll overscroll(Scenes.Gone, Orientation.Vertical) {} overscroll(Scenes.Bouncer, Orientation.Vertical) { translate(Bouncer.Elements.Content, y = { absoluteDistance }) } overscroll(Scenes.Shade, Orientation.Vertical) { translate(Notifications.Elements.NotificationScrim, y = { absoluteDistance }) translate( Notifications.Elements.NotificationScrim, y = { Shade.Dimensions.ScrimOverscrollLimit } ) } } packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt +17 −0 Original line number Diff line number Diff line package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween import androidx.compose.foundation.gestures.Orientation import androidx.compose.ui.unit.IntSize import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder import com.android.compose.animation.scene.UserActionDistance import com.android.compose.animation.scene.UserActionDistanceScope import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds Loading @@ -12,6 +17,18 @@ fun TransitionBuilder.shadeToQuickSettingsTransition( durationScale: Double = 1.0, ) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) distance = object : UserActionDistance { override fun UserActionDistanceScope.absoluteDistance( fromSceneSize: IntSize, orientation: Orientation, ): Float { val distance = Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y ?: return 0f return fromSceneSize.height - distance } } translate(Notifications.Elements.NotificationScrim, Edge.Bottom) timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) } Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt +22 −0 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.Spring import androidx.compose.animation.core.spring import androidx.compose.animation.core.tween import androidx.compose.foundation.gestures.Orientation import androidx.compose.ui.unit.IntSize import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder import com.android.compose.animation.scene.UserActionDistance import com.android.compose.animation.scene.UserActionDistanceScope import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.Shade import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds Loading @@ -28,6 +36,20 @@ fun TransitionBuilder.toShadeTransition( durationScale: Double = 1.0, ) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) swipeSpec = spring( stiffness = Spring.StiffnessMediumLow, visibilityThreshold = Shade.Dimensions.ScrimVisibilityThreshold, ) distance = object : UserActionDistance { override fun UserActionDistanceScope.absoluteDistance( fromSceneSize: IntSize, orientation: Orientation, ): Float { return Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y ?: 0f } } fractionRange(start = .58f) { fade(ShadeHeader.Elements.Clock) Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +8 −5 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ object Shade { object Dimensions { val ScrimCornerSize = 32.dp val HorizontalPadding = 16.dp const val ScrimOverscrollLimit = 100f const val ScrimVisibilityThreshold = 5f } object Shapes { Loading Loading @@ -195,7 +197,11 @@ private fun SceneScope.SingleShade( ) { val maxNotifScrimTop = remember { mutableStateOf(0f) } val tileSquishiness by animateSceneFloatAsState(value = 1f, key = QuickSettings.SharedValues.TilesSquishiness) animateSceneFloatAsState( value = 1f, key = QuickSettings.SharedValues.TilesSquishiness, canOverflow = false ) val isClickable by viewModel.isClickable.collectAsState() // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this scene Loading Loading @@ -231,10 +237,7 @@ private fun SceneScope.SingleShade( Box(Modifier.element(QuickSettings.Elements.QuickQuickSettings)) { QuickSettings( viewModel.qsSceneAdapter, { (viewModel.qsSceneAdapter.qqsHeight * tileSquishiness) .roundToInt() }, { viewModel.qsSceneAdapter.qqsHeight }, isSplitShade = false, squishiness = tileSquishiness, ) Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ constructor( launch { viewModel.stackBottom.collect { view.setStackBottom(it) } } launch { viewModel.scrolledToTop.collect { view.setScrolledToTop(it) } } launch { viewModel.headsUpTop.collect { view.setHeadsUpTop(it) } } launch { viewModel.expandFraction.collect { view.setExpandFraction(it) } } launch { viewModel.expandFraction.collect { view.setExpandFraction(it.coerceIn(0f, 1f)) } } launch { viewModel.isScrollable.collect { view.setScrollingEnabled(it) } } launch { viewModel.isDozing.collect { isDozing -> view.setDozing(isDozing) } } Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt +6 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import com.android.systemui.scene.ui.composable.transitions.lockscreenToGoneTran import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsTransition import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition import com.android.systemui.shade.ui.composable.Shade /** * Comprehensive definition of all transitions between scenes in [SceneContainer]. Loading Loading @@ -73,10 +74,14 @@ val SceneContainerTransitions = transitions { // Scene overscroll overscroll(Scenes.Gone, Orientation.Vertical) {} overscroll(Scenes.Bouncer, Orientation.Vertical) { translate(Bouncer.Elements.Content, y = { absoluteDistance }) } overscroll(Scenes.Shade, Orientation.Vertical) { translate(Notifications.Elements.NotificationScrim, y = { absoluteDistance }) translate( Notifications.Elements.NotificationScrim, y = { Shade.Dimensions.ScrimOverscrollLimit } ) } }
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt +17 −0 Original line number Diff line number Diff line package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween import androidx.compose.foundation.gestures.Orientation import androidx.compose.ui.unit.IntSize import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder import com.android.compose.animation.scene.UserActionDistance import com.android.compose.animation.scene.UserActionDistanceScope import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds Loading @@ -12,6 +17,18 @@ fun TransitionBuilder.shadeToQuickSettingsTransition( durationScale: Double = 1.0, ) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) distance = object : UserActionDistance { override fun UserActionDistanceScope.absoluteDistance( fromSceneSize: IntSize, orientation: Orientation, ): Float { val distance = Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y ?: return 0f return fromSceneSize.height - distance } } translate(Notifications.Elements.NotificationScrim, Edge.Bottom) timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) } Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt +22 −0 Original line number Diff line number Diff line Loading @@ -16,11 +16,19 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.Spring import androidx.compose.animation.core.spring import androidx.compose.animation.core.tween import androidx.compose.foundation.gestures.Orientation import androidx.compose.ui.unit.IntSize import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder import com.android.compose.animation.scene.UserActionDistance import com.android.compose.animation.scene.UserActionDistanceScope import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.Shade import com.android.systemui.shade.ui.composable.ShadeHeader import kotlin.time.Duration.Companion.milliseconds Loading @@ -28,6 +36,20 @@ fun TransitionBuilder.toShadeTransition( durationScale: Double = 1.0, ) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) swipeSpec = spring( stiffness = Spring.StiffnessMediumLow, visibilityThreshold = Shade.Dimensions.ScrimVisibilityThreshold, ) distance = object : UserActionDistance { override fun UserActionDistanceScope.absoluteDistance( fromSceneSize: IntSize, orientation: Orientation, ): Float { return Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y ?: 0f } } fractionRange(start = .58f) { fade(ShadeHeader.Elements.Clock) Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +8 −5 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ object Shade { object Dimensions { val ScrimCornerSize = 32.dp val HorizontalPadding = 16.dp const val ScrimOverscrollLimit = 100f const val ScrimVisibilityThreshold = 5f } object Shapes { Loading Loading @@ -195,7 +197,11 @@ private fun SceneScope.SingleShade( ) { val maxNotifScrimTop = remember { mutableStateOf(0f) } val tileSquishiness by animateSceneFloatAsState(value = 1f, key = QuickSettings.SharedValues.TilesSquishiness) animateSceneFloatAsState( value = 1f, key = QuickSettings.SharedValues.TilesSquishiness, canOverflow = false ) val isClickable by viewModel.isClickable.collectAsState() // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this scene Loading Loading @@ -231,10 +237,7 @@ private fun SceneScope.SingleShade( Box(Modifier.element(QuickSettings.Elements.QuickQuickSettings)) { QuickSettings( viewModel.qsSceneAdapter, { (viewModel.qsSceneAdapter.qqsHeight * tileSquishiness) .roundToInt() }, { viewModel.qsSceneAdapter.qqsHeight }, isSplitShade = false, squishiness = tileSquishiness, ) Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ constructor( launch { viewModel.stackBottom.collect { view.setStackBottom(it) } } launch { viewModel.scrolledToTop.collect { view.setScrolledToTop(it) } } launch { viewModel.headsUpTop.collect { view.setHeadsUpTop(it) } } launch { viewModel.expandFraction.collect { view.setExpandFraction(it) } } launch { viewModel.expandFraction.collect { view.setExpandFraction(it.coerceIn(0f, 1f)) } } launch { viewModel.isScrollable.collect { view.setScrollingEnabled(it) } } launch { viewModel.isDozing.collect { isDozing -> view.setDozing(isDozing) } } Loading