Skip to content

Commit 2f93566

Browse files
[feature] Add transition for ListDetailSceneStrategy.detailPane() page switching
Implement MaterialSharedAxis.X Bump dependencies
1 parent fe87672 commit 2f93566

19 files changed

Lines changed: 1189 additions & 147 deletions
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#This file is generated by updateDaemonJvm
2-
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/4945f00643ec68e7c7a6b66f90124f89/redirect
2+
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/402983f310a88ac68b3e883c7c91c760/redirect
33
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/e50b80b5a11d194a898bc3e6211b7c4b/redirect
4-
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/4945f00643ec68e7c7a6b66f90124f89/redirect
4+
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/402983f310a88ac68b3e883c7c91c760/redirect
55
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/e50b80b5a11d194a898bc3e6211b7c4b/redirect
6-
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/3426ffcaa54c3f62406beb1f1ab8b179/redirect
7-
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/f636c800fdb3f9ae33f019dfa048ba72/redirect
8-
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/4945f00643ec68e7c7a6b66f90124f89/redirect
6+
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/f257be9f04bfdf169051808541767806/redirect
7+
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/1dcbacacca32618bd21ec5465779ade1/redirect
8+
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/402983f310a88ac68b3e883c7c91c760/redirect
99
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/e50b80b5a11d194a898bc3e6211b7c4b/redirect
1010
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1e91f45234d88a64dafb961c93ddc75a/redirect
11-
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/0ef34dd9312b12d61ba1b8e66126d140/redirect
11+
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/5a88b04b5e582b332d2e6bc12b45f1b9/redirect
1212
toolchainVendor=ADOPTIUM
1313
toolchainVersion=21

gradle/wrapper/gradle-wrapper.jar

-504 Bytes
Binary file not shown.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
44
networkTimeout=10000
5+
retries=0
6+
retryBackOffMs=500
57
validateDistributionUrl=true
68
zipStoreBase=GRADLE_USER_HOME
79
zipStorePath=wrapper/dists

gradlew

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradlew.bat

Lines changed: 10 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

platform/android/app/proguard-rules.pro

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,6 @@ public static final ** CREATOR;
104104
# RSS parser
105105
-keep, allowoptimization, allowobfuscation, allowshrinking class com.skyd.podaura.model.repository.feed.rssparser.BaseXml
106106

107-
# Move all obfuscated classes into the root package to reduce APK size
108-
-repackageclasses
109-
110107
# Allow ProGuard to widen access modifiers
111108
-allowaccessmodification
112109

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.skyd.podaura.ext
2+
3+
import com.skyd.podaura.ui.component.navigation.ListDetailSceneStrategy
4+
5+
val ListDetailSceneStrategy<*>.isSinglePane: Boolean
6+
get() = directive.maxHorizontalPartitions == 1

shared/src/commonMain/kotlin/com/skyd/podaura/ui/component/Navigation.kt

Lines changed: 7 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,10 @@ package com.skyd.podaura.ui.component
22

33
import androidx.compose.animation.AnimatedContentTransitionScope
44
import 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
145
import androidx.compose.foundation.background
156
import 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
227
import androidx.compose.runtime.Composable
238
import androidx.compose.ui.Modifier
24-
import androidx.compose.ui.graphics.Path
25-
import androidx.compose.ui.unit.IntRect
269
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
2710
import androidx.navigation3.runtime.NavEntry
2811
import androidx.navigation3.runtime.NavEntryDecorator
@@ -32,6 +15,7 @@ import androidx.navigation3.scene.SceneStrategy
3215
import androidx.navigation3.scene.SinglePaneSceneStrategy
3316
import androidx.navigation3.ui.NavDisplay
3417
import androidx.navigationevent.NavigationEvent
18+
import com.skyd.podaura.ui.component.navigation.MaterialSharedAxis
3519
import com.skyd.podaura.ui.component.navigation.deeplink.TypeParser
3620
import kotlinx.io.Buffer
3721
import kotlinx.io.readByteArray
@@ -41,18 +25,16 @@ import kotlinx.serialization.json.encodeToJsonElement
4125
import kotlin.io.encoding.Base64
4226
import kotlin.uuid.Uuid
4327

44-
4528
@Serializable
4629
data 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
13463
fun <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

Comments
 (0)