Finish refactor of api/impl

dt/nav3-c
Don Turner 2 months ago
parent ba07375de1
commit 6ebf665c09

@ -16,19 +16,18 @@
package com.google.samples.apps.nowinandroid.navigation package com.google.samples.apps.nowinandroid.navigation
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation3.runtime.NavEntry import androidx.navigation3.runtime.NavEntry
import androidx.navigation3.runtime.entry
import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.entryProvider
import androidx.navigation3.ui.NavDisplay import androidx.navigation3.ui.NavDisplay
import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreenStateful import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute
import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.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.ForYouBaseRoute
import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection 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.interests.navigation.navigateToInterests
import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen
import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic
@ -51,9 +50,10 @@ fun NiaNavHost(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val navController = appState.navController val navController = appState.navController
val nav3Navigator = appState.nav3Navigator
NavDisplay( NavDisplay(
backStack = appState.nav3Navigator.backStack, backStack = nav3Navigator.backStack,
onBack = { appState.nav3Navigator.goBack() }, onBack = { nav3Navigator.goBack() },
entryProvider = entryProvider( entryProvider = entryProvider(
fallback = { key -> fallback = { key ->
println("$key not found, using fallback entry") println("$key not found, using fallback entry")
@ -72,9 +72,7 @@ fun NiaNavHost(
onTopicClick = navController::navigateToTopic, onTopicClick = navController::navigateToTopic,
) )
} }
composable<BookmarksRoute> { composable<BookmarksRoute> {}
Text("Legacy BookmarksRoute")
}
searchScreen( searchScreen(
onBackClick = navController::popBackStack, onBackClick = navController::popBackStack,
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
@ -85,12 +83,12 @@ fun NiaNavHost(
} }
}, },
) { ) {
entry<BookmarksRoute>{ bookmarksScreen(
BookmarksScreenStateful( onTopicClick = { it: String ->
{ it: String -> navController.navigateToInterests(it) }, nav3Navigator.goTo(route = InterestsRoute(it))
onShowSnackbar },
) onShowSnackbar = onShowSnackbar
} )
}, },
) )
} }

@ -20,7 +20,7 @@ import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.R
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons 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.ForYouBaseRoute
import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouRoute
import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute

@ -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.NetworkMonitor
import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor 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.core.ui.TrackDisposableJank
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.navigateToBookmarks
import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou 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.interests.navigation.navigateToInterests
import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch
@ -184,7 +183,7 @@ class NiaAppState(
when (topLevelDestination) { when (topLevelDestination) {
FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) FOR_YOU -> navController.navigateToForYou(topLevelNavOptions)
BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) BOOKMARKS -> nav3Navigator.goTo(route = BookmarksRoute, topLevelNavOptions)
INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions)
} }
} }

@ -16,6 +16,6 @@
package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation package com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation
import androidx.navigation3.runtime.NavKey
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable object BookmarksRoute

@ -25,6 +25,7 @@ android {
} }
dependencies { dependencies {
implementation(projects.feature.bookmarks.api)
implementation(projects.core.data) implementation(projects.core.data)
implementation(projects.core.navigation) implementation(projects.core.navigation)
testImplementation(projects.core.testing) testImplementation(projects.core.testing)

@ -16,23 +16,16 @@
package com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation package com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation
import androidx.navigation.NavController import androidx.navigation3.runtime.EntryProviderBuilder
import androidx.navigation.NavGraphBuilder import androidx.navigation3.runtime.entry
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.BookmarksScreenStateful 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 EntryProviderBuilder<Any>.bookmarksScreen(
fun NavController.navigateToBookmarks(navOptions: NavOptions) =
navigate(route = BookmarksRoute, navOptions)
fun NavGraphBuilder.bookmarksScreen(
onTopicClick: (String) -> Unit, onTopicClick: (String) -> Unit,
onShowSnackbar: suspend (String, String?) -> Boolean, onShowSnackbar: suspend (String, String?) -> Boolean,
) { ) {
composable<BookmarksRoute> { entry<BookmarksRoute> {
BookmarksScreenStateful(onTopicClick, onShowSnackbar) BookmarksScreenStateful(onTopicClick, onShowSnackbar)
} }
} }

Loading…
Cancel
Save