Skip to content

Commit 9b9cfe5

Browse files
committed
Refactor Interests to ListDetailScene
1 parent e31d2ef commit 9b9cfe5

File tree

28 files changed

+108
-86
lines changed

28 files changed

+108
-86
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,24 +88,24 @@ dependencies {
8888
implementation(projects.core.designsystem)
8989
implementation(projects.core.data)
9090
implementation(projects.core.model)
91-
implementation(projects.core.navigation)
9291
implementation(projects.core.analytics)
9392
implementation(projects.core.navigation)
9493
implementation(projects.sync.work)
9594

9695
implementation(libs.androidx.activity.compose)
9796
implementation(libs.androidx.compose.material3)
98-
implementation(libs.androidx.navigation3.runtime)
9997
implementation(libs.androidx.navigation3.ui)
10098
implementation(libs.androidx.compose.material3.adaptive)
10199
implementation(libs.androidx.compose.material3.adaptive.layout)
102100
implementation(libs.androidx.compose.material3.adaptive.navigation)
101+
implementation(libs.androidx.compose.material3.adaptive.navigation3)
103102
implementation(libs.androidx.compose.material3.windowSizeClass)
104103
implementation(libs.androidx.compose.runtime.tracing)
105104
implementation(libs.androidx.core.ktx)
106105
implementation(libs.androidx.core.splashscreen)
107106
implementation(libs.androidx.hilt.navigation.compose)
108107
implementation(libs.androidx.lifecycle.runtimeCompose)
108+
implementation(libs.androidx.lifecycle.viewModel.navigation3)
109109
implementation(libs.androidx.navigation.compose)
110110
implementation(libs.androidx.profileinstaller)
111111
implementation(libs.androidx.tracing.ktx)

app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/BackStackProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import dagger.hilt.components.SingletonComponent
2828

2929
@Module
3030
@InstallIn(SingletonComponent::class)
31-
object NiaAppNavigation {
31+
object BackStackProvider {
3232
@Provides
3333
@Singleton
3434
fun provideBackStack(backStackFactory: BackStackFactory) : SnapshotStateList<Any> =

app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavDisplay.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,34 @@
1616

1717
package com.google.samples.apps.nowinandroid.navigation
1818

19+
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
20+
import androidx.compose.material3.adaptive.navigation3.rememberListDetailSceneStrategy
1921
import androidx.compose.runtime.Composable
2022
import androidx.compose.runtime.compositionLocalOf
21-
import androidx.compose.runtime.snapshots.SnapshotStateList
23+
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
2224
import androidx.navigation3.runtime.EntryProviderBuilder
23-
import androidx.navigation3.runtime.NavEntryDecorator
2425
import androidx.navigation3.runtime.entryProvider
26+
import androidx.navigation3.runtime.rememberSavedStateNavEntryDecorator
2527
import androidx.navigation3.ui.NavDisplay
28+
import androidx.navigation3.ui.rememberSceneSetupNavEntryDecorator
2629
import com.google.samples.apps.nowinandroid.core.navigation.NiaBackStack
2730

31+
@OptIn(ExperimentalMaterial3AdaptiveApi::class)
2832
@Composable
2933
fun NiaNavDisplay(
3034
niaBackStack: NiaBackStack,
3135
) {
36+
val listDetailStrategy = rememberListDetailSceneStrategy<Any>()
37+
3238
NavDisplay(
3339
backStack = niaBackStack.backStack,
40+
sceneStrategy = listDetailStrategy,
3441
onBack = { niaBackStack.removeLast() },
42+
entryDecorators = listOf(
43+
rememberSceneSetupNavEntryDecorator(),
44+
rememberSavedStateNavEntryDecorator(),
45+
rememberViewModelStoreNavEntryDecorator(),
46+
),
3547
entryProvider = entryProvider {
3648
LocalEntryProviderBuilder.current.forEach { builder ->
3749
builder()

app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable
2020
import androidx.compose.ui.Modifier
2121
import androidx.navigation.compose.NavHost
2222
import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.bookmarksScreen
23-
import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute
23+
import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute
2424
import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.forYouSection
2525
import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.navigateToInterests
2626
import com.google.samples.apps.nowinandroid.feature.search.api.navigation.searchScreen
@@ -46,7 +46,7 @@ fun NiaNavHost(
4646
val navController = appState.navController
4747
NavHost(
4848
navController = navController,
49-
startDestination = ForYouBaseRoute,
49+
startDestination = ForYouRoute,
5050
modifier = modifier,
5151
) {
5252
forYouSection(

app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.compose.ui.graphics.vector.ImageVector
2121
import com.google.samples.apps.nowinandroid.R
2222
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
2323
import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute
24-
import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouBaseRoute
2524
import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute
2625
import com.google.samples.apps.nowinandroid.feature.interests.api.navigation.InterestsRoute
2726
import kotlin.reflect.KClass
@@ -49,7 +48,6 @@ enum class TopLevelDestination(
4948
@StringRes val iconTextId: Int,
5049
@StringRes val titleTextId: Int,
5150
val route: KClass<*>,
52-
val baseRoute: KClass<*> = route,
5351
val key: Any
5452
) {
5553
FOR_YOU(
@@ -58,8 +56,7 @@ enum class TopLevelDestination(
5856
iconTextId = forYouR.string.feature_foryou_api_title,
5957
titleTextId = R.string.app_name,
6058
route = ForYouRoute::class,
61-
baseRoute = ForYouBaseRoute::class,
62-
key = ForYouBaseRoute
59+
key = ForYouRoute
6360
),
6461
BOOKMARKS(
6562
selectedIcon = NiaIcons.Bookmarks,
@@ -78,3 +75,5 @@ enum class TopLevelDestination(
7875
key = InterestsRoute(null)
7976
),
8077
}
78+
79+
internal val TopLevelDestinations = TopLevelDestination.entries.associateBy { dest -> dest.key }

app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ internal fun NiaApp(
137137
) {
138138
val unreadDestinations by appState.topLevelDestinationsWithUnreadResources
139139
.collectAsStateWithLifecycle()
140-
val currentTopLevelKey = appState.currentTopLevelDestination
140+
val currentTopLevelKey = appState.currentTopLevelDestination!!.key
141141

142142

143143
if (showSettingsDialog) {
@@ -152,10 +152,7 @@ internal fun NiaApp(
152152
navigationSuiteItems = {
153153
appState.topLevelDestinations.forEach { destination ->
154154
val hasUnread = unreadDestinations.contains(destination)
155-
// val selected = currentDestination
156-
// .isRouteInHierarchy(destination.baseRoute)
157155
val selected = destination.key == currentTopLevelKey
158-
println("cfok destination:$destination, currentDest:$currentTopLevelKey")
159156
item(
160157
selected = selected,
161158
onClick = { appState.navigateToTopLevelDestination(destination) },

app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination
3535
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS
3636
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU
3737
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS
38+
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestinations
3839
import kotlinx.coroutines.CoroutineScope
3940
import kotlinx.coroutines.flow.SharingStarted
4041
import kotlinx.coroutines.flow.StateFlow
@@ -98,12 +99,7 @@ class NiaAppState(
9899
// }
99100

100101
val currentTopLevelDestination: TopLevelDestination?
101-
@Composable get() {
102-
return TopLevelDestination.entries.firstOrNull { topLevelDestination ->
103-
topLevelDestination.key == niaBackStack.currentTopLevelKey
104-
// currentDestination?.hasRoute(route = topLevelDestination.route) == true
105-
}
106-
}
102+
@Composable get() = TopLevelDestinations[niaBackStack.currentTopLevelKey]
107103

108104
val isOffline = networkMonitor.isOnline
109105
.map(Boolean::not)

core/navigation/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ plugins {
44
}
55

66
dependencies {
7-
implementation(libs.androidx.navigation3.runtime)
7+
api(libs.androidx.navigation3.runtime)
88
}

core/navigation/src/main/kotlin/com/google/samples/apps/nowinandroid/core/navigation/NiaBackStack.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ class NiaBackStack @Inject constructor(
6969
}
7070

7171
fun navigate(key: Any){
72-
println("cfok navigate $key")
7372
topLevelStacks[currentTopLevelKey]?.add(key)
7473
updateBackStack()
7574
}

feature/bookmarks/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/impl/BookmarksScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParam
7676
import com.google.samples.apps.nowinandroid.core.ui.newsFeed
7777

7878
@Composable
79-
internal fun BookmarksRoute(
79+
internal fun BookmarksScreen(
8080
onTopicClick: (String) -> Unit,
8181
onShowSnackbar: suspend (String, String?) -> Boolean,
8282
modifier: Modifier = Modifier,

0 commit comments

Comments
 (0)