From 6ebf665c0917f10344dd59f6afb3a6fce1c6aa67 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Wed, 9 Jul 2025 11:14:44 +0100 Subject: [PATCH] Finish refactor of api/impl --- .../nowinandroid/navigation/NiaNavHost.kt | 28 +++++++++---------- .../navigation/TopLevelDestination.kt | 2 +- .../apps/nowinandroid/ui/NiaAppState.kt | 5 ++-- .../api/navigation}/BookmarksRoutes.kt | 2 +- feature/bookmarks/impl/build.gradle.kts | 1 + .../impl/navigation/BookmarksNavigation.kt | 17 ++++------- 6 files changed, 23 insertions(+), 32 deletions(-) rename feature/bookmarks/api/src/main/kotlin/{ => com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation}/BookmarksRoutes.kt (94%) diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index c0039793b..88b2498ac 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -16,19 +16,18 @@ package com.google.samples.apps.nowinandroid.navigation -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation3.runtime.NavEntry -import androidx.navigation3.runtime.entry import androidx.navigation3.runtime.entryProvider import androidx.navigation3.ui.NavDisplay -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreenStateful -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.bookmarksScreen import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic @@ -51,9 +50,10 @@ fun NiaNavHost( modifier: Modifier = Modifier, ) { val navController = appState.navController + val nav3Navigator = appState.nav3Navigator NavDisplay( - backStack = appState.nav3Navigator.backStack, - onBack = { appState.nav3Navigator.goBack() }, + backStack = nav3Navigator.backStack, + onBack = { nav3Navigator.goBack() }, entryProvider = entryProvider( fallback = { key -> println("$key not found, using fallback entry") @@ -72,9 +72,7 @@ fun NiaNavHost( onTopicClick = navController::navigateToTopic, ) } - composable { - Text("Legacy BookmarksRoute") - } + composable {} searchScreen( onBackClick = navController::popBackStack, onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, @@ -85,12 +83,12 @@ fun NiaNavHost( } }, ) { - entry{ - BookmarksScreenStateful( - { it: String -> navController.navigateToInterests(it) }, - onShowSnackbar - ) - } + bookmarksScreen( + onTopicClick = { it: String -> + nav3Navigator.goTo(route = InterestsRoute(it)) + }, + onShowSnackbar = onShowSnackbar + ) }, ) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 2f53b2c76..7404a8976 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -20,7 +20,7 @@ import androidx.annotation.StringRes import androidx.compose.ui.graphics.vector.ImageVector import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 6b91285b5..aecf93925 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -37,8 +37,7 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourc import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.BookmarksRoute -import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.navigateToBookmarks +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch @@ -184,7 +183,7 @@ class NiaAppState( when (topLevelDestination) { FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) - BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) + BOOKMARKS -> nav3Navigator.goTo(route = BookmarksRoute, topLevelNavOptions) INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) } } diff --git a/feature/bookmarks/api/src/main/kotlin/BookmarksRoutes.kt b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoutes.kt similarity index 94% rename from feature/bookmarks/api/src/main/kotlin/BookmarksRoutes.kt rename to feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoutes.kt index 2c13b3a61..7196c8d29 100644 --- a/feature/bookmarks/api/src/main/kotlin/BookmarksRoutes.kt +++ b/feature/bookmarks/api/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/api/navigation/BookmarksRoutes.kt @@ -16,6 +16,6 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation -import androidx.navigation3.runtime.NavKey import kotlinx.serialization.Serializable +@Serializable object BookmarksRoute \ No newline at end of file diff --git a/feature/bookmarks/impl/build.gradle.kts b/feature/bookmarks/impl/build.gradle.kts index e1bff4470..95b81c3be 100644 --- a/feature/bookmarks/impl/build.gradle.kts +++ b/feature/bookmarks/impl/build.gradle.kts @@ -25,6 +25,7 @@ android { } dependencies { + implementation(projects.feature.bookmarks.api) implementation(projects.core.data) implementation(projects.core.navigation) testImplementation(projects.core.testing) diff --git a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksNavigation.kt b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksNavigation.kt index 141b03704..49fd66a87 100644 --- a/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/navigation/BookmarksNavigation.kt @@ -16,23 +16,16 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions -import androidx.navigation.compose.composable +import androidx.navigation3.runtime.EntryProviderBuilder +import androidx.navigation3.runtime.entry import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreenStateful -import kotlinx.serialization.Serializable +import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute -@Serializable object BookmarksRoute - -fun NavController.navigateToBookmarks(navOptions: NavOptions) = - navigate(route = BookmarksRoute, navOptions) - -fun NavGraphBuilder.bookmarksScreen( +fun EntryProviderBuilder.bookmarksScreen( onTopicClick: (String) -> Unit, onShowSnackbar: suspend (String, String?) -> Boolean, ) { - composable { + entry { BookmarksScreenStateful(onTopicClick, onShowSnackbar) } }