@@ -2,27 +2,10 @@ package com.skyd.podaura.ui.component
22
33import androidx.compose.animation.AnimatedContentTransitionScope
44import androidx.compose.animation.ContentTransform
5- import androidx.compose.animation.core.Easing
6- import androidx.compose.animation.core.FiniteAnimationSpec
7- import androidx.compose.animation.core.PathEasing
8- import androidx.compose.animation.core.tween
9- import androidx.compose.animation.fadeIn
10- import androidx.compose.animation.fadeOut
11- import androidx.compose.animation.scaleIn
12- import androidx.compose.animation.scaleOut
13- import androidx.compose.animation.togetherWith
145import androidx.compose.foundation.background
156import androidx.compose.material3.MaterialTheme
16- import androidx.compose.material3.adaptive.layout.AnimatedPane
17- import androidx.compose.material3.adaptive.layout.AnimatedPaneScope
18- import androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope
19- import androidx.compose.material3.adaptive.layout.PaneMotionDefaults
20- import androidx.compose.material3.adaptive.layout.PaneScaffoldRole
21- import androidx.compose.material3.adaptive.layout.PaneScaffoldValue
227import androidx.compose.runtime.Composable
238import androidx.compose.ui.Modifier
24- import androidx.compose.ui.graphics.Path
25- import androidx.compose.ui.unit.IntRect
269import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
2710import androidx.navigation3.runtime.NavEntry
2811import androidx.navigation3.runtime.NavEntryDecorator
@@ -32,6 +15,7 @@ import androidx.navigation3.scene.SceneStrategy
3215import androidx.navigation3.scene.SinglePaneSceneStrategy
3316import androidx.navigation3.ui.NavDisplay
3417import androidx.navigationevent.NavigationEvent
18+ import com.skyd.podaura.ui.component.navigation.MaterialSharedAxis
3519import com.skyd.podaura.ui.component.navigation.deeplink.TypeParser
3620import kotlinx.io.Buffer
3721import kotlinx.io.readByteArray
@@ -41,18 +25,16 @@ import kotlinx.serialization.json.encodeToJsonElement
4125import kotlin.io.encoding.Base64
4226import kotlin.uuid.Uuid
4327
44-
4528@Serializable
4629data class UuidList (val uuids : List <String >) {
4730 companion object {
4831 fun encodeUuidList (uuidList : List <Uuid >): String {
4932 val buffer = Buffer ()
5033 for (u in uuidList) {
51- val (mostSignificantBits, leastSignificantBits) = u.toLongs { most, least ->
52- most to least
34+ u.toLongs { most, least ->
35+ buffer.writeLong(most)
36+ buffer.writeLong(least)
5337 }
54- buffer.writeLong(mostSignificantBits)
55- buffer.writeLong(leastSignificantBits)
5638 }
5739 return Base64 .UrlSafe .encode(buffer.readByteArray())
5840 }
@@ -77,59 +59,6 @@ fun uuidListType(): TypeParser {
7759 }
7860}
7961
80- private val MotionEmphasizedEasing = PathEasing (
81- Path ().apply {
82- moveTo(0f , 0f )
83- cubicTo(0.05f , 0f , 0.133333f , 0.06f , 0.166666f , 0.4f )
84- cubicTo(0.208333f , 0.82f , 0.25f , 1f , 1f , 1f )
85- }
86- )
87-
88- private const val DefaultDuration : Int = 450
89- private const val ProgressThreshold : Float = 0.35f
90-
91- private val FadeInEasing = Easing { fraction ->
92- ((MotionEmphasizedEasing .transform(fraction) - ProgressThreshold ) / (1f - ProgressThreshold ))
93- .coerceIn(0f , 1f )
94- }
95-
96- private val FadeOutEasing = Easing { fraction ->
97- (MotionEmphasizedEasing .transform(fraction) / ProgressThreshold )
98- .coerceIn(0f , 1f )
99- }
100-
101- val EnterTransition =
102- scaleIn(
103- initialScale = 0.8f ,
104- animationSpec = tween(durationMillis = DefaultDuration , easing = MotionEmphasizedEasing )
105- ) + fadeIn(
106- animationSpec = tween(durationMillis = DefaultDuration , easing = FadeInEasing )
107- )
108-
109- val ExitTransition =
110- scaleOut(
111- targetScale = 1.1f ,
112- animationSpec = tween(durationMillis = DefaultDuration , easing = MotionEmphasizedEasing )
113- ) + fadeOut(
114- animationSpec = tween(durationMillis = DefaultDuration , easing = FadeOutEasing )
115- )
116-
117- val PopEnterTransition =
118- scaleIn(
119- initialScale = 1.1f ,
120- animationSpec = tween(durationMillis = DefaultDuration , easing = MotionEmphasizedEasing )
121- ) + fadeIn(
122- animationSpec = tween(durationMillis = DefaultDuration , easing = FadeInEasing )
123- )
124-
125- val PopExitTransition =
126- scaleOut(
127- targetScale = 0.8f ,
128- animationSpec = tween(durationMillis = DefaultDuration , easing = MotionEmphasizedEasing )
129- ) + fadeOut(
130- animationSpec = tween(durationMillis = DefaultDuration , easing = FadeOutEasing )
131- )
132-
13362@Composable
13463fun <T : Any > PodAuraNavDisplay (
13564 backStack : List <T >,
@@ -145,15 +74,15 @@ fun <T : Any> PodAuraNavDisplay(
14574 ),
14675 sceneStrategies : List <SceneStrategy <T >> = listOf(SinglePaneSceneStrategy ()),
14776 transitionSpec : AnimatedContentTransitionScope <Scene <T >>.() -> ContentTransform = {
148- EnterTransition togetherWith ExitTransition
77+ MaterialSharedAxis . Z . TransitionSpec
14978 },
15079 popTransitionSpec : AnimatedContentTransitionScope <Scene <T >>.() -> ContentTransform = {
151- PopEnterTransition togetherWith PopExitTransition
80+ MaterialSharedAxis . Z . PopTransitionSpec
15281 },
15382 predictivePopTransitionSpec : AnimatedContentTransitionScope <Scene <T >>.(
15483 @NavigationEvent .SwipeEdge Int
15584 ) -> ContentTransform = {
156- PopEnterTransition togetherWith PopExitTransition
85+ MaterialSharedAxis . Z . PopTransitionSpec
15786 },
15887 entryProvider : (key: T ) -> NavEntry <T >,
15988) = NavDisplay (
@@ -167,16 +96,3 @@ fun <T : Any> PodAuraNavDisplay(
16796 predictivePopTransitionSpec = predictivePopTransitionSpec,
16897 entryProvider = entryProvider,
16998)
170-
171- @Composable
172- fun <S : PaneScaffoldRole , T : PaneScaffoldValue <S >> ExtendedPaneScaffoldPaneScope <S , T >.PodAuraAnimatedPane (
173- modifier : Modifier = Modifier ,
174- boundsAnimationSpec : FiniteAnimationSpec <IntRect > = PaneMotionDefaults .AnimationSpec ,
175- content : (@Composable AnimatedPaneScope .() -> Unit ),
176- ) = AnimatedPane (
177- modifier = modifier,
178- enterTransition = EnterTransition ,
179- exitTransition = ExitTransition ,
180- boundsAnimationSpec = boundsAnimationSpec,
181- content = content,
182- )
0 commit comments