Skip to content

Commit c144df9

Browse files
authored
Copy Navigation3 1.1.0-alpha01 (#2622)
| GroupId | ReleaseVersion | ReleaseSHA | ReleaseBuildId | ReleaseDate | | --- | --- | --- | --- | --- | | androidx.navigation3 | 1.1.0-alpha01 | deb9649 | 14504571 | 12/3/2025 | Fixes [CMP-9378](https://youtrack.jetbrains.com/issue/CMP-9378) ## Testing N/A ## Release Notes N/A
2 parents 6b456b6 + f920604 commit c144df9

File tree

19 files changed

+596
-205
lines changed

19 files changed

+596
-205
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ artifactRedirection.version.androidx.annotation=1.9.1
115115
artifactRedirection.version.androidx.graphics=1.1.0-alpha01
116116
artifactRedirection.version.androidx.lifecycle=2.10.0
117117
artifactRedirection.version.androidx.navigation=2.9.1
118-
artifactRedirection.version.androidx.navigation3=1.0.0-rc01
118+
artifactRedirection.version.androidx.navigation3=1.1.0-alpha01
119119
artifactRedirection.version.androidx.navigationevent=1.0.0-rc01
120120
artifactRedirection.version.androidx.performance=1.0.0-alpha01
121121
artifactRedirection.version.androidx.savedstate=1.4.0

libraryversions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ MEDIA = "1.7.0-rc01"
9696
MEDIAROUTER = "1.8.0-alpha01"
9797
METRICS = "1.0.0-beta02"
9898
NAVIGATION = "2.9.1"
99-
NAVIGATION3 = "1.0.0-rc01"
99+
NAVIGATION3 = "1.1.0-alpha01"
100100
NAVIGATIONEVENT = "1.0.0-rc01"
101101
PAGING = "3.4.0-alpha01"
102102
PALETTE = "1.1.0-alpha01"

navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigation3/runtime/samples/NavBackStackSamples.kt

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,60 @@ import androidx.compose.runtime.Composable
2121
import androidx.compose.runtime.saveable.rememberSerializable
2222
import androidx.navigation3.runtime.NavBackStack
2323
import androidx.navigation3.runtime.NavKey
24-
import androidx.navigation3.runtime.samples.NavBackStackSamples.MultiBackStack
24+
import androidx.navigation3.runtime.samples.NavBackStackSamples.Chat
25+
import androidx.navigation3.runtime.samples.NavBackStackSamples.Home
26+
import androidx.navigation3.runtime.samples.NavBackStackSamples.SealedKey
27+
import androidx.navigation3.runtime.samples.NavBackStackSamples.Spaces
28+
import androidx.savedstate.serialization.SavedStateConfiguration
2529
import kotlinx.serialization.Serializable
30+
import kotlinx.serialization.modules.SerializersModule
31+
import kotlinx.serialization.modules.polymorphic
32+
import kotlinx.serialization.modules.subclass
2633
import kotlinx.serialization.serializer
2734

2835
object NavBackStackSamples {
2936

37+
// --- Open Polymorphism ---
3038
@Serializable open class Home : NavKey
3139

3240
@Serializable open class Chat : NavKey
3341

3442
@Serializable open class Spaces : NavKey
3543

44+
// --- Closed Polymorphism ---
3645
@Serializable
37-
class MultiBackStack(
38-
val homeTabStack: NavBackStack<Home>,
39-
val chatTabStack: NavBackStack<Chat>,
40-
val spacesTabStack: NavBackStack<Spaces>,
41-
)
46+
sealed class SealedKey : NavKey {
47+
48+
@Serializable class Inbox : SealedKey()
49+
50+
@Serializable class Settings : SealedKey()
51+
}
52+
}
53+
54+
@Composable
55+
@Sampled
56+
fun NavBackStack_OpenPolymorphism() {
57+
// https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#open-polymorphism
58+
rememberSerializable(
59+
serializer = serializer(),
60+
configuration =
61+
SavedStateConfiguration {
62+
serializersModule = SerializersModule {
63+
polymorphic(baseClass = NavKey::class) {
64+
subclass(clazz = Home::class)
65+
subclass(clazz = Chat::class)
66+
subclass(clazz = Spaces::class)
67+
}
68+
}
69+
},
70+
) {
71+
NavBackStack<NavKey>()
72+
}
4273
}
4374

4475
@Composable
4576
@Sampled
46-
fun NavBackStack_Serializer() {
47-
val multiBackStack =
48-
rememberSerializable(serializer = serializer()) {
49-
MultiBackStack(
50-
homeTabStack = NavBackStack(),
51-
chatTabStack = NavBackStack(),
52-
spacesTabStack = NavBackStack(),
53-
)
54-
}
77+
fun NavBackStack_ClosedPolymorphism() {
78+
// https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#closed-polymorphism
79+
rememberSerializable(serializer = serializer()) { NavBackStack<SealedKey>() }
5580
}

navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigation3/runtime/samples/NavBackStackSerializerSamples.kt

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ import androidx.annotation.Sampled
2020
import androidx.compose.runtime.Composable
2121
import androidx.navigation3.runtime.NavBackStack
2222
import androidx.navigation3.runtime.NavKey
23-
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Details
24-
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Home
25-
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Screen
23+
import androidx.navigation3.runtime.samples.NavBackStackSerializerSamples.Details
24+
import androidx.navigation3.runtime.samples.NavBackStackSerializerSamples.Home
2625
import androidx.navigation3.runtime.serialization.NavBackStackSerializer
2726
import androidx.savedstate.serialization.SavedStateConfiguration
2827
import androidx.savedstate.serialization.decodeFromSavedState
@@ -32,21 +31,19 @@ import kotlinx.serialization.modules.SerializersModule
3231
import kotlinx.serialization.modules.polymorphic
3332
import kotlinx.serialization.modules.subclass
3433

35-
object NavBackStackSerializerSamples {
34+
private object NavBackStackSerializerSamples {
3635

37-
@Serializable open class Screen : NavKey
36+
@Serializable open class Home(val id: String) : NavKey
3837

39-
@Serializable open class Home(val id: String) : Screen()
40-
41-
@Serializable open class Details(val itemId: Long) : Screen()
38+
@Serializable open class Details(val itemId: Long) : NavKey
4239
}
4340

4441
@Composable
4542
@Sampled
4643
fun NavBackStackSerializer_withReflection() {
4744
// On Android, the no-argument overload uses reflection and requires no configuration.
4845
// This will throw a runtime exception on non-Android platforms during serialization.
49-
val serializer = NavBackStackSerializer<Screen>()
46+
val serializer = NavBackStackSerializer<NavKey>()
5047

5148
val backStack = NavBackStack(Home("abc"), Details(42))
5249
val encoded = encodeToSavedState(serializer, backStack)
@@ -57,14 +54,14 @@ fun NavBackStackSerializer_withReflection() {
5754
@Sampled
5855
fun NavBackStackSerializer_withSerializersModule() {
5956
val module = SerializersModule {
60-
polymorphic(Screen::class) {
57+
polymorphic(NavKey::class) {
6158
subclass(Home.serializer())
6259
subclass(Details.serializer())
6360
}
6461
}
6562
val configuration = SavedStateConfiguration { serializersModule = module }
6663

67-
val serializer = NavBackStackSerializer<Screen>()
64+
val serializer = NavBackStackSerializer<NavKey>()
6865

6966
// Pass the same configuration (or at least its serializersModule) to encode/decode:
7067
val backStack = NavBackStack(Home("abc"), Details(42))

navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigation3/runtime/samples/RememberNavBackStackSamples.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,17 @@ import androidx.navigation3.runtime.NavKey
2222
import androidx.navigation3.runtime.rememberNavBackStack
2323
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Details
2424
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Home
25-
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Screen
2625
import androidx.savedstate.serialization.SavedStateConfiguration
2726
import kotlinx.serialization.Serializable
2827
import kotlinx.serialization.modules.SerializersModule
2928
import kotlinx.serialization.modules.polymorphic
3029
import kotlinx.serialization.modules.subclass
3130

32-
object RememberNavBackStackSamples {
31+
private object RememberNavBackStackSamples {
3332

34-
@Serializable open class Screen : NavKey
33+
@Serializable open class Home(val id: String) : NavKey
3534

36-
@Serializable open class Home(val id: String) : Screen()
37-
38-
@Serializable open class Details(val itemId: Long) : Screen()
35+
@Serializable open class Details(val itemId: Long) : NavKey
3936
}
4037

4138
@Composable
@@ -51,7 +48,7 @@ fun rememberNavBackStack_withSerializersModule() {
5148
val config = SavedStateConfiguration {
5249
// Register subtypes for open polymorphism or multiplatform use.
5350
serializersModule = SerializersModule {
54-
polymorphic(baseClass = Screen::class) {
51+
polymorphic(baseClass = NavKey::class) {
5552
subclass(serializer = Home.serializer())
5653
subclass(serializer = Details.serializer())
5754
}

navigation3/navigation3-runtime/src/commonMain/kotlin/androidx/navigation3/runtime/NavBackStack.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ import kotlinx.serialization.Serializable
4141
* backStack.removeLast() // pops stack
4242
* ```
4343
*
44-
* @sample androidx.navigation3.runtime.samples.NavBackStack_Serializer
44+
* @sample androidx.navigation3.runtime.samples.NavBackStack_OpenPolymorphism
45+
* @sample androidx.navigation3.runtime.samples.NavBackStack_ClosedPolymorphism
4546
* @constructor Creates a new back stack backed by the provided [SnapshotStateList].
4647
* @see rememberNavBackStack for lifecycle-aware persistence.
4748
*/

0 commit comments

Comments
 (0)