From bbdcd0140c5061ca65f97f08254241dc912c42fc Mon Sep 17 00:00:00 2001 From: brreynie Date: Mon, 24 Apr 2023 16:07:25 +0200 Subject: [PATCH] refactor NavGraph so viewModel for drawer and navbar are shared across app --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 152 ++++++++++-------- .../sel/studeez/screens/home/HomeScreen.kt | 9 +- .../timer_overview/TimerOverviewScreen.kt | 9 +- .../timer_selection/TimerSelectionScreen.kt | 9 +- 4 files changed, 107 insertions(+), 72 deletions(-) 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 9d071c7..a6830a5 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -18,11 +18,12 @@ 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.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.composable.drawer.DrawerViewModel +import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel import be.ugent.sel.studeez.common.snackbar.SnackbarManager import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.home.HomeRoute @@ -55,13 +56,7 @@ fun StudeezApp() { }, scaffoldState = appState.scaffoldState ) { innerPaddingModifier -> - NavHost( - navController = appState.navController, - startDestination = StudeezDestinations.SPLASH_SCREEN, - modifier = Modifier.padding(innerPaddingModifier) - ) { - studeezGraph(appState) - } + StudeezNavGraph(appState, Modifier.padding(innerPaddingModifier)) } } } @@ -86,60 +81,91 @@ fun resources(): Resources { return LocalContext.current.resources } -fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { +@Composable +fun StudeezNavGraph( + appState: StudeezAppstate, + modifier: Modifier, +) { + val drawerViewModel: DrawerViewModel = hiltViewModel() + val navBarViewModel: NavigationBarViewModel = hiltViewModel() - val goBack: () -> Unit = { - appState.popUp() + NavHost( + navController = appState.navController, + startDestination = StudeezDestinations.SPLASH_SCREEN, + modifier = modifier, + ) { + val goBack: () -> Unit = { + appState.popUp() + } + + val open: (String) -> Unit = { route -> + appState.navigate(route) + } + + val openAndPopUp: (String, String) -> Unit = { route, popUp -> + appState.navigateAndPopUp(route, popUp) + } + + + 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()) + } + + composable(StudeezDestinations.HOME_SCREEN) { + HomeRoute( + open, + openAndPopUp, + viewModel = hiltViewModel(), + drawerViewModel = drawerViewModel, + navBarViewModel = navBarViewModel, + ) + } + + // TODO Tasks screen + // TODO Sessions screen + + composable(StudeezDestinations.PROFILE_SCREEN) { + ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel()) + } + + composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) { + TimerOverviewRoute( + open, + openAndPopUp, + viewModel = hiltViewModel(), + drawerViewModel = drawerViewModel, + navBarViewModel = navBarViewModel, + ) + } + + composable(StudeezDestinations.SESSION_SCREEN) { + SessionRoute(open, viewModel = hiltViewModel()) + } + + // TODO Timers screen + // TODO Settings screen + + // Edit screens + composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { + EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel()) + } + + composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { + TimerSelectionRoute( + open, + openAndPopUp, + viewModel = hiltViewModel(), + drawerViewModel = drawerViewModel, + navBarViewModel = navBarViewModel, + ) + } } - - val open: (String) -> Unit = { route -> - appState.navigate(route) - } - - val openAndPopUp: (String, String) -> Unit = { route, popUp -> - appState.navigateAndPopUp(route, popUp) - } - - 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()) - } - - composable(StudeezDestinations.HOME_SCREEN) { - HomeRoute(open, openAndPopUp, viewModel = hiltViewModel()) - } - - // TODO Tasks screen - // TODO Sessions screen - - composable(StudeezDestinations.PROFILE_SCREEN) { - ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel()) - } - - composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) { - TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel()) - } - - composable(StudeezDestinations.SESSION_SCREEN) { - SessionRoute(open, viewModel = hiltViewModel()) - } - - // TODO Timers screen - // TODO Settings screen - - // Edit screens - composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { - EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel()) - } - - composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { - TimerSelectionRoute(open, openAndPopUp, viewModel = hiltViewModel()) - } -} \ No newline at end of file +} diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt index d989966..e318655 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeScreen.kt @@ -7,13 +7,14 @@ import androidx.compose.material.icons.filled.Person import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate 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.ext.basicButton import be.ugent.sel.studeez.resources @@ -23,11 +24,13 @@ fun HomeRoute( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, viewModel: HomeViewModel, + drawerViewModel: DrawerViewModel, + navBarViewModel: NavigationBarViewModel, ) { HomeScreen( onStartSessionClick = { viewModel.onStartSessionClick(open) }, - drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), - navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp), + navigationBarActions = getNavigationBarActions(navBarViewModel, open), ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt index 2a1435e..fafdf02 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt @@ -9,15 +9,16 @@ import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.common.composable.StealthButton import be.ugent.sel.studeez.common.composable.TimerEntry 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.ext.basicButton import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo @@ -47,11 +48,13 @@ fun TimerOverviewRoute( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, viewModel: TimerOverviewViewModel, + drawerViewModel: DrawerViewModel, + navBarViewModel: NavigationBarViewModel, ) { TimerOverviewScreen( timerOverviewActions = getTimerOverviewActions(viewModel), - drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), - navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp), + navigationBarActions = getNavigationBarActions(navBarViewModel, open), ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt index c6d8f4e..47e7f91 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt @@ -7,14 +7,15 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.common.composable.StealthButton import be.ugent.sel.studeez.common.composable.TimerEntry 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.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.resources @@ -41,11 +42,13 @@ fun TimerSelectionRoute( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, viewModel: TimerSelectionViewModel, + drawerViewModel: DrawerViewModel, + navBarViewModel: NavigationBarViewModel, ) { TimerSelectionScreen( timerSelectionActions = getTimerSelectionActions(viewModel, open), - drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), - navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp), + navigationBarActions = getNavigationBarActions(navBarViewModel, open), ) }