From f7a3d68c3e6a782427a70950fff501e4658ad7f9 Mon Sep 17 00:00:00 2001 From: brreynie Date: Fri, 5 May 2023 11:10:59 +0200 Subject: [PATCH] extract StudeezNavGraph out of StudeezApp --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 243 +----------------- .../sel/studeez/navigation/StudeezNavGraph.kt | 238 +++++++++++++++++ 2 files changed, 240 insertions(+), 241 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/navigation/StudeezNavGraph.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 index 11454ff..c3d1634 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -2,56 +2,19 @@ package be.ugent.sel.studeez import android.content.res.Resources import androidx.compose.foundation.layout.padding -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Scaffold -import androidx.compose.material.ScaffoldState -import androidx.compose.material.Snackbar -import androidx.compose.material.SnackbarHost -import androidx.compose.material.Surface -import androidx.compose.material.rememberScaffoldState +import androidx.compose.material.* import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable -import androidx.compose.runtime.getValue 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.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController -import be.ugent.sel.studeez.common.composable.drawer.DrawerActions -import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel -import be.ugent.sel.studeez.common.composable.drawer.getDrawerActions -import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions -import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel -import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions import be.ugent.sel.studeez.common.snackbar.SnackbarManager -import be.ugent.sel.studeez.navigation.StudeezDestinations -import be.ugent.sel.studeez.screens.home.HomeRoute -import be.ugent.sel.studeez.screens.log_in.LoginRoute -import be.ugent.sel.studeez.screens.profile.EditProfileRoute -import be.ugent.sel.studeez.screens.profile.ProfileRoute -import be.ugent.sel.studeez.screens.session.SessionRoute -import be.ugent.sel.studeez.screens.session_recap.SessionRecapRoute -import be.ugent.sel.studeez.screens.sessions.SessionsRoute -import be.ugent.sel.studeez.screens.settings.SettingsRoute -import be.ugent.sel.studeez.screens.sign_up.SignUpRoute -import be.ugent.sel.studeez.screens.splash.SplashRoute -import be.ugent.sel.studeez.screens.tasks.SubjectRoute -import be.ugent.sel.studeez.screens.tasks.TaskRoute -import be.ugent.sel.studeez.screens.tasks.forms.SubjectAddRoute -import be.ugent.sel.studeez.screens.tasks.forms.SubjectEditRoute -import be.ugent.sel.studeez.screens.tasks.forms.TaskAddRoute -import be.ugent.sel.studeez.screens.tasks.forms.TaskEditRoute -import be.ugent.sel.studeez.screens.timer_edit.TimerEditRoute -import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute -import be.ugent.sel.studeez.screens.timer_overview.add_timer.AddTimerRoute -import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute +import be.ugent.sel.studeez.navigation.StudeezNavGraph import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -97,205 +60,3 @@ fun resources(): Resources { LocalConfiguration.current return LocalContext.current.resources } - -@Composable -fun StudeezNavGraph( - appState: StudeezAppstate, - modifier: Modifier = Modifier, -) { - val drawerViewModel: DrawerViewModel = hiltViewModel() - val navBarViewModel: NavigationBarViewModel = hiltViewModel() - - val backStackEntry by appState.navController.currentBackStackEntryAsState() - val getCurrentScreen: () -> String? = { backStackEntry?.destination?.route } - - val goBack: () -> Unit = { appState.popUp() } - val open: (String) -> Unit = { appState.navigate(it) } - val openAndPopUp: (String, String) -> Unit = - { route, popUp -> appState.navigateAndPopUp(route, popUp) } - - val drawerActions: DrawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp) - val navigationBarActions: NavigationBarActions = - getNavigationBarActions(navBarViewModel, open, getCurrentScreen) - - NavHost( - navController = appState.navController, - startDestination = StudeezDestinations.SPLASH_SCREEN, - modifier = modifier, - ) { - // NavBar - composable(StudeezDestinations.HOME_SCREEN) { - HomeRoute( - open, - viewModel = hiltViewModel(), - drawerActions = drawerActions, - navigationBarActions = navigationBarActions - ) - } - - composable(StudeezDestinations.SUBJECT_SCREEN) { - SubjectRoute( - open = open, - viewModel = hiltViewModel(), - drawerActions = drawerActions, - navigationBarActions = navigationBarActions, - ) - } - - composable(StudeezDestinations.ADD_SUBJECT_FORM) { - SubjectAddRoute( - goBack = goBack, - openAndPopUp = openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.EDIT_SUBJECT_FORM) { - SubjectEditRoute( - goBack = goBack, - openAndPopUp = openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.TASKS_SCREEN) { - TaskRoute( - goBack = goBack, - open = open, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.ADD_TASK_FORM) { - TaskAddRoute( - goBack = goBack, - openAndPopUp = openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.EDIT_TASK_FORM) { - TaskEditRoute( - goBack = goBack, - openAndPopUp = openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - - composable(StudeezDestinations.SESSIONS_SCREEN) { - SessionsRoute( - drawerActions = drawerActions, - navigationBarActions = navigationBarActions - ) - } - - composable(StudeezDestinations.PROFILE_SCREEN) { - ProfileRoute( - open, - viewModel = hiltViewModel(), - drawerActions = drawerActions, - navigationBarActions = navigationBarActions, - ) - } - - // Drawer - composable(StudeezDestinations.TIMER_SCREEN) { - TimerOverviewRoute( - viewModel = hiltViewModel(), - drawerActions = drawerActions, - open = open - ) - } - - composable(StudeezDestinations.SETTINGS_SCREEN) { - SettingsRoute( - drawerActions = drawerActions - ) - } - - // Login flow - composable(StudeezDestinations.SPLASH_SCREEN) { - SplashRoute( - openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.LOGIN_SCREEN) { - LoginRoute( - openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.SIGN_UP_SCREEN) { - SignUpRoute( - openAndPopUp, - viewModel = hiltViewModel(), - ) - } - - // Studying flow - composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { - TimerSelectionRoute( - open, - goBack, - viewModel = hiltViewModel(), - ) - } - - composable(StudeezDestinations.SESSION_SCREEN) { - SessionRoute( - open, - openAndPopUp, - viewModel = hiltViewModel() - ) - } - - composable(StudeezDestinations.SESSION_RECAP) { - SessionRecapRoute( - openAndPopUp = openAndPopUp, - viewModel = hiltViewModel() - ) - } - - composable(StudeezDestinations.ADD_TIMER_SCREEN) { - AddTimerRoute( - open = open, - goBack = goBack, - viewModel = hiltViewModel() - ) - } - - composable(StudeezDestinations.TIMER_EDIT_SCREEN) { - TimerEditRoute( - open = open, - popUp = goBack, - viewModel = hiltViewModel() - ) - } - - // Friends flow - composable(StudeezDestinations.SEARCH_FRIENDS_SCREEN) { - // TODO - } - - // Create & edit screens - composable(StudeezDestinations.CREATE_TASK_SCREEN) { - // TODO - } - - composable(StudeezDestinations.CREATE_SESSION_SCREEN) { - // TODO - } - - composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { - EditProfileRoute( - goBack, - openAndPopUp, - viewModel = hiltViewModel(), - ) - } - } -} diff --git a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezNavGraph.kt b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezNavGraph.kt new file mode 100644 index 0000000..8ac135e --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezNavGraph.kt @@ -0,0 +1,238 @@ +package be.ugent.sel.studeez.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import be.ugent.sel.studeez.StudeezAppstate +import be.ugent.sel.studeez.common.composable.drawer.DrawerActions +import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel +import be.ugent.sel.studeez.common.composable.drawer.getDrawerActions +import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions +import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel +import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions +import be.ugent.sel.studeez.screens.home.HomeRoute +import be.ugent.sel.studeez.screens.log_in.LoginRoute +import be.ugent.sel.studeez.screens.profile.EditProfileRoute +import be.ugent.sel.studeez.screens.profile.ProfileRoute +import be.ugent.sel.studeez.screens.session.SessionRoute +import be.ugent.sel.studeez.screens.session_recap.SessionRecapRoute +import be.ugent.sel.studeez.screens.sessions.SessionsRoute +import be.ugent.sel.studeez.screens.settings.SettingsRoute +import be.ugent.sel.studeez.screens.sign_up.SignUpRoute +import be.ugent.sel.studeez.screens.splash.SplashRoute +import be.ugent.sel.studeez.screens.tasks.SubjectRoute +import be.ugent.sel.studeez.screens.tasks.TaskRoute +import be.ugent.sel.studeez.screens.tasks.forms.SubjectAddRoute +import be.ugent.sel.studeez.screens.tasks.forms.SubjectEditRoute +import be.ugent.sel.studeez.screens.tasks.forms.TaskAddRoute +import be.ugent.sel.studeez.screens.tasks.forms.TaskEditRoute +import be.ugent.sel.studeez.screens.timer_edit.TimerEditRoute +import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute +import be.ugent.sel.studeez.screens.timer_overview.add_timer.AddTimerRoute +import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute + +@Composable +fun StudeezNavGraph( + appState: StudeezAppstate, + modifier: Modifier = Modifier, +) { + val drawerViewModel: DrawerViewModel = hiltViewModel() + val navBarViewModel: NavigationBarViewModel = hiltViewModel() + + val backStackEntry by appState.navController.currentBackStackEntryAsState() + val getCurrentScreen: () -> String? = { backStackEntry?.destination?.route } + + val goBack: () -> Unit = { appState.popUp() } + val open: (String) -> Unit = { appState.navigate(it) } + val openAndPopUp: (String, String) -> Unit = + { route, popUp -> appState.navigateAndPopUp(route, popUp) } + + val drawerActions: DrawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp) + val navigationBarActions: NavigationBarActions = + getNavigationBarActions(navBarViewModel, open, getCurrentScreen) + + NavHost( + navController = appState.navController, + startDestination = StudeezDestinations.SPLASH_SCREEN, + modifier = modifier, + ) { + // NavBar + composable(StudeezDestinations.HOME_SCREEN) { + HomeRoute( + open, + viewModel = hiltViewModel(), + drawerActions = drawerActions, + navigationBarActions = navigationBarActions + ) + } + + composable(StudeezDestinations.SUBJECT_SCREEN) { + SubjectRoute( + open = open, + viewModel = hiltViewModel(), + drawerActions = drawerActions, + navigationBarActions = navigationBarActions, + ) + } + + composable(StudeezDestinations.ADD_SUBJECT_FORM) { + SubjectAddRoute( + goBack = goBack, + openAndPopUp = openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.EDIT_SUBJECT_FORM) { + SubjectEditRoute( + goBack = goBack, + openAndPopUp = openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.TASKS_SCREEN) { + TaskRoute( + goBack = goBack, + open = open, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.ADD_TASK_FORM) { + TaskAddRoute( + goBack = goBack, + openAndPopUp = openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.EDIT_TASK_FORM) { + TaskEditRoute( + goBack = goBack, + openAndPopUp = openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + + composable(StudeezDestinations.SESSIONS_SCREEN) { + SessionsRoute( + drawerActions = drawerActions, + navigationBarActions = navigationBarActions + ) + } + + composable(StudeezDestinations.PROFILE_SCREEN) { + ProfileRoute( + open, + viewModel = hiltViewModel(), + drawerActions = drawerActions, + navigationBarActions = navigationBarActions, + ) + } + + // Drawer + composable(StudeezDestinations.TIMER_SCREEN) { + TimerOverviewRoute( + viewModel = hiltViewModel(), + drawerActions = drawerActions, + open = open + ) + } + + composable(StudeezDestinations.SETTINGS_SCREEN) { + SettingsRoute( + drawerActions = drawerActions + ) + } + + // Login flow + composable(StudeezDestinations.SPLASH_SCREEN) { + SplashRoute( + openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.LOGIN_SCREEN) { + LoginRoute( + openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.SIGN_UP_SCREEN) { + SignUpRoute( + openAndPopUp, + viewModel = hiltViewModel(), + ) + } + + // Studying flow + composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { + TimerSelectionRoute( + open, + goBack, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.SESSION_SCREEN) { + SessionRoute( + open, + openAndPopUp, + viewModel = hiltViewModel() + ) + } + + composable(StudeezDestinations.SESSION_RECAP) { + SessionRecapRoute( + openAndPopUp = openAndPopUp, + viewModel = hiltViewModel() + ) + } + + composable(StudeezDestinations.ADD_TIMER_SCREEN) { + AddTimerRoute( + open = open, + goBack = goBack, + viewModel = hiltViewModel() + ) + } + + composable(StudeezDestinations.TIMER_EDIT_SCREEN) { + TimerEditRoute( + open = open, + popUp = goBack, + viewModel = hiltViewModel() + ) + } + + // Friends flow + composable(StudeezDestinations.SEARCH_FRIENDS_SCREEN) { + // TODO + } + + // Create & edit screens + composable(StudeezDestinations.CREATE_TASK_SCREEN) { + // TODO + } + + composable(StudeezDestinations.CREATE_SESSION_SCREEN) { + // TODO + } + + composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { + EditProfileRoute( + goBack, + openAndPopUp, + viewModel = hiltViewModel(), + ) + } + } +}