Migrate interests feature

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

@ -73,7 +73,7 @@ fun NiaNavHost(
}
composable<BookmarksRoute> {}
composable<SearchRoute> {}
interestsListDetailScreen()
composable<InterestsRoute>{}
}
}
},
@ -96,6 +96,7 @@ fun NiaNavHost(
onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) },
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.feature.bookmarks.api.navigation.BookmarksRoute
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.search.navigation.SearchRoute
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.FOR_YOU
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.Dispatchers
import kotlinx.coroutines.Job
@ -217,7 +219,8 @@ class Nav3NavigatorSimple(val navController: NavHostController){
private val migratedRoutes = listOf(
BookmarksRoute::class,
TopicRoute::class,
SearchRoute::class
SearchRoute::class,
InterestsRoute::class,
).associateBy { it.qualifiedName }
// 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()){
clear()
val entriesToAdd = nav2BackStack.mapNotNull { entry ->
val className = entry.destination.route?.substringBefore('/')
println("Evaluating: $className")
// Ignore nav graph root entries
if (entry.destination::class.qualifiedName == "androidx.navigation.compose.ComposeNavGraphNavigator.ComposeNavGraph"){
null
} else {
when (className) {
BookmarksRoute::class.qualifiedName -> entry.toRoute<BookmarksRoute>()
TopicRoute::class.qualifiedName -> entry.toRoute<TopicRoute>()
SearchRoute::class.qualifiedName -> entry.toRoute<SearchRoute>()
else -> entry
with(entry.destination) {
if (hasRoute<BookmarksRoute>()) { entry.toRoute<BookmarksRoute>() }
else if (hasRoute<TopicRoute>()) { entry.toRoute<TopicRoute>() }
else if (hasRoute<SearchRoute>()) { entry.toRoute<SearchRoute>() }
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.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import androidx.navigation3.runtime.EntryProviderBuilder
import androidx.navigation3.runtime.entry
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.topic.TopicDetailPlaceholder
@ -64,8 +64,8 @@ import kotlin.math.max
@Serializable internal object TopicPlaceholderRoute
fun NavGraphBuilder.interestsListDetailScreen() {
composable<InterestsRoute> {
fun EntryProviderBuilder<Any>.interestsListDetailScreen() {
entry<InterestsRoute> {
InterestsListDetailScreen()
}
}

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

Loading…
Cancel
Save