@@ -33,15 +33,14 @@ import androidx.compose.material3.Icon
33
33
import androidx.compose.material3.MaterialTheme
34
34
import androidx.compose.material3.Scaffold
35
35
import androidx.compose.material3.SnackbarDuration.Indefinite
36
- import androidx.compose.material3.SnackbarDuration.Short
37
36
import androidx.compose.material3.SnackbarHost
38
37
import androidx.compose.material3.SnackbarHostState
39
- import androidx.compose.material3.SnackbarResult.ActionPerformed
40
38
import androidx.compose.material3.Text
41
39
import androidx.compose.material3.TopAppBarDefaults
42
40
import androidx.compose.material3.adaptive.WindowAdaptiveInfo
43
41
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
44
42
import androidx.compose.runtime.Composable
43
+ import androidx.compose.runtime.CompositionLocalProvider
45
44
import androidx.compose.runtime.LaunchedEffect
46
45
import androidx.compose.runtime.getValue
47
46
import androidx.compose.runtime.mutableStateOf
@@ -63,6 +62,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
63
62
import androidx.navigation.NavDestination
64
63
import androidx.navigation.NavDestination.Companion.hasRoute
65
64
import androidx.navigation.NavDestination.Companion.hierarchy
65
+ import androidx.navigation3.runtime.EntryProviderBuilder
66
66
import com.google.samples.apps.nowinandroid.R
67
67
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground
68
68
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaGradientBackground
@@ -71,15 +71,17 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAp
71
71
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
72
72
import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors
73
73
import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors
74
+ import com.google.samples.apps.nowinandroid.feature.bookmarks.impl.navigation.LocalSnackbarHostState
74
75
import com.google.samples.apps.nowinandroid.feature.settings.api.SettingsDialog
75
- import com.google.samples.apps.nowinandroid.navigation.NiaNavHost
76
+ import com.google.samples.apps.nowinandroid.navigation.NiaNavDisplay
76
77
import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination
77
78
import kotlin.reflect.KClass
78
79
import com.google.samples.apps.nowinandroid.feature.settings.api.R as settingsR
79
80
80
81
@Composable
81
82
fun NiaApp (
82
83
appState : NiaAppState ,
84
+ entryProviderBuilders : Set <@JvmSuppressWildcards EntryProviderBuilder <Any >.() -> Unit >,
83
85
modifier : Modifier = Modifier ,
84
86
windowAdaptiveInfo : WindowAdaptiveInfo = currentWindowAdaptiveInfo(),
85
87
) {
@@ -109,15 +111,16 @@ fun NiaApp(
109
111
)
110
112
}
111
113
}
112
-
113
- NiaApp (
114
- appState = appState,
115
- snackbarHostState = snackbarHostState,
116
- showSettingsDialog = showSettingsDialog,
117
- onSettingsDismissed = { showSettingsDialog = false },
118
- onTopAppBarActionClick = { showSettingsDialog = true },
119
- windowAdaptiveInfo = windowAdaptiveInfo,
120
- )
114
+ CompositionLocalProvider (LocalSnackbarHostState provides snackbarHostState) {
115
+ NiaApp (
116
+ appState = appState,
117
+ entryProviderBuilders = entryProviderBuilders,
118
+ showSettingsDialog = showSettingsDialog,
119
+ onSettingsDismissed = { showSettingsDialog = false },
120
+ onTopAppBarActionClick = { showSettingsDialog = true },
121
+ windowAdaptiveInfo = windowAdaptiveInfo,
122
+ )
123
+ }
121
124
}
122
125
}
123
126
}
@@ -129,7 +132,7 @@ fun NiaApp(
129
132
)
130
133
internal fun NiaApp (
131
134
appState : NiaAppState ,
132
- snackbarHostState : SnackbarHostState ,
135
+ entryProviderBuilders : Set <@JvmSuppressWildcards EntryProviderBuilder < Any >.() -> Unit > ,
133
136
showSettingsDialog : Boolean ,
134
137
onSettingsDismissed : () -> Unit ,
135
138
onTopAppBarActionClick : () -> Unit ,
@@ -138,20 +141,25 @@ internal fun NiaApp(
138
141
) {
139
142
val unreadDestinations by appState.topLevelDestinationsWithUnreadResources
140
143
.collectAsStateWithLifecycle()
141
- val currentDestination = appState.currentDestination
144
+ val currentTopLevelKey = appState.currentTopLevelDestination
145
+
142
146
143
147
if (showSettingsDialog) {
144
148
SettingsDialog (
145
149
onDismiss = { onSettingsDismissed() },
146
150
)
147
151
}
148
152
153
+ val snackbarHostState = LocalSnackbarHostState .current
154
+
149
155
NiaNavigationSuiteScaffold (
150
156
navigationSuiteItems = {
151
157
appState.topLevelDestinations.forEach { destination ->
152
158
val hasUnread = unreadDestinations.contains(destination)
153
- val selected = currentDestination
154
- .isRouteInHierarchy(destination.baseRoute)
159
+ // val selected = currentDestination
160
+ // .isRouteInHierarchy(destination.baseRoute)
161
+ val selected = destination.key == currentTopLevelKey
162
+ println (" cfok destination:$destination , currentDest:$currentTopLevelKey " )
155
163
item(
156
164
selected = selected,
157
165
onClick = { appState.navigateToTopLevelDestination(destination) },
@@ -225,7 +233,7 @@ internal fun NiaApp(
225
233
containerColor = Color .Transparent ,
226
234
),
227
235
onActionClick = { onTopAppBarActionClick() },
228
- onNavigationClick = { appState.navigateToSearch () },
236
+ onNavigationClick = { appState.navigateToSearchNav3 () },
229
237
)
230
238
}
231
239
@@ -239,15 +247,13 @@ internal fun NiaApp(
239
247
},
240
248
),
241
249
) {
242
- NiaNavHost (
243
- appState = appState,
244
- onShowSnackbar = { message, action ->
245
- snackbarHostState.showSnackbar(
246
- message = message,
247
- actionLabel = action,
248
- duration = Short ,
249
- ) == ActionPerformed
250
- },
250
+ // NiaNavHost(
251
+ // appState = appState,
252
+ // onShowSnackbar = onShowSnackbar,
253
+ // )
254
+ NiaNavDisplay (
255
+ niaBackStack = appState.niaBackStack,
256
+ entryProviderBuilders,
251
257
)
252
258
}
253
259
0 commit comments