From 480f085325fc25f2449d48cd46eb89cd785097b0 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:12:48 +0200 Subject: [PATCH] wrap timeroverview in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 5 +- .../timer_overview/TimerOverviewScreen.kt | 126 +++++++++++------- .../timer_selection/TimerSelectionScreen.kt | 2 +- 3 files changed, 83 insertions(+), 50 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 162eacc..8bda99f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -32,8 +32,7 @@ import be.ugent.sel.studeez.screens.profile.ProfileRoute import be.ugent.sel.studeez.screens.session.SessionScreen import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute -import be.ugent.sel.studeez.screens.splash.SplashScreen -import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen +import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -125,7 +124,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) { - TimerOverviewScreen(open, openAndPopUp) + TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.SESSION_SCREEN) { 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 4872c7e..17824a8 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 @@ -1,6 +1,5 @@ package be.ugent.sel.studeez.screens.timer_overview -import android.annotation.SuppressLint import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -9,7 +8,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.Scaffold import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState @@ -29,53 +27,73 @@ 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.resources import be.ugent.sel.studeez.screens.drawer.DrawerActions -import be.ugent.sel.studeez.screens.drawer.DrawerViewModel +import be.ugent.sel.studeez.screens.drawer.getDrawerActions import be.ugent.sel.studeez.screens.navbar.NavigationBarActions -import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel +import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf + +data class TimerOverviewActions( + val getUserTimers: () -> Flow>, + val getDefaultTimers: () -> List, + val onEditClick: (TimerInfo) -> Unit, +) + +fun getTimerOverviewActions( + viewModel: TimerOverviewViewModel, +): TimerOverviewActions { + return TimerOverviewActions( + getUserTimers = viewModel::getUserTimers, + getDefaultTimers = viewModel::getDefaultTimers, + onEditClick = { viewModel.update(it) }, + ) +} + +@Composable +fun TimerOverviewRoute( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerOverviewViewModel, +) { + TimerOverviewScreen( + timerOverviewActions = getTimerOverviewActions(viewModel), + drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), + navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + ) +} @Composable fun TimerOverviewScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: TimerOverviewViewModel = hiltViewModel() + timerOverviewActions: TimerOverviewActions, + drawerActions: DrawerActions, + navigationBarActions: NavigationBarActions, ) { - val timers = viewModel.getUserTimers().collectAsState(initial = emptyList()) - val drawerViewModel: DrawerViewModel = hiltViewModel() - val drawerActions = DrawerActions( - onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) }, - onTimersClick = { drawerViewModel.onTimersClick(open) }, - onSettingsClick = { drawerViewModel.onSettingsClick(open) }, - onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) }, - onAboutClick = { drawerViewModel.onAboutClick(open) }, - ) - val navigationBarViewModel: NavigationBarViewModel = hiltViewModel() - val navigationBarActions = NavigationBarActions( - onHomeClick = { navigationBarViewModel.onHomeClick(open) }, - onTasksClick = { navigationBarViewModel.onTasksClick(open) }, - onSessionsClick = { navigationBarViewModel.onSessionsClick(open) }, - onProfileClick = { navigationBarViewModel.onProfileClick(open) }, - ) + val timers = timerOverviewActions.getUserTimers().collectAsState(initial = emptyList()) + + // TODO moet geen primary screen zijn: geen navbar nodig PrimaryScreenTemplate( title = resources().getString(R.string.timers), drawerActions = drawerActions, navigationBarActions = navigationBarActions, ) { - Column { LazyColumn( verticalArrangement = Arrangement.spacedBy(7.dp) ) { // Default Timers, cannot be edited - items(viewModel.getDefaultTimers()) { - TimerEntry(timerInfo = it, canDisplay = false) + items(timerOverviewActions.getDefaultTimers()) { + TimerEntry(timerInfo = it, showButton = false) } - // User timers, can be edited items(timers.value) { - TimerEntry(timerInfo = it, true, R.string.edit) { timerInfo -> - viewModel.update(timerInfo) - } + TimerEntry( + timerInfo = it, + true, + R.string.edit, + onEditClick = timerOverviewActions.onEditClick + ) + } } BasicButton(R.string.add_timer, Modifier.basicButton()) { @@ -89,9 +107,9 @@ fun TimerOverviewScreen( @Composable fun TimerEntry( timerInfo: TimerInfo, - canDisplay: Boolean, + showButton: Boolean, @StringRes buttonName: Int = -1, - buttonFunction: (TimerInfo) -> Unit = {} + onEditClick: (TimerInfo) -> Unit = {} ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -112,29 +130,45 @@ fun TimerEntry( fontSize = 15.sp ) } - if (canDisplay) { + if (showButton) { StealthButton(buttonName) { - buttonFunction(timerInfo) + onEditClick(timerInfo) } } } } -@SuppressLint("UnusedMaterialScaffoldPaddingParameter") @Preview @Composable fun TimerEntryPreview() { val timerInfo = CustomTimerInfo( - "my preview timer", - "This is the description of the timer", - 60 + "my preview timer", "This is the description of the timer", 60 ) - Scaffold() { - Column() { - TimerEntry(timerInfo = timerInfo, true, buttonName = R.string.edit) { } - TimerEntry(timerInfo = timerInfo, true, buttonName = R.string.edit) { } - TimerEntry(timerInfo = timerInfo, true, buttonName = R.string.edit) { } - } - } -} \ No newline at end of file + TimerEntry(timerInfo = timerInfo, true, buttonName = R.string.edit) { } +} + +@Preview +@Composable +fun TimerDefaultEntryPreview() { + val timerInfo = CustomTimerInfo( + "my preview timer", "This is the description of the timer", 60 + ) + TimerEntry(timerInfo = timerInfo, false, buttonName = R.string.edit) { } +} + +@Preview +@Composable +fun TimerOverviewPreview() { + val customTimer = CustomTimerInfo( + "my preview timer", "This is the description of the timer", 60 + ) + TimerOverviewScreen( + timerOverviewActions = TimerOverviewActions( + { flowOf(listOf()) }, + { listOf(customTimer, customTimer) }, + {}), + drawerActions = DrawerActions({}, {}, {}, {}, {}), + navigationBarActions = NavigationBarActions({}, {}, {}, {}) + ) +} 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 e6a80c8..d9d039b 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 @@ -50,7 +50,7 @@ fun TimerSelectionScreen( items(timers.value) { TimerEntry( timerInfo = it, - canDisplay = true, + showButton = true, buttonName = R.string.start ) { timerInfo -> viewModel.startSession(open, timerInfo)