1717package com.mapcode
1818
1919import androidx.compose.foundation.layout.fillMaxSize
20- import androidx.compose.foundation.layout.statusBarsPadding
20+ import androidx.compose.material.MaterialTheme
2121import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
2222import androidx.compose.material3.windowsizeclass.WindowSizeClass
2323import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
2424import androidx.compose.runtime.Composable
25+ import androidx.compose.runtime.SideEffect
26+ import androidx.compose.runtime.collectAsState
27+ import androidx.compose.runtime.getValue
2528import androidx.compose.ui.Modifier
29+ import androidx.compose.ui.graphics.Color
2630import androidx.hilt.navigation.compose.hiltViewModel
2731import androidx.navigation.NavHostController
32+ import com.google.accompanist.systemuicontroller.rememberSystemUiController
2833import com.mapcode.destinations.FavouritesScreenDestination
2934import com.mapcode.destinations.MapScreenDestination
35+ import com.mapcode.destinations.OnboardingScreenDestination
3036import com.mapcode.favourites.FavouritesScreen
3137import com.mapcode.map.LayoutType
3238import com.mapcode.map.MapScreen
3339import com.mapcode.map.MapViewModel
40+ import com.mapcode.onboarding.OnboardingScreen
3441import com.ramcosta.composedestinations.DestinationsNavHost
3542import com.ramcosta.composedestinations.manualcomposablecalls.composable
3643import com.ramcosta.composedestinations.scope.resultBackNavigator
@@ -43,6 +50,18 @@ fun MapcodeNavHost(
4350 mapViewModel : MapViewModel ,
4451 windowSizeClass : WindowSizeClass
4552) {
53+ val systemUiController = rememberSystemUiController()
54+ val useDarkIcons = MaterialTheme .colors.isLight
55+
56+ SideEffect {
57+ systemUiController.setStatusBarColor(
58+ color = Color .Transparent ,
59+ darkIcons = useDarkIcons
60+ )
61+
62+ systemUiController.setNavigationBarColor(color = Color .Black , darkIcons = false )
63+ }
64+
4665 val layoutType: LayoutType = when {
4766 windowSizeClass.heightSizeClass == WindowHeightSizeClass .Compact
4867 && windowSizeClass.widthSizeClass < WindowWidthSizeClass .Expanded -> LayoutType .VerticalInfoArea
@@ -55,10 +74,20 @@ fun MapcodeNavHost(
5574 else -> LayoutType .HorizontalInfoArea
5675 }
5776
77+ val appViewModel: AppViewModel = hiltViewModel()
78+ val showOnboarding: Boolean by appViewModel.showOnboarding.collectAsState()
79+
80+ val startDestination = if (showOnboarding) {
81+ OnboardingScreenDestination
82+ } else {
83+ MapScreenDestination
84+ }
85+
5886 DestinationsNavHost (
5987 navController = navController,
6088 navGraph = NavGraphs .root,
61- modifier = modifier
89+ modifier = modifier,
90+ startRoute = startDestination
6291 ) {
6392 composable(MapScreenDestination ) {
6493 MapScreen (
@@ -72,12 +101,18 @@ fun MapcodeNavHost(
72101
73102 composable(FavouritesScreenDestination ) {
74103 FavouritesScreen (
75- modifier = Modifier
76- .fillMaxSize()
77- .statusBarsPadding(),
104+ modifier = Modifier .fillMaxSize(),
78105 viewModel = hiltViewModel(),
79106 resultBackNavigator = resultBackNavigator()
80107 )
81108 }
109+
110+ composable(OnboardingScreenDestination ) {
111+ OnboardingScreen (
112+ modifier = Modifier .fillMaxSize(),
113+ viewModel = appViewModel,
114+ navigator = destinationsNavigator
115+ )
116+ }
82117 }
83118}
0 commit comments