diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelRoutes.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelRoutes.kt index c82544b8f..8c796a5a7 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelRoutes.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelRoutes.kt @@ -46,7 +46,7 @@ val INTERESTS = TopLevelNavItem( titleTextId = searchR.string.feature_search_api_interests, ) -val TOP_LEVEL_ROUTES = mapOf( +val TOP_LEVEL_NAV_ITEMS = mapOf( ForYouRoute to FOR_YOU, BookmarksRoute to BOOKMARKS, InterestsRoute(null) to INTERESTS, diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 2dacde653..aaf57f452 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -83,7 +83,7 @@ import com.google.samples.apps.nowinandroid.feature.search.impl.navigation.searc import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog import com.google.samples.apps.nowinandroid.feature.topic.impl.navigation.topicEntry import com.google.samples.apps.nowinandroid.navigation.FOR_YOU -import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_ROUTES +import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_NAV_ITEMS import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR @Composable @@ -160,12 +160,12 @@ internal fun NiaApp( NiaNavigationSuiteScaffold( navigationSuiteItems = { - TOP_LEVEL_ROUTES.forEach { (route, navItem) -> - val hasUnread = unreadRoutes.contains(route) - val selected = route == appState.navigationState.currentTopLevelKey + TOP_LEVEL_NAV_ITEMS.forEach { (navKey, navItem) -> + val hasUnread = unreadRoutes.contains(navKey) + val selected = navKey == appState.navigationState.currentTopLevelKey item( selected = selected, - onClick = { navigator.navigate(route) }, + onClick = { navigator.navigate(navKey) }, icon = { Icon( imageVector = navItem.unselectedIcon, @@ -216,12 +216,15 @@ internal fun NiaApp( ), ), ) { - // Show the top app bar on top level destinations. - val destination = appState.currentTopLevelNavItem + // Only show the top app bar on top level destinations. var shouldShowTopAppBar = false - if (destination != null) { + if (appState.navigationState.currentKey in appState.navigationState.topLevelKeys) { shouldShowTopAppBar = true + + val destination = TOP_LEVEL_NAV_ITEMS[appState.navigationState.currentTopLevelKey] + ?: error("Top level nav item not found for ${appState.navigationState.currentTopLevelKey}") + NiaTopAppBar( titleRes = destination.titleTextId, navigationIcon = NiaIcons.Search, 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 4bb8926ff..a8921e967 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 @@ -28,7 +28,7 @@ import com.google.samples.apps.nowinandroid.core.navigation.NavigationState import com.google.samples.apps.nowinandroid.core.navigation.rememberNavigationState import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute -import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_ROUTES +import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_NAV_ITEMS import com.google.samples.apps.nowinandroid.navigation.TopLevelNavItem import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.SharingStarted @@ -46,7 +46,7 @@ fun rememberNiaAppState( coroutineScope: CoroutineScope = rememberCoroutineScope(), ): NiaAppState { - val navigationState = rememberNavigationState(ForYouRoute, TOP_LEVEL_ROUTES.keys) + val navigationState = rememberNavigationState(ForYouRoute, TOP_LEVEL_NAV_ITEMS.keys) NavigationTrackingSideEffect(navigationState) @@ -77,7 +77,7 @@ class NiaAppState( ) { // TODO: I think this should return null if the current route is not a topLevelRoute val currentTopLevelNavItem: TopLevelNavItem? - @Composable get() = TOP_LEVEL_ROUTES[navigationState.currentTopLevelKey] + @Composable get() = TOP_LEVEL_NAV_ITEMS[navigationState.currentTopLevelKey] val isOffline = networkMonitor.isOnline .map(Boolean::not) diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index 31b2ee5df..5a4726dd3 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -25,7 +25,7 @@ import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor import com.google.samples.apps.nowinandroid.core.testing.util.TestTimeZoneMonitor import com.google.samples.apps.nowinandroid.feature.bookmarks.api.navigation.BookmarksRoute import com.google.samples.apps.nowinandroid.feature.foryou.api.navigation.ForYouRoute -import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_ROUTES +import com.google.samples.apps.nowinandroid.navigation.TOP_LEVEL_NAV_ITEMS import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltTestApplication import kotlinx.coroutines.flow.collect @@ -101,10 +101,10 @@ class NiaAppStateTest { ) } - assertEquals(3, TOP_LEVEL_ROUTES.size) - assertTrue(TOP_LEVEL_ROUTES[0].name.contains("for_you", true)) - assertTrue(TOP_LEVEL_ROUTES[1].name.contains("bookmarks", true)) - assertTrue(TOP_LEVEL_ROUTES[2].name.contains("interests", true)) + assertEquals(3, TOP_LEVEL_NAV_ITEMS.size) + assertTrue(TOP_LEVEL_NAV_ITEMS[0].name.contains("for_you", true)) + assertTrue(TOP_LEVEL_NAV_ITEMS[1].name.contains("bookmarks", true)) + assertTrue(TOP_LEVEL_NAV_ITEMS[2].name.contains("interests", true)) } @Test