From 11d3d5c5d28752ad329ebfcd6af4f35b6550032a Mon Sep 17 00:00:00 2001 From: lbarraga Date: Sat, 8 Apr 2023 17:47:03 +0200 Subject: [PATCH] added main app composable with navgraph --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt new file mode 100644 index 0000000..2706a9a --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -0,0 +1,81 @@ +package be.ugent.sel.studeez + +import android.content.res.Resources +import androidx.compose.foundation.layout.padding +import androidx.compose.material.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import be.ugent.sel.studeez.common.snackbar.SnackbarManager +import be.ugent.sel.studeez.navigation.StudeezDestinations +import be.ugent.sel.studeez.screens.splash.SplashScreen +import be.ugent.sel.studeez.ui.theme.StudeezTheme +import kotlinx.coroutines.CoroutineScope + +@Composable +fun StudeezApp() { + StudeezTheme { + Surface(color = MaterialTheme.colors.background) { + val appState = rememberAppState() + + Scaffold( + snackbarHost = { + SnackbarHost( + hostState = it, + modifier = Modifier.padding(8.dp), + snackbar = { snackbarData -> + Snackbar(snackbarData, contentColor = MaterialTheme.colors.onPrimary) + } + ) + }, + scaffoldState = appState.scaffoldState + ) { innerPaddingModifier -> + NavHost( + navController = appState.navController, + startDestination = StudeezDestinations.SPLASH_SCREEN, + modifier = Modifier.padding(innerPaddingModifier) + ) { + studeezGraph(appState) + } + } + } + } +} + +@Composable +fun rememberAppState( + scaffoldState: ScaffoldState = rememberScaffoldState(), + navController: NavHostController = rememberNavController(), + snackbarManager: SnackbarManager = SnackbarManager, + resources: Resources = resources(), + coroutineScope: CoroutineScope = rememberCoroutineScope() +) = + remember(scaffoldState, navController, snackbarManager, resources, coroutineScope) { + StudeezAppstate(scaffoldState, navController, snackbarManager, resources, coroutineScope) + } + +@Composable +@ReadOnlyComposable +fun resources(): Resources { + LocalConfiguration.current + return LocalContext.current.resources +} + +fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { + + composable(StudeezDestinations.SPLASH_SCREEN) { + SplashScreen(openAndPopUp = { route, popUp -> appState.navigateAndPopUp(route, popUp) }) + } + + +} \ No newline at end of file