extract navbar and draweractions to StudeezNavGraph
This commit is contained in:
parent
cf91d727a0
commit
010c7cff54
6 changed files with 72 additions and 67 deletions
|
@ -2,8 +2,18 @@ package be.ugent.sel.studeez
|
||||||
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.runtime.*
|
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.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.Modifier
|
||||||
import androidx.compose.ui.platform.LocalConfiguration
|
import androidx.compose.ui.platform.LocalConfiguration
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
@ -14,8 +24,12 @@ import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
import androidx.navigation.compose.rememberNavController
|
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.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.NavigationBarViewModel
|
||||||
|
import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions
|
||||||
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
|
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
|
||||||
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
import be.ugent.sel.studeez.screens.home.HomeRoute
|
import be.ugent.sel.studeez.screens.home.HomeRoute
|
||||||
|
@ -82,48 +96,51 @@ fun StudeezNavGraph(
|
||||||
val navBarViewModel: NavigationBarViewModel = hiltViewModel()
|
val navBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||||
|
|
||||||
val backStackEntry by appState.navController.currentBackStackEntryAsState()
|
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(
|
NavHost(
|
||||||
navController = appState.navController,
|
navController = appState.navController,
|
||||||
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
||||||
modifier = modifier,
|
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
val getCurrentScreen: () -> String? = {
|
|
||||||
backStackEntry?.destination?.route
|
|
||||||
}
|
|
||||||
|
|
||||||
composable(StudeezDestinations.SPLASH_SCREEN) {
|
composable(StudeezDestinations.SPLASH_SCREEN) {
|
||||||
SplashRoute(openAndPopUp, viewModel = hiltViewModel())
|
SplashRoute(
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.LOGIN_SCREEN) {
|
composable(StudeezDestinations.LOGIN_SCREEN) {
|
||||||
LoginRoute(openAndPopUp, viewModel = hiltViewModel())
|
LoginRoute(
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.SIGN_UP_SCREEN) {
|
composable(StudeezDestinations.SIGN_UP_SCREEN) {
|
||||||
SignUpRoute(openAndPopUp, viewModel = hiltViewModel())
|
SignUpRoute(
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.HOME_SCREEN) {
|
composable(StudeezDestinations.HOME_SCREEN) {
|
||||||
HomeRoute(
|
HomeRoute(
|
||||||
open,
|
open,
|
||||||
openAndPopUp,
|
|
||||||
getCurrentScreen,
|
|
||||||
viewModel = hiltViewModel(),
|
viewModel = hiltViewModel(),
|
||||||
drawerViewModel = drawerViewModel,
|
drawerActions = drawerActions,
|
||||||
navBarViewModel = navBarViewModel,
|
navigationBarActions = navigationBarActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,20 +148,26 @@ fun StudeezNavGraph(
|
||||||
// TODO Sessions screen
|
// TODO Sessions screen
|
||||||
|
|
||||||
composable(StudeezDestinations.PROFILE_SCREEN) {
|
composable(StudeezDestinations.PROFILE_SCREEN) {
|
||||||
ProfileRoute(open, openAndPopUp, getCurrentScreen, viewModel = hiltViewModel())
|
ProfileRoute(
|
||||||
|
open,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
drawerActions = drawerActions,
|
||||||
|
navigationBarActions = navigationBarActions,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
||||||
TimerOverviewRoute(
|
TimerOverviewRoute(
|
||||||
open,
|
|
||||||
openAndPopUp,
|
|
||||||
viewModel = hiltViewModel(),
|
viewModel = hiltViewModel(),
|
||||||
drawerViewModel = drawerViewModel
|
drawerActions = drawerActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.SESSION_SCREEN) {
|
composable(StudeezDestinations.SESSION_SCREEN) {
|
||||||
SessionRoute(open, viewModel = hiltViewModel())
|
SessionRoute(
|
||||||
|
open,
|
||||||
|
viewModel = hiltViewModel()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Timers screen
|
// TODO Timers screen
|
||||||
|
@ -152,18 +175,18 @@ fun StudeezNavGraph(
|
||||||
|
|
||||||
// Edit screens
|
// Edit screens
|
||||||
composable(StudeezDestinations.EDIT_PROFILE_SCREEN) {
|
composable(StudeezDestinations.EDIT_PROFILE_SCREEN) {
|
||||||
EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel())
|
EditProfileRoute(
|
||||||
|
goBack,
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
||||||
TimerSelectionRoute(
|
TimerSelectionRoute(
|
||||||
open,
|
open,
|
||||||
openAndPopUp,
|
|
||||||
goBack,
|
goBack,
|
||||||
getCurrentScreen,
|
|
||||||
viewModel = hiltViewModel(),
|
viewModel = hiltViewModel(),
|
||||||
drawerViewModel = drawerViewModel,
|
|
||||||
navBarViewModel = navBarViewModel,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,27 +11,21 @@ import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.BasicButton
|
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
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.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.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.common.ext.basicButton
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeRoute(
|
fun HomeRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
|
||||||
getCurrentScreen: () -> String?,
|
|
||||||
viewModel: HomeViewModel,
|
viewModel: HomeViewModel,
|
||||||
drawerViewModel: DrawerViewModel,
|
drawerActions: DrawerActions,
|
||||||
navBarViewModel: NavigationBarViewModel,
|
navigationBarActions: NavigationBarActions,
|
||||||
) {
|
) {
|
||||||
HomeScreen(
|
HomeScreen(
|
||||||
onStartSessionClick = { viewModel.onStartSessionClick(open) },
|
onStartSessionClick = { viewModel.onStartSessionClick(open) },
|
||||||
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
drawerActions = drawerActions,
|
||||||
navigationBarActions = getNavigationBarActions(navBarViewModel, open, getCurrentScreen),
|
navigationBarActions = navigationBarActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +35,6 @@ fun HomeScreen(
|
||||||
drawerActions: DrawerActions,
|
drawerActions: DrawerActions,
|
||||||
navigationBarActions: NavigationBarActions,
|
navigationBarActions: NavigationBarActions,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(R.string.home),
|
title = resources().getString(R.string.home),
|
||||||
drawerActions = drawerActions,
|
drawerActions = drawerActions,
|
||||||
|
|
|
@ -4,16 +4,18 @@ import androidx.compose.material.Icon
|
||||||
import androidx.compose.material.IconButton
|
import androidx.compose.material.IconButton
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Edit
|
import androidx.compose.material.icons.filled.Edit
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
|
||||||
import be.ugent.sel.studeez.R
|
import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.Headline
|
import be.ugent.sel.studeez.common.composable.Headline
|
||||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
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.DrawerActions
|
||||||
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.NavigationBarActions
|
||||||
import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions
|
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import be.ugent.sel.studeez.R.string as AppText
|
import be.ugent.sel.studeez.R.string as AppText
|
||||||
|
@ -36,14 +38,14 @@ fun getProfileActions(
|
||||||
@Composable
|
@Composable
|
||||||
fun ProfileRoute(
|
fun ProfileRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
|
||||||
getCurrentScreen: () -> String?,
|
|
||||||
viewModel: ProfileViewModel,
|
viewModel: ProfileViewModel,
|
||||||
|
drawerActions: DrawerActions,
|
||||||
|
navigationBarActions: NavigationBarActions,
|
||||||
) {
|
) {
|
||||||
ProfileScreen(
|
ProfileScreen(
|
||||||
profileActions = getProfileActions(viewModel, open),
|
profileActions = getProfileActions(viewModel, open),
|
||||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
drawerActions = drawerActions,
|
||||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open, getCurrentScreen),
|
navigationBarActions = navigationBarActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package be.ugent.sel.studeez.screens.splash
|
package be.ugent.sel.studeez.screens.splash
|
||||||
|
|
||||||
import android.window.SplashScreen
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
|
@ -13,8 +13,6 @@ import be.ugent.sel.studeez.common.composable.DrawerScreenTemplate
|
||||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
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.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.ext.basicButton
|
import be.ugent.sel.studeez.common.ext.basicButton
|
||||||
import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo
|
import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo
|
||||||
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
@ -40,14 +38,12 @@ fun getTimerOverviewActions(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TimerOverviewRoute(
|
fun TimerOverviewRoute(
|
||||||
open: (String) -> Unit,
|
|
||||||
openAndPopUp: (String, String) -> Unit,
|
|
||||||
viewModel: TimerOverviewViewModel,
|
viewModel: TimerOverviewViewModel,
|
||||||
drawerViewModel: DrawerViewModel
|
drawerActions: DrawerActions,
|
||||||
) {
|
) {
|
||||||
TimerOverviewScreen(
|
TimerOverviewScreen(
|
||||||
timerOverviewActions = getTimerOverviewActions(viewModel),
|
timerOverviewActions = getTimerOverviewActions(viewModel),
|
||||||
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp)
|
drawerActions = drawerActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@ package be.ugent.sel.studeez.screens.timer_selection
|
||||||
|
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.material.Text
|
|
||||||
import androidx.compose.material.TextButton
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
@ -11,8 +9,6 @@ import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
|
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
|
||||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
import be.ugent.sel.studeez.common.composable.TimerEntry
|
||||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel
|
|
||||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel
|
|
||||||
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
@ -36,12 +32,8 @@ fun getTimerSelectionActions(
|
||||||
@Composable
|
@Composable
|
||||||
fun TimerSelectionRoute(
|
fun TimerSelectionRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
|
||||||
popUp: () -> Unit,
|
popUp: () -> Unit,
|
||||||
getCurrentScreen: () -> String?,
|
|
||||||
viewModel: TimerSelectionViewModel,
|
viewModel: TimerSelectionViewModel,
|
||||||
drawerViewModel: DrawerViewModel,
|
|
||||||
navBarViewModel: NavigationBarViewModel,
|
|
||||||
) {
|
) {
|
||||||
TimerSelectionScreen(
|
TimerSelectionScreen(
|
||||||
timerSelectionActions = getTimerSelectionActions(viewModel, open),
|
timerSelectionActions = getTimerSelectionActions(viewModel, open),
|
||||||
|
|
Reference in a new issue