1 package com.android.systemui.scene.ui.composable.transitions 2 3 import androidx.compose.animation.core.tween 4 import androidx.compose.foundation.gestures.Orientation 5 import androidx.compose.ui.unit.IntSize 6 import com.android.compose.animation.scene.Edge 7 import com.android.compose.animation.scene.TransitionBuilder 8 import com.android.compose.animation.scene.UserActionDistance 9 import com.android.compose.animation.scene.UserActionDistanceScope 10 import com.android.systemui.notifications.ui.composable.Notifications 11 import com.android.systemui.qs.ui.composable.QuickSettings 12 import com.android.systemui.scene.shared.model.Scenes 13 import com.android.systemui.shade.ui.composable.ShadeHeader 14 import kotlin.time.Duration.Companion.milliseconds 15 TransitionBuildernull16fun TransitionBuilder.shadeToQuickSettingsTransition( 17 durationScale: Double = 1.0, 18 ) { 19 spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) 20 distance = 21 object : UserActionDistance { 22 override fun UserActionDistanceScope.absoluteDistance( 23 fromSceneSize: IntSize, 24 orientation: Orientation, 25 ): Float { 26 val distance = 27 Notifications.Elements.NotificationScrim.targetOffset(Scenes.Shade)?.y 28 ?: return 0f 29 return fromSceneSize.height - distance 30 } 31 } 32 33 translate(Notifications.Elements.NotificationScrim, Edge.Bottom) 34 timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) } 35 36 translate( 37 ShadeHeader.Elements.CollapsedContentStart, 38 y = ShadeHeader.Dimensions.CollapsedHeight 39 ) 40 translate(ShadeHeader.Elements.CollapsedContentEnd, y = ShadeHeader.Dimensions.CollapsedHeight) 41 translate( 42 ShadeHeader.Elements.ExpandedContent, 43 y = -(ShadeHeader.Dimensions.ExpandedHeight - ShadeHeader.Dimensions.CollapsedHeight) 44 ) 45 translate(ShadeHeader.Elements.ShadeCarrierGroup, y = -ShadeHeader.Dimensions.CollapsedHeight) 46 47 fractionRange(end = .14f) { 48 fade(ShadeHeader.Elements.CollapsedContentStart) 49 fade(ShadeHeader.Elements.CollapsedContentEnd) 50 } 51 52 fractionRange(start = .58f) { 53 fade(ShadeHeader.Elements.ExpandedContent) 54 fade(ShadeHeader.Elements.ShadeCarrierGroup) 55 } 56 } 57 58 private val DefaultDuration = 500.milliseconds 59