# HG changeset patch # User Da Risk # Date 1745785735 14400 # Node ID 1adc328186a79d21ccf7ee2af3d6cbacad8d3980 # Parent 1e50097cdbde77c0035603f162afbc8d33684ab1 ui:material3: use typesafe navigation diff -r 1e50097cdbde -r 1adc328186a7 gradle/libs.versions.toml --- a/gradle/libs.versions.toml Sun Apr 27 16:24:34 2025 -0400 +++ b/gradle/libs.versions.toml Sun Apr 27 16:28:55 2025 -0400 @@ -34,7 +34,6 @@ androidx-compose-bom = "2025.04.01" androidx-lifecycle = "2.8.7" org-jetbrains-androidx-lifecycle = "2.9.0-alpha07" -org-jetbrains-androidx-core-uri = "1.1.0-alpha03" org-jetbrains-androidx-navigation = "2.9.0-alpha17" org-jetbrains-androidx-compose-material3-adaptive-navigation = "1.1.0-rc01" org-jetbrains-compose-material-icons-core = "1.7.3" @@ -81,8 +80,6 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } -org-jetbrains-androidx-core-uri = { module = "org.jetbrains.androidx.core:core-uri", version.ref = "org-jetbrains-androidx-core-uri" } - [plugins] com-android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" } diff -r 1e50097cdbde -r 1adc328186a7 ui/material3/build.gradle.kts --- a/ui/material3/build.gradle.kts Sun Apr 27 16:24:34 2025 -0400 +++ b/ui/material3/build.gradle.kts Sun Apr 27 16:28:55 2025 -0400 @@ -26,6 +26,7 @@ kotlin("multiplatform") alias(libs.plugins.org.jetbrains.kotlin.compose.compiler) alias(libs.plugins.org.jetbrains.compose.multiplatform) + alias(libs.plugins.org.jetbrains.kotlinx.serialization) id("com.geekorum.build.source-license-checker") `maven-publish` } @@ -62,9 +63,9 @@ implementation(compose.components.resources) implementation(compose.components.uiToolingPreview) implementation(libs.org.jetbrains.androidx.navigation.compose) - implementation(libs.org.jetbrains.androidx.core.uri) implementation(libs.org.jetbrains.androidx.compose.material3.adaptive.navigation) implementation(libs.org.jetbrains.compose.ui.backhandler) + implementation(libs.org.jetbrains.androidx.lifecycle.viewmodel.compose) } androidMain.dependencies { diff -r 1e50097cdbde -r 1adc328186a7 ui/material3/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material3/OpenSourceDependenciesNavHost.kt --- a/ui/material3/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material3/OpenSourceDependenciesNavHost.kt Sun Apr 27 16:24:34 2025 -0400 +++ b/ui/material3/src/commonMain/kotlin/com/geekorum/aboutoss/ui/material3/OpenSourceDependenciesNavHost.kt Sun Apr 27 16:28:55 2025 -0400 @@ -22,11 +22,20 @@ package com.geekorum.aboutoss.ui.material3 import androidx.compose.runtime.Composable -import androidx.core.uri.UriUtils import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import androidx.navigation.toRoute import com.geekorum.aboutoss.ui.common.OpenSourceLicensesViewModel +import kotlinx.serialization.Serializable + +@Serializable +private object DependenciesList + +@Serializable +private data class DependencyLicense( + val dependency: String +) @Composable fun OpenSourceDependenciesNavHost( @@ -34,18 +43,19 @@ navigateUp: () -> Unit ) { val navController = rememberNavController() - NavHost(navController, startDestination = "dependencies") { - composable("dependencies") { + NavHost(navController, startDestination = DependenciesList) { + composable { OpenSourceDependenciesListScreen( viewModel = openSourceLicensesViewModel, onDependencyClick = { - navController.navigate("dependency_license/${UriUtils.encode(it)}") + navController.navigate(DependencyLicense(it)) }, onUpClick = navigateUp ) } - composable("dependency_license/{dependency}") { - val dependency = requireNotNull(it.arguments?.getString("dependency")) + composable { + val route = it.toRoute() + val dependency = route.dependency OpenSourceLicenseScreen( viewModel = openSourceLicensesViewModel, dependency = dependency,