Migrate interests feature

dt/nav3-c
Don Turner 2 months ago
parent ae8c462780
commit e196be9ad0

@ -73,7 +73,7 @@ fun NiaNavHost(
} }
composable<BookmarksRoute> {} composable<BookmarksRoute> {}
composable<SearchRoute> {} composable<SearchRoute> {}
interestsListDetailScreen() composable<InterestsRoute>{}
} }
} }
}, },
@ -96,6 +96,7 @@ fun NiaNavHost(
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
onTopicClick = navController::navigateToInterests, onTopicClick = navController::navigateToInterests,
) )
interestsListDetailScreen()
}, },
) )
} }

@ -39,6 +39,7 @@ 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.api.navigation.BookmarksRoute 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.foryou.navigation.navigateToForYou
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.SearchRoute import com.google.samples.apps.nowinandroid.feature.search.navigation.SearchRoute
import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch
@ -47,6 +48,7 @@ import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS
import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetailScreen
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -217,7 +219,8 @@ class Nav3NavigatorSimple(val navController: NavHostController){
private val migratedRoutes = listOf( private val migratedRoutes = listOf(
BookmarksRoute::class, BookmarksRoute::class,
TopicRoute::class, TopicRoute::class,
SearchRoute::class SearchRoute::class,
InterestsRoute::class,
).associateBy { it.qualifiedName } ).associateBy { it.qualifiedName }
// TODO: We are using Dispatchers.Main so that we can access SavedStateHandle in toRoute, // TODO: We are using Dispatchers.Main so that we can access SavedStateHandle in toRoute,
@ -235,18 +238,16 @@ class Nav3NavigatorSimple(val navController: NavHostController){
if (backStack.isNotEmpty()){ if (backStack.isNotEmpty()){
clear() clear()
val entriesToAdd = nav2BackStack.mapNotNull { entry -> val entriesToAdd = nav2BackStack.mapNotNull { entry ->
val className = entry.destination.route?.substringBefore('/')
println("Evaluating: $className")
// Ignore nav graph root entries // Ignore nav graph root entries
if (entry.destination::class.qualifiedName == "androidx.navigation.compose.ComposeNavGraphNavigator.ComposeNavGraph"){ if (entry.destination::class.qualifiedName == "androidx.navigation.compose.ComposeNavGraphNavigator.ComposeNavGraph"){
null null
} else { } else {
when (className) { with(entry.destination) {
BookmarksRoute::class.qualifiedName -> entry.toRoute<BookmarksRoute>() if (hasRoute<BookmarksRoute>()) { entry.toRoute<BookmarksRoute>() }
TopicRoute::class.qualifiedName -> entry.toRoute<TopicRoute>() else if (hasRoute<TopicRoute>()) { entry.toRoute<TopicRoute>() }
SearchRoute::class.qualifiedName -> entry.toRoute<SearchRoute>() else if (hasRoute<SearchRoute>()) { entry.toRoute<SearchRoute>() }
else -> entry else if (hasRoute<InterestsRoute>()) { entry.toRoute<InterestsRoute>() }
else { entry }
} }
} }
} }

@ -50,8 +50,8 @@ import androidx.compose.ui.layout.layout
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavGraphBuilder import androidx.navigation3.runtime.EntryProviderBuilder
import androidx.navigation.compose.composable import androidx.navigation3.runtime.entry
import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute
import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute
import com.google.samples.apps.nowinandroid.feature.topic.TopicDetailPlaceholder import com.google.samples.apps.nowinandroid.feature.topic.TopicDetailPlaceholder
@ -64,8 +64,8 @@ import kotlin.math.max
@Serializable internal object TopicPlaceholderRoute @Serializable internal object TopicPlaceholderRoute
fun NavGraphBuilder.interestsListDetailScreen() { fun EntryProviderBuilder<Any>.interestsListDetailScreen() {
composable<InterestsRoute> { entry<InterestsRoute> {
InterestsListDetailScreen() InterestsListDetailScreen()
} }
} }

@ -26,6 +26,7 @@ android {
dependencies { dependencies {
implementation(projects.core.data) implementation(projects.core.data)
implementation(projects.core.domain) implementation(projects.core.domain)
implementation(projects.core.navigation)
testImplementation(projects.core.testing) testImplementation(projects.core.testing)
testImplementation(libs.robolectric) testImplementation(libs.robolectric)

Loading…
Cancel
Save