Title bar is now hidden on non top-level keys.

pull/2003/head
Don Turner 3 months ago
parent af504d2331
commit bd484ebb3c

@ -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,

@ -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,

@ -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)

@ -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

Loading…
Cancel
Save