From 2b2cc879b3d225a75d81eb897d06c37163625d0d Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 21:52:49 +0200 Subject: [PATCH 01/19] refactor drawer to not need viewmodel in constructor --- .idea/compiler.xml | 2 +- .idea/kotlinc.xml | 2 +- .idea/misc.xml | 2 +- .../screens/drawer/DrawerComposable.kt | 70 +++++++++---------- 4 files changed, 36 insertions(+), 40 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb7f4a8..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 7e42cec..ff9696e 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 704c883..0ad17cb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt index 296fd94..3ffdfe7 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt @@ -1,7 +1,12 @@ package be.ugent.sel.studeez.screens.drawer import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons @@ -14,8 +19,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.viewmodel.compose.viewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme @@ -23,56 +26,53 @@ import be.ugent.sel.studeez.ui.theme.StudeezTheme @Composable fun Drawer( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: DrawerViewModel = hiltViewModel() + onHomeButtonClick: () -> Unit, + onTimersClick: () -> Unit, + onSettingsClick: () -> Unit, + onLogoutClick: () -> Unit, + onAboutClick: () -> Unit, ) { - Column ( + Column( modifier = Modifier.fillMaxWidth() ) { - Column ( - modifier = Modifier.fillMaxWidth().weight(1f) + Column( + modifier = Modifier + .fillMaxWidth() + .weight(1f) ) { DrawerEntry( icon = Icons.Default.Home, - text = resources().getString(R.string.home) - ) { - viewModel.onHomeButtonClick(open) - } + text = resources().getString(R.string.home), + onClick = onHomeButtonClick, + ) DrawerEntry( icon = ImageVector.vectorResource(id = R.drawable.ic_timer), - text = resources().getString(R.string.timers) - ) { - viewModel.onTimersClick(open) - } + text = resources().getString(R.string.timers), + onClick = onTimersClick, + ) DrawerEntry( icon = Icons.Default.Settings, - text = resources().getString(R.string.settings) - ) { - viewModel.onSettingsClick(open) - } + text = resources().getString(R.string.settings), + onClick = onSettingsClick, + ) DrawerEntry( icon = ImageVector.vectorResource(id = R.drawable.ic_logout), - text = resources().getString(R.string.log_out) - ) { - viewModel.onLogoutClick(openAndPopUp) - } + text = resources().getString(R.string.log_out), + onClick = onLogoutClick, + ) } DrawerEntry( icon = Icons.Outlined.Info, - text = resources().getString(R.string.about) - ) { - viewModel.onAboutClick(open) - } + text = resources().getString(R.string.about), + onClick = onAboutClick, + ) } } @Composable fun DrawerEntry( - icon: ImageVector, - text: String, - onClick: () -> Unit + icon: ImageVector, text: String, onClick: () -> Unit ) { Row( horizontalArrangement = Arrangement.Center, @@ -101,10 +101,6 @@ fun DrawerEntry( @Composable fun DrawerPreview() { StudeezTheme { - Drawer( - { _, -> {} }, - { _, _ -> {} }, - hiltViewModel() - ) + Drawer({}, {}, {}, {}, {}) } } \ No newline at end of file From 9da9873b583a8637eb927577af07d9c2ff46982f Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 22:04:48 +0200 Subject: [PATCH 02/19] refactor primaryScreenTemplate to not create drawerViewModel --- .../composable/PrimaryScreenComposable.kt | 62 ++++++++++++------- .../screens/drawer/DrawerComposable.kt | 26 ++++---- .../sel/studeez/screens/home/HomeScreen.kt | 39 ++++++++++-- .../studeez/screens/profile/ProfileScreen.kt | 12 +++- .../timer_overview/TimerOverviewScreen.kt | 14 ++++- .../timer_selection/TimerSelectionScreen.kt | 12 +++- 6 files changed, 122 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt index df9b346..d553f64 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt @@ -2,16 +2,24 @@ package be.ugent.sel.studeez.common.composable import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.RowScope -import androidx.compose.material.* +import androidx.compose.material.FabPosition +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.Scaffold +import androidx.compose.material.ScaffoldState +import androidx.compose.material.Text +import androidx.compose.material.TopAppBar import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Menu +import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.R import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.screens.drawer.Drawer +import be.ugent.sel.studeez.screens.drawer.DrawerActions import be.ugent.sel.studeez.screens.navbar.NavigationBar import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -22,6 +30,7 @@ fun PrimaryScreenTemplate( title: String, open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, + drawerActions: DrawerActions, action: @Composable RowScope.() -> Unit = {}, content: @Composable (PaddingValues) -> Unit ) { @@ -31,23 +40,25 @@ fun PrimaryScreenTemplate( Scaffold( scaffoldState = scaffoldState, - topBar = { TopAppBar( - title = { Text(text = title) }, - navigationIcon = { - IconButton(onClick = { - coroutineScope.launch { scaffoldState.drawerState.open() } - }) { - Icon( - imageVector = Icons.Default.Menu, - contentDescription = resources().getString(R.string.menu) - ) - } - }, - actions = action - ) }, + topBar = { + TopAppBar( + title = { Text(text = title) }, + navigationIcon = { + IconButton(onClick = { + coroutineScope.launch { scaffoldState.drawerState.open() } + }) { + Icon( + imageVector = Icons.Default.Menu, + contentDescription = resources().getString(R.string.menu) + ) + } + }, + actions = action + ) + }, drawerContent = { - Drawer(open, openAndPopUp) + Drawer(drawerActions) }, bottomBar = { NavigationBar(open) }, @@ -65,14 +76,17 @@ fun PrimaryScreenPreview() { StudeezTheme { PrimaryScreenTemplate( "Preview screen", - { _ -> {}}, - { _, _ -> {}}, - { IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Default.Edit, - contentDescription = "Edit" - ) - }} + {}, + { _, _ -> run {} }, + DrawerActions({}, {}, {}, {}, {}), + { + IconButton(onClick = { /*TODO*/ }) { + Icon( + imageVector = Icons.Default.Edit, + contentDescription = "Edit" + ) + } + }, ) {} } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt index 3ffdfe7..1ab739f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt @@ -23,14 +23,17 @@ import be.ugent.sel.studeez.R import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme +data class DrawerActions( + val onHomeButtonClick: () -> Unit, + val onTimersClick: () -> Unit, + val onSettingsClick: () -> Unit, + val onLogoutClick: () -> Unit, + val onAboutClick: () -> Unit, +) @Composable fun Drawer( - onHomeButtonClick: () -> Unit, - onTimersClick: () -> Unit, - onSettingsClick: () -> Unit, - onLogoutClick: () -> Unit, - onAboutClick: () -> Unit, + drawerActions: DrawerActions, ) { Column( modifier = Modifier.fillMaxWidth() @@ -43,29 +46,29 @@ fun Drawer( DrawerEntry( icon = Icons.Default.Home, text = resources().getString(R.string.home), - onClick = onHomeButtonClick, + onClick = drawerActions.onHomeButtonClick, ) DrawerEntry( icon = ImageVector.vectorResource(id = R.drawable.ic_timer), text = resources().getString(R.string.timers), - onClick = onTimersClick, + onClick = drawerActions.onTimersClick, ) DrawerEntry( icon = Icons.Default.Settings, text = resources().getString(R.string.settings), - onClick = onSettingsClick, + onClick = drawerActions.onSettingsClick, ) DrawerEntry( icon = ImageVector.vectorResource(id = R.drawable.ic_logout), text = resources().getString(R.string.log_out), - onClick = onLogoutClick, + onClick = drawerActions.onLogoutClick, ) } DrawerEntry( icon = Icons.Outlined.Info, text = resources().getString(R.string.about), - onClick = onAboutClick, + onClick = drawerActions.onAboutClick, ) } } @@ -100,7 +103,8 @@ fun DrawerEntry( @Preview @Composable fun DrawerPreview() { + val drawerActions = DrawerActions({}, {}, {}, {}, {}) StudeezTheme { - Drawer({}, {}, {}, {}, {}) + Drawer(drawerActions) } } \ 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 7ca2559..3d5b7f4 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 @@ -6,37 +6,68 @@ import androidx.compose.material.icons.Icons 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.ext.basicButton import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.drawer.DrawerActions +import be.ugent.sel.studeez.screens.drawer.DrawerViewModel + +@Composable +fun HomeRoute( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: HomeViewModel, +) { + HomeScreen( + open = open, + openAndPopUp = openAndPopUp, + onStartSessionClick = { viewModel.onStartSessionClick(open) } + ) +} @Composable fun HomeScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, - viewModel: HomeViewModel = hiltViewModel() + onStartSessionClick: () -> Unit, ) { + 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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.home), open = open, openAndPopUp = openAndPopUp, + drawerActions = drawerActions, action = { FriendsAction() } ) { BasicButton(R.string.start_session, Modifier.basicButton()) { - viewModel.onStartSessionClick(open) + onStartSessionClick() } } } @Composable -fun FriendsAction () { +fun FriendsAction() { IconButton(onClick = { /*TODO*/ }) { Icon( imageVector = Icons.Default.Person, contentDescription = resources().getString(R.string.friends) ) } -} \ No newline at end of file +} + +@Preview +@Composable +fun HomeScreenPreview() { + HomeScreen(open = {}, openAndPopUp = { _, _ -> run {} }, onStartSessionClick = {}) +} diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt index 6ec4a01..b2c5af6 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt @@ -10,6 +10,8 @@ import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.Headline import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate 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.R.string as AppText @Composable @@ -22,11 +24,19 @@ fun ProfileScreen( LaunchedEffect(key1 = Unit) { username = viewModel.getUsername() } - + 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) }, + ) PrimaryScreenTemplate( title = resources().getString(AppText.profile), open = open, openAndPopUp = openAndPopUp, + drawerActions = drawerActions, action = { EditAction { viewModel.onEditProfileClick(open) } } ) { Headline(text = (username ?: resources().getString(R.string.no_username))) 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 fcff7fe..21c602e 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 @@ -28,6 +28,8 @@ 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.TimerInfo import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.drawer.DrawerActions +import be.ugent.sel.studeez.screens.drawer.DrawerViewModel @Composable fun TimerOverviewScreen( @@ -37,11 +39,19 @@ fun TimerOverviewScreen( ) { 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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.timers), open = open, - openAndPopUp = openAndPopUp + openAndPopUp = openAndPopUp, + drawerActions = drawerActions, ) { Column { 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 8e8df37..583aefd 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 @@ -9,6 +9,8 @@ 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.resources +import be.ugent.sel.studeez.screens.drawer.DrawerActions +import be.ugent.sel.studeez.screens.drawer.DrawerViewModel import be.ugent.sel.studeez.screens.timer_overview.TimerEntry @Composable @@ -19,11 +21,19 @@ fun TimerSelectionScreen( ) { val timers = viewModel.getAllTimers().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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.timers), open = open, openAndPopUp = openAndPopUp, + drawerActions = drawerActions, ) { LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { From 05c37b4168b852ff3f02cf505a0c723a0b2365fc Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 22:16:24 +0200 Subject: [PATCH 03/19] refactor navbar to not need viewmodel in constructor --- .../composable/PrimaryScreenComposable.kt | 9 ++-- .../sel/studeez/screens/home/HomeScreen.kt | 12 +++++- .../screens/navbar/NavigationBarComposable.kt | 41 ++++++++++++------- .../studeez/screens/profile/ProfileScreen.kt | 12 +++++- .../timer_overview/TimerOverviewScreen.kt | 12 +++++- .../timer_selection/TimerSelectionScreen.kt | 12 +++++- 6 files changed, 71 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt index d553f64..8fbb54b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt @@ -21,6 +21,7 @@ import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.screens.drawer.Drawer import be.ugent.sel.studeez.screens.drawer.DrawerActions import be.ugent.sel.studeez.screens.navbar.NavigationBar +import be.ugent.sel.studeez.screens.navbar.NavigationBarActions import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -28,9 +29,8 @@ import kotlinx.coroutines.launch @Composable fun PrimaryScreenTemplate( title: String, - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, drawerActions: DrawerActions, + navigationBarActions: NavigationBarActions, action: @Composable RowScope.() -> Unit = {}, content: @Composable (PaddingValues) -> Unit ) { @@ -61,7 +61,7 @@ fun PrimaryScreenTemplate( Drawer(drawerActions) }, - bottomBar = { NavigationBar(open) }, + bottomBar = { NavigationBar(navigationBarActions) }, floatingActionButtonPosition = FabPosition.Center, isFloatingActionButtonDocked = true, floatingActionButton = { CollapsedAddButton() } @@ -76,9 +76,8 @@ fun PrimaryScreenPreview() { StudeezTheme { PrimaryScreenTemplate( "Preview screen", - {}, - { _, _ -> run {} }, DrawerActions({}, {}, {}, {}, {}), + NavigationBarActions({}, {}, {}, {}), { IconButton(onClick = { /*TODO*/ }) { Icon( 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 3d5b7f4..7abc9bc 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 @@ -15,6 +15,8 @@ import be.ugent.sel.studeez.common.ext.basicButton 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.navbar.NavigationBarActions +import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel @Composable fun HomeRoute( @@ -43,11 +45,17 @@ fun HomeScreen( 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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.home), - open = open, - openAndPopUp = openAndPopUp, drawerActions = drawerActions, + navigationBarActions = navigationBarActions, action = { FriendsAction() } ) { BasicButton(R.string.start_session, Modifier.basicButton()) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt index 5c5dee1..d068973 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt @@ -12,16 +12,20 @@ import androidx.compose.material.icons.outlined.DateRange import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme import be.ugent.sel.studeez.R.string as AppText +data class NavigationBarActions( + val onHomeClick: () -> Unit, + val onTasksClick: () -> Unit, + val onSessionsClick: () -> Unit, + val onProfileClick: () -> Unit, +) @Composable fun NavigationBar( - open: (String) -> Unit, - viewModel: NavigationBarViewModel = hiltViewModel() + navigationBarActions: NavigationBarActions, ) { // TODO Pass functions and new screens. // TODO Pass which screen is selected. @@ -33,31 +37,43 @@ fun NavigationBar( icon = { Icon(imageVector = Icons.Default.List, resources().getString(AppText.home)) }, label = { Text(text = resources().getString(AppText.home)) }, selected = false, // TODO - onClick = { viewModel.onHomeClick(open) } + onClick = navigationBarActions.onHomeClick ) BottomNavigationItem( - icon = { Icon(imageVector = Icons.Default.Check, resources().getString(AppText.tasks)) }, + icon = { + Icon( + imageVector = Icons.Default.Check, resources().getString(AppText.tasks) + ) + }, label = { Text(text = resources().getString(AppText.tasks)) }, selected = false, // TODO - onClick = { viewModel.onTasksClick(open) } + onClick = navigationBarActions.onTasksClick ) // Hack to space the entries in the navigation bar, make space for fab BottomNavigationItem(icon = {}, onClick = {}, selected = false) BottomNavigationItem( - icon = { Icon(imageVector = Icons.Outlined.DateRange, resources().getString(AppText.sessions)) }, + icon = { + Icon( + imageVector = Icons.Outlined.DateRange, resources().getString(AppText.sessions) + ) + }, label = { Text(text = resources().getString(AppText.sessions)) }, selected = false, // TODO - onClick = { viewModel.onSessionsClick(open) } + onClick = navigationBarActions.onSessionsClick ) BottomNavigationItem( - icon = { Icon(imageVector = Icons.Default.Person, resources().getString(AppText.profile)) }, + icon = { + Icon( + imageVector = Icons.Default.Person, resources().getString(AppText.profile) + ) + }, label = { Text(text = resources().getString(AppText.profile)) }, selected = false, // TODO - onClick = { viewModel.onProfileClick(open) } + onClick = navigationBarActions.onProfileClick ) } @@ -67,9 +83,6 @@ fun NavigationBar( @Composable fun NavigationBarPreview() { StudeezTheme { - NavigationBar( - { _ -> {} }, - hiltViewModel() - ) + NavigationBar(NavigationBarActions({}, {}, {}, {})) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt index b2c5af6..c6c50e3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt @@ -12,6 +12,8 @@ import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate 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.navbar.NavigationBarActions +import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel import be.ugent.sel.studeez.R.string as AppText @Composable @@ -32,11 +34,17 @@ fun ProfileScreen( 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) }, + ) PrimaryScreenTemplate( title = resources().getString(AppText.profile), - open = open, - openAndPopUp = openAndPopUp, drawerActions = drawerActions, + navigationBarActions = navigationBarActions, action = { EditAction { viewModel.onEditProfileClick(open) } } ) { Headline(text = (username ?: resources().getString(R.string.no_username))) 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 21c602e..4872c7e 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 @@ -30,6 +30,8 @@ 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.navbar.NavigationBarActions +import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel @Composable fun TimerOverviewScreen( @@ -47,11 +49,17 @@ fun TimerOverviewScreen( 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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.timers), - open = open, - openAndPopUp = openAndPopUp, drawerActions = drawerActions, + navigationBarActions = navigationBarActions, ) { Column { 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 583aefd..e6a80c8 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 @@ -11,6 +11,8 @@ import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate 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.navbar.NavigationBarActions +import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel import be.ugent.sel.studeez.screens.timer_overview.TimerEntry @Composable @@ -29,11 +31,17 @@ fun TimerSelectionScreen( 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) }, + ) PrimaryScreenTemplate( title = resources().getString(R.string.timers), - open = open, - openAndPopUp = openAndPopUp, drawerActions = drawerActions, + navigationBarActions = navigationBarActions, ) { LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { From 8fc4ac8cf156c07035966623caf210d44e221dd4 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 22:28:46 +0200 Subject: [PATCH 04/19] wrap homescreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 25 +++++++++----- .../screens/drawer/DrawerComposable.kt | 14 ++++++++ .../sel/studeez/screens/home/HomeScreen.kt | 34 +++++++------------ .../screens/navbar/NavigationBarComposable.kt | 12 +++++++ 4 files changed, 55 insertions(+), 30 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 04b4914..ce3e322 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -2,7 +2,13 @@ package be.ugent.sel.studeez import android.content.res.Resources import androidx.compose.foundation.layout.padding -import androidx.compose.material.* +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.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember @@ -11,6 +17,7 @@ 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.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost @@ -18,11 +25,11 @@ 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.home.HomeScreen +import be.ugent.sel.studeez.screens.home.HomeRoute import be.ugent.sel.studeez.screens.log_in.LoginScreen -import be.ugent.sel.studeez.screens.session.SessionScreen import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileScreen +import be.ugent.sel.studeez.screens.session.SessionScreen import be.ugent.sel.studeez.screens.sign_up.SignUpScreen import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen @@ -85,12 +92,12 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { appState.popUp() } - val open: (String) -> Unit = { - route -> appState.navigate(route) + val open: (String) -> Unit = { route -> + appState.navigate(route) } - val openAndPopUp: (String, String) -> Unit = { - route, popUp -> appState.navigateAndPopUp(route, popUp) + val openAndPopUp: (String, String) -> Unit = { route, popUp -> + appState.navigateAndPopUp(route, popUp) } composable(StudeezDestinations.SPLASH_SCREEN) { @@ -106,7 +113,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.HOME_SCREEN) { - HomeScreen(open, openAndPopUp) + HomeRoute(open, openAndPopUp, viewModel = hiltViewModel()) } // TODO Tasks screen @@ -123,7 +130,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { composable(StudeezDestinations.SESSION_SCREEN) { SessionScreen(open, openAndPopUp) } - + // TODO Timers screen // TODO Settings screen diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt index 1ab739f..9bf0d20 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt @@ -31,6 +31,20 @@ data class DrawerActions( val onAboutClick: () -> Unit, ) +fun getDrawerActions( + drawerViewModel: DrawerViewModel, + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, +): DrawerActions { + return DrawerActions( + onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) }, + onTimersClick = { drawerViewModel.onTimersClick(open) }, + onSettingsClick = { drawerViewModel.onSettingsClick(open) }, + onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) }, + onAboutClick = { drawerViewModel.onAboutClick(open) }, + ) +} + @Composable fun Drawer( drawerActions: DrawerActions, 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 7abc9bc..e864032 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 @@ -15,8 +15,10 @@ import be.ugent.sel.studeez.common.ext.basicButton 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 @Composable fun HomeRoute( @@ -25,33 +27,19 @@ fun HomeRoute( viewModel: HomeViewModel, ) { HomeScreen( - open = open, - openAndPopUp = openAndPopUp, - onStartSessionClick = { viewModel.onStartSessionClick(open) } + onStartSessionClick = { viewModel.onStartSessionClick(open) }, + drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), + navigationBarActions = getNavigationBarActions(hiltViewModel(), open), ) } @Composable fun HomeScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, onStartSessionClick: () -> Unit, + drawerActions: DrawerActions, + navigationBarActions: NavigationBarActions, ) { - 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) }, - ) + PrimaryScreenTemplate( title = resources().getString(R.string.home), drawerActions = drawerActions, @@ -77,5 +65,9 @@ fun FriendsAction() { @Preview @Composable fun HomeScreenPreview() { - HomeScreen(open = {}, openAndPopUp = { _, _ -> run {} }, onStartSessionClick = {}) + HomeScreen( + onStartSessionClick = {}, + drawerActions = DrawerActions({}, {}, {}, {}, {}), + navigationBarActions = NavigationBarActions({}, {}, {}, {}) + ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt b/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt index d068973..2c62f29 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt @@ -23,6 +23,18 @@ data class NavigationBarActions( val onProfileClick: () -> Unit, ) +fun getNavigationBarActions( + navigationBarViewModel: NavigationBarViewModel, + open: (String) -> Unit, +): NavigationBarActions { + return NavigationBarActions( + onHomeClick = { navigationBarViewModel.onHomeClick(open) }, + onTasksClick = { navigationBarViewModel.onTasksClick(open) }, + onSessionsClick = { navigationBarViewModel.onSessionsClick(open) }, + onProfileClick = { navigationBarViewModel.onProfileClick(open) }, + ) +} + @Composable fun NavigationBar( navigationBarActions: NavigationBarActions, From de42f090ef40955f83b13f6e8e1ba0d32397f2a4 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 22:48:27 +0200 Subject: [PATCH 05/19] wrap loginscreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../sel/studeez/screens/log_in/LoginScreen.kt | 84 ++++++++++++++++--- .../studeez/screens/log_in/LoginViewModel.kt | 2 +- 3 files changed, 74 insertions(+), 15 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 ce3e322..d0e7db7 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -26,6 +26,7 @@ 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.home.HomeRoute +import be.ugent.sel.studeez.screens.log_in.LoginRoute import be.ugent.sel.studeez.screens.log_in.LoginScreen import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileScreen @@ -105,7 +106,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.LOGIN_SCREEN) { - LoginScreen(openAndPopUp) + LoginRoute(openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.SIGN_UP_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt index 2762abc..fe7524b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.common.composable.* import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.common.ext.fieldModifier @@ -18,14 +18,48 @@ import be.ugent.sel.studeez.common.ext.textButton import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.R.string as AppText +data class LoginScreenActions( + val onEmailChange: (String) -> Unit, + val onPasswordChange: (String) -> Unit, + val onSignUpClick: () -> Unit, + val onSignInClick: () -> Unit, + val onForgotPasswordClick: () -> Unit, +) + +fun getLoginScreenActions( + viewModel: LoginViewModel, + openAndPopUp: (String, String) -> Unit, +): LoginScreenActions { + return LoginScreenActions( + onEmailChange = { viewModel.onEmailChange(it) }, + onPasswordChange = { viewModel.onPasswordChange(it) }, + onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) }, + onSignInClick = { viewModel.onSignInClick(openAndPopUp) }, + onForgotPasswordClick = { viewModel.onForgotPasswordClick() } + ) +} + @Composable -fun LoginScreen( +fun LoginRoute( openAndPopUp: (String, String) -> Unit, modifier: Modifier = Modifier, - viewModel: LoginViewModel = hiltViewModel() + viewModel: LoginViewModel, ) { val uiState by viewModel.uiState + LoginScreen( + modifier = modifier, + uiState = uiState, + loginScreenActions = getLoginScreenActions(viewModel = viewModel, openAndPopUp) + ) +} + +@Composable +fun LoginScreen( + modifier: Modifier = Modifier, + uiState: LoginUiState, + loginScreenActions: LoginScreenActions, +) { SimpleScreenTemplate(title = resources().getString(AppText.sign_in)) { Column( modifier = modifier @@ -35,18 +69,42 @@ fun LoginScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - EmailField(uiState.email, viewModel::onEmailChange, Modifier.fieldModifier()) - PasswordField(uiState.password, viewModel::onPasswordChange, Modifier.fieldModifier()) + EmailField( + uiState.email, + loginScreenActions.onEmailChange, + Modifier.fieldModifier() + ) + PasswordField( + uiState.password, + loginScreenActions.onPasswordChange, + Modifier.fieldModifier() + ) + BasicButton( + AppText.sign_in, + Modifier.basicButton(), + onClick = loginScreenActions.onSignInClick, + ) - BasicButton(AppText.sign_in, Modifier.basicButton()) { viewModel.onSignInClick(openAndPopUp) } + BasicTextButton( + AppText.not_already_user, + Modifier.textButton(), + action = loginScreenActions.onSignUpClick, + ) - BasicTextButton(AppText.not_already_user, Modifier.textButton()) { - viewModel.onNotAlreadyUser(openAndPopUp) - } - - BasicTextButton(AppText.forgot_password, Modifier.textButton()) { - viewModel.onForgotPasswordClick() - } + BasicTextButton( + AppText.forgot_password, + Modifier.textButton(), + action = loginScreenActions.onForgotPasswordClick, + ) } } +} + +@Preview +@Composable +fun LoginScreenPreview() { + LoginScreen( + uiState = LoginUiState(), + loginScreenActions = LoginScreenActions({}, {}, {}, {}, {}) + ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt index cf3a72d..c7e88fa 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt @@ -63,7 +63,7 @@ class LoginViewModel @Inject constructor( } } - fun onNotAlreadyUser(openAndPopUp: (String, String) -> Unit) { + fun onSignUpClick(openAndPopUp: (String, String) -> Unit) { openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) } } \ No newline at end of file From 90170eb635f1b56c6520fa84f5b023d62a092888 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 23:03:01 +0200 Subject: [PATCH 06/19] wrap profileEditScreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../screens/profile/ProfileEditScreen.kt | 61 ++++++++++++++----- 2 files changed, 47 insertions(+), 17 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 d0e7db7..3079780 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -28,6 +28,7 @@ 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.log_in.LoginScreen +import be.ugent.sel.studeez.screens.profile.EditProfileRoute import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.session.SessionScreen @@ -137,7 +138,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { // Edit screens composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { - EditProfileScreen(goBack, openAndPopUp) + EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileEditScreen.kt index eb12ac7..116a5fb 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileEditScreen.kt @@ -14,14 +14,43 @@ import be.ugent.sel.studeez.common.ext.textButton import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme +data class EditProfileActions( + val onUserNameChange: (String) -> Unit, + val onSaveClick: () -> Unit, + val onDeleteClick: () -> Unit +) + +fun getEditProfileActions( + viewModel: ProfileEditViewModel, + openAndPopUp: (String, String) -> Unit, +): EditProfileActions { + return EditProfileActions( + onUserNameChange = { viewModel.onUsernameChange(it) }, + onSaveClick = { viewModel.onSaveClick() }, + onDeleteClick = { viewModel.onDeleteClick(openAndPopUp) }, + ) +} + +@Composable +fun EditProfileRoute( + goBack: () -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: ProfileEditViewModel, +) { + val uiState by viewModel.uiState + EditProfileScreen( + goBack = goBack, + uiState = uiState, + editProfileActions = getEditProfileActions(viewModel, openAndPopUp) + ) +} + @Composable fun EditProfileScreen( goBack: () -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: ProfileEditViewModel = hiltViewModel() + uiState: ProfileEditUiState, + editProfileActions: EditProfileActions, ) { - val uiState by viewModel.uiState - SecondaryScreenTemplate( title = resources().getString(R.string.editing_profile), popUp = goBack @@ -29,16 +58,19 @@ fun EditProfileScreen( Column { LabelledInputField( value = uiState.username, - onNewValue = viewModel::onUsernameChange, + onNewValue = editProfileActions.onUserNameChange, label = R.string.username ) - - BasicTextButton(text = R.string.save, Modifier.textButton()) { - viewModel.onSaveClick() - } - BasicTextButton(text = R.string.delete_profile, Modifier.textButton()) { - viewModel.onDeleteClick(openAndPopUp) - } + BasicTextButton( + text = R.string.save, + Modifier.textButton(), + action = editProfileActions.onSaveClick + ) + BasicTextButton( + text = R.string.delete_profile, + Modifier.textButton(), + action = editProfileActions.onDeleteClick + ) } } } @@ -47,9 +79,6 @@ fun EditProfileScreen( @Composable fun EditProfileScreenComposable() { StudeezTheme { - EditProfileScreen ( - {}, - {_, _ -> {}} - ) + EditProfileScreen({}, ProfileEditUiState(), EditProfileActions({}, {}, {})) } } \ No newline at end of file From 3fd191cccc3d581a3a9e083a37c7e7d05d72a47a Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 23:25:00 +0200 Subject: [PATCH 07/19] wrap profilescreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../studeez/screens/profile/ProfileScreen.kt | 76 +++++++++++++------ 2 files changed, 55 insertions(+), 24 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 3079780..0676260 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -30,6 +30,7 @@ import be.ugent.sel.studeez.screens.log_in.LoginRoute import be.ugent.sel.studeez.screens.log_in.LoginScreen import be.ugent.sel.studeez.screens.profile.EditProfileRoute import be.ugent.sel.studeez.screens.profile.EditProfileScreen +import be.ugent.sel.studeez.screens.profile.ProfileRoute import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.session.SessionScreen import be.ugent.sel.studeez.screens.sign_up.SignUpScreen @@ -122,7 +123,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { // TODO Sessions screen composable(StudeezDestinations.PROFILE_SCREEN) { - ProfileScreen(open, openAndPopUp) + ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt index c6c50e3..f6ae487 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt @@ -4,48 +4,68 @@ import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.icons.Icons 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.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.Headline import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate 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.CoroutineScope import be.ugent.sel.studeez.R.string as AppText +data class ProfileActions( + val getUsername: suspend CoroutineScope.() -> String?, + val onEditProfileClick: () -> Unit, +) + +fun getProfileActions( + viewModel: ProfileViewModel, + open: (String) -> Unit, +): ProfileActions { + return ProfileActions( + getUsername = { viewModel.getUsername() }, + onEditProfileClick = { viewModel.onEditProfileClick(open) }, + ) +} + +@Composable +fun ProfileRoute( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: ProfileViewModel, +) { + ProfileScreen( + profileActions = getProfileActions(viewModel, open), + drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), + navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + ) +} + @Composable fun ProfileScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: ProfileViewModel = hiltViewModel() + profileActions: ProfileActions, + drawerActions: DrawerActions, + navigationBarActions: NavigationBarActions, ) { var username: String? by remember { mutableStateOf("") } LaunchedEffect(key1 = Unit) { - username = viewModel.getUsername() + username = profileActions.getUsername(this) } - 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) }, - ) PrimaryScreenTemplate( title = resources().getString(AppText.profile), drawerActions = drawerActions, navigationBarActions = navigationBarActions, - action = { EditAction { viewModel.onEditProfileClick(open) } } + action = { EditAction(onClick = profileActions.onEditProfileClick) } ) { Headline(text = (username ?: resources().getString(R.string.no_username))) } @@ -62,4 +82,14 @@ fun EditAction( ) } +} + +@Preview +@Composable +fun ProfileScreenPreview() { + ProfileScreen( + profileActions = ProfileActions({ null }, {}), + drawerActions = DrawerActions({}, {}, {}, {}, {}), + navigationBarActions = NavigationBarActions({}, {}, {}, {}) + ) } \ No newline at end of file From 95140e17393e78f2ef363d8170da9dca7b56bac0 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 23:39:54 +0200 Subject: [PATCH 08/19] wrap signupscreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 7 +- .../studeez/screens/sign_up/SignUpScreen.kt | 90 ++++++++++++++----- .../screens/sign_up/SignUpViewModel.kt | 2 +- 3 files changed, 71 insertions(+), 28 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 0676260..196b468 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -27,13 +27,10 @@ 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.log_in.LoginScreen import be.ugent.sel.studeez.screens.profile.EditProfileRoute -import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileRoute -import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.session.SessionScreen -import be.ugent.sel.studeez.screens.sign_up.SignUpScreen +import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen @@ -112,7 +109,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.SIGN_UP_SCREEN) { - SignUpScreen(openAndPopUp) + SignUpRoute(openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.HOME_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt index 7515117..038bee2 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt @@ -10,23 +10,64 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel -import be.ugent.sel.studeez.common.composable.* +import androidx.compose.ui.tooling.preview.Preview +import be.ugent.sel.studeez.common.composable.BasicButton +import be.ugent.sel.studeez.common.composable.BasicTextButton +import be.ugent.sel.studeez.common.composable.EmailField +import be.ugent.sel.studeez.common.composable.PasswordField +import be.ugent.sel.studeez.common.composable.RepeatPasswordField +import be.ugent.sel.studeez.common.composable.SimpleScreenTemplate +import be.ugent.sel.studeez.common.composable.UsernameField import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.common.ext.fieldModifier import be.ugent.sel.studeez.common.ext.textButton import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.R.string as AppText +data class SignUpActions( + val onUserNameChange: (String) -> Unit, + val onEmailChange: (String) -> Unit, + val onPasswordChange: (String) -> Unit, + val onRepeatPasswordChange: (String) -> Unit, + val onSignUpClick: () -> Unit, + val onLoginClick: () -> Unit, +) + +fun getSignUpActions( + viewModel: SignUpViewModel, + openAndPopUp: (String, String) -> Unit, +): SignUpActions { + return SignUpActions( + onUserNameChange = { viewModel.onUsernameChange(it) }, + onEmailChange = { viewModel.onEmailChange(it) }, + onPasswordChange = { viewModel.onPasswordChange(it) }, + onRepeatPasswordChange = { viewModel.onRepeatPasswordChange(it) }, + onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) }, + onLoginClick = { viewModel.onLoginClick(openAndPopUp) }, + ) +} + @Composable -fun SignUpScreen( +fun SignUpRoute( openAndPopUp: (String, String) -> Unit, modifier: Modifier = Modifier, - viewModel: SignUpViewModel = hiltViewModel() + viewModel: SignUpViewModel, ) { val uiState by viewModel.uiState - val fieldModifier = Modifier.fieldModifier() + SignUpScreen( + modifier = modifier, + uiState, + getSignUpActions(viewModel, openAndPopUp) + ) +} +@Composable +fun SignUpScreen( + modifier: Modifier = Modifier, + uiState: SignUpUiState, + signUpActions: SignUpActions, +) { + val fieldModifier = Modifier.fieldModifier() SimpleScreenTemplate(title = resources().getString(AppText.create_account)) { Column( modifier = modifier @@ -36,40 +77,45 @@ fun SignUpScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - UsernameField( uiState.username, - viewModel::onUsernameChange, + signUpActions.onUserNameChange, fieldModifier ) - EmailField( uiState.email, - viewModel::onEmailChange, + signUpActions.onEmailChange, fieldModifier ) - PasswordField( uiState.password, - viewModel::onPasswordChange, + signUpActions.onPasswordChange, fieldModifier ) - RepeatPasswordField( uiState.repeatPassword, - viewModel::onRepeatPasswordChange, + signUpActions.onRepeatPasswordChange, fieldModifier ) - - BasicButton(AppText.create_account, Modifier.basicButton()) { - viewModel.onSignUpClick(openAndPopUp) - } - - BasicTextButton(AppText.already_user, Modifier.textButton()) { - viewModel.onLoginScreenClick(openAndPopUp) - } + BasicButton( + AppText.create_account, + Modifier.basicButton(), + onClick = signUpActions.onSignUpClick + ) + BasicTextButton( + AppText.already_user, + Modifier.textButton(), + action = signUpActions.onLoginClick + ) } } +} - +@Preview +@Composable +fun SignUpPreview() { + SignUpScreen( + uiState = SignUpUiState(), + signUpActions = SignUpActions({}, {}, {}, {}, {}, {}) + ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt index 91dde13..a08d063 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt @@ -71,7 +71,7 @@ class SignUpViewModel @Inject constructor( } } - fun onLoginScreenClick(openAndPopUp: (String, String) -> Unit) { + fun onLoginClick(openAndPopUp: (String, String) -> Unit) { openAndPopUp(LOGIN_SCREEN, SIGN_UP_SCREEN) } } \ No newline at end of file From c401a2906143dc01ee195c6f3f072a2ad04fc003 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 23:47:28 +0200 Subject: [PATCH 09/19] wrap splash in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../studeez/screens/splash/SplashScreen.kt | 53 +++++++++++++++---- 2 files changed, 45 insertions(+), 11 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 196b468..162eacc 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -31,6 +31,7 @@ import be.ugent.sel.studeez.screens.profile.EditProfileRoute 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_selection.TimerSelectionScreen @@ -101,7 +102,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.SPLASH_SCREEN) { - SplashScreen(openAndPopUp) + SplashRoute(openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.LOGIN_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt index 38146c0..a5b0e81 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt @@ -1,5 +1,6 @@ package be.ugent.sel.studeez.screens.splash +import android.window.SplashScreen import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -15,7 +16,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.ext.basicButton import kotlinx.coroutines.delay @@ -24,14 +25,26 @@ import be.ugent.sel.studeez.R.string as AppText private const val SPLASH_TIMEOUT = 500L @Composable -fun SplashScreen( +fun SplashRoute( openAndPopUp: (String, String) -> Unit, modifier: Modifier = Modifier, - viewModel: SplashViewModel = hiltViewModel() + viewModel: SplashViewModel, +) { + SplashScreen( + modifier = modifier, + onAppStart = { viewModel.onAppStart(openAndPopUp) }, + showError = viewModel.showError.value + ) +} + +@Composable +fun SplashScreen( + modifier: Modifier = Modifier, + onAppStart: () -> Unit, + showError: Boolean, ) { Column( - modifier = - modifier + modifier = modifier .fillMaxWidth() .fillMaxHeight() .background(color = MaterialTheme.colors.background) @@ -39,17 +52,37 @@ fun SplashScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - if (viewModel.showError.value) { + if (showError) { Text(text = stringResource(AppText.generic_error)) - - BasicButton(AppText.try_again, Modifier.basicButton()) { viewModel.onAppStart(openAndPopUp) } + BasicButton( + AppText.try_again, + Modifier.basicButton(), + onClick = onAppStart, + ) } else { CircularProgressIndicator(color = MaterialTheme.colors.onBackground) } } - LaunchedEffect(true) { delay(SPLASH_TIMEOUT) - viewModel.onAppStart(openAndPopUp) + onAppStart() } +} + +@Preview +@Composable +fun SplashPreview() { + SplashScreen( + onAppStart = {}, + showError = false, + ) +} + +@Preview +@Composable +fun SplashErrorPreview() { + SplashScreen( + onAppStart = {}, + showError = true, + ) } \ No newline at end of file From 480f085325fc25f2449d48cd46eb89cd785097b0 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:12:48 +0200 Subject: [PATCH 10/19] 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) From 08a33d1c9e1bb9caf1dc0f89be4000c0dfd3d53c Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:31:21 +0200 Subject: [PATCH 11/19] wrap timerselection in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../timer_overview/TimerOverviewScreen.kt | 6 +- .../timer_selection/TimerSelectionScreen.kt | 83 ++++++++++++------- 3 files changed, 57 insertions(+), 35 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 8bda99f..de77d4f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -33,7 +33,6 @@ 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.timer_overview.TimerOverviewRoute -import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -140,6 +139,6 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { - TimerSelectionScreen(open, openAndPopUp) + TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel()) } } \ No newline at end of file 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 17824a8..e822576 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 @@ -91,7 +91,7 @@ fun TimerOverviewScreen( timerInfo = it, true, R.string.edit, - onEditClick = timerOverviewActions.onEditClick + onButtonClick = timerOverviewActions.onEditClick ) } @@ -109,7 +109,7 @@ fun TimerEntry( timerInfo: TimerInfo, showButton: Boolean, @StringRes buttonName: Int = -1, - onEditClick: (TimerInfo) -> Unit = {} + onButtonClick: (TimerInfo) -> Unit = {} ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -132,7 +132,7 @@ fun TimerEntry( } if (showButton) { StealthButton(buttonName) { - onEditClick(timerInfo) + onButtonClick(timerInfo) } } 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 d9d039b..0ed5a25 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 @@ -3,60 +3,83 @@ package be.ugent.sel.studeez.screens.timer_selection import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.* +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.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 be.ugent.sel.studeez.screens.timer_overview.TimerEntry +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf + +data class TimerSelectionActions( + val getAllTimers: () -> Flow>, + val startSession: (TimerInfo) -> Unit, +) + +fun getTimerSelectionActions( + viewModel: TimerSelectionViewModel, + open: (String) -> Unit, +): TimerSelectionActions { + return TimerSelectionActions( + getAllTimers = viewModel::getAllTimers, + startSession = { viewModel.startSession(open, it) }, + ) +} + +@Composable +fun TimerSelectionRoute( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerSelectionViewModel, +) { + TimerSelectionScreen( + timerSelectionActions = getTimerSelectionActions(viewModel, open), + drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp), + navigationBarActions = getNavigationBarActions(hiltViewModel(), open), + ) +} @Composable fun TimerSelectionScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: TimerSelectionViewModel = hiltViewModel() + timerSelectionActions: TimerSelectionActions, + drawerActions: DrawerActions, + navigationBarActions: NavigationBarActions, ) { - - val timers = viewModel.getAllTimers().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 = timerSelectionActions.getAllTimers().collectAsState(initial = emptyList()) PrimaryScreenTemplate( title = resources().getString(R.string.timers), drawerActions = drawerActions, navigationBarActions = navigationBarActions, ) { - LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { - // All timers items(timers.value) { TimerEntry( timerInfo = it, showButton = true, - buttonName = R.string.start - ) { timerInfo -> - viewModel.startSession(open, timerInfo) - } + buttonName = R.string.start, + onButtonClick = timerSelectionActions.startSession + ) } } - } +} + +@Preview +@Composable +fun TimerSelectionPreview() { + TimerSelectionScreen( + timerSelectionActions = TimerSelectionActions({ flowOf() }, {}), + drawerActions = DrawerActions({}, {}, {}, {}, {}), + navigationBarActions = NavigationBarActions({}, {}, {}, {}), + ) } \ No newline at end of file From d5b62e0cb97626ac5e67edddcaf3dce44eb51be2 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:34:51 +0200 Subject: [PATCH 12/19] move TimerEntry to common.composable --- .../studeez/common/composable/TimerEntry.kt | 68 +++++++++++++++++++ .../timer_overview/TimerOverviewScreen.kt | 64 +---------------- .../timer_selection/TimerSelectionScreen.kt | 2 +- 3 files changed, 70 insertions(+), 64 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt new file mode 100644 index 0000000..6dafb45 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt @@ -0,0 +1,68 @@ +package be.ugent.sel.studeez.common.composable + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo + +@Composable +fun TimerEntry( + timerInfo: TimerInfo, + showButton: Boolean, + @StringRes buttonName: Int = -1, + onButtonClick: (TimerInfo) -> Unit = {} +) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Column( + Modifier.padding(horizontal = 10.dp) + ) { + Text( + text = timerInfo.name, fontWeight = FontWeight.Bold, fontSize = 20.sp + ) + Text( + text = timerInfo.description, fontWeight = FontWeight.Light, fontSize = 15.sp + ) + } + if (showButton) { + StealthButton(buttonName) { + onButtonClick(timerInfo) + } + } + + } +} + +@Preview +@Composable +fun TimerEntryPreview() { + val timerInfo = CustomTimerInfo( + "my preview timer", "This is the description of the timer", 60 + ) + 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) { } +} \ No newline at end of file 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 e822576..c7fefa2 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,27 +1,19 @@ package be.ugent.sel.studeez.screens.timer_overview -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -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.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp 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.ext.basicButton import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo @@ -100,63 +92,9 @@ fun TimerOverviewScreen( // TODO } } - } } -@Composable -fun TimerEntry( - timerInfo: TimerInfo, - showButton: Boolean, - @StringRes buttonName: Int = -1, - onButtonClick: (TimerInfo) -> Unit = {} -) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween - ) { - Column( - Modifier.padding(horizontal = 10.dp) - ) { - Text( - text = timerInfo.name, - fontWeight = FontWeight.Bold, - fontSize = 20.sp - ) - Text( - text = timerInfo.description, - fontWeight = FontWeight.Light, - fontSize = 15.sp - ) - } - if (showButton) { - StealthButton(buttonName) { - onButtonClick(timerInfo) - } - } - - } -} - -@Preview -@Composable -fun TimerEntryPreview() { - val timerInfo = CustomTimerInfo( - "my preview timer", "This is the description of the timer", 60 - ) - 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() { 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 0ed5a25..0a534a8 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 @@ -10,13 +10,13 @@ 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.TimerEntry 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.getDrawerActions import be.ugent.sel.studeez.screens.navbar.NavigationBarActions import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions -import be.ugent.sel.studeez.screens.timer_overview.TimerEntry import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf From 4e501fbf92b2d0dd6e6209fc94141e4c516fe4d5 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:37:48 +0200 Subject: [PATCH 13/19] move drawer en navbar to common.composable --- .../common/composable/PrimaryScreenComposable.kt | 8 ++++---- .../sel/studeez/common/composable/TimerEntry.kt | 2 +- .../composable}/drawer/DrawerComposable.kt | 2 +- .../composable}/drawer/DrawerViewModel.kt | 2 +- .../composable}/navbar/NavigationBarComposable.kt | 2 +- .../composable}/navbar/NavigationBarViewModel.kt | 2 +- .../be/ugent/sel/studeez/screens/home/HomeScreen.kt | 12 ++++++------ .../sel/studeez/screens/profile/ProfileScreen.kt | 8 ++++---- .../screens/timer_overview/TimerOverviewScreen.kt | 8 ++++---- .../screens/timer_selection/TimerSelectionScreen.kt | 8 ++++---- 10 files changed, 27 insertions(+), 27 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/{screens => common/composable}/drawer/DrawerComposable.kt (98%) rename app/src/main/java/be/ugent/sel/studeez/{screens => common/composable}/drawer/DrawerViewModel.kt (95%) rename app/src/main/java/be/ugent/sel/studeez/{screens => common/composable}/navbar/NavigationBarComposable.kt (98%) rename app/src/main/java/be/ugent/sel/studeez/{screens => common/composable}/navbar/NavigationBarViewModel.kt (93%) diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt index 8fbb54b..5af2788 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/PrimaryScreenComposable.kt @@ -18,10 +18,10 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.R import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.drawer.Drawer -import be.ugent.sel.studeez.screens.drawer.DrawerActions -import be.ugent.sel.studeez.screens.navbar.NavigationBar -import be.ugent.sel.studeez.screens.navbar.NavigationBarActions +import be.ugent.sel.studeez.common.composable.drawer.Drawer +import be.ugent.sel.studeez.common.composable.drawer.DrawerActions +import be.ugent.sel.studeez.common.composable.navbar.NavigationBar +import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt index 6dafb45..12f1738 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt @@ -62,7 +62,7 @@ fun TimerEntryPreview() { @Composable fun TimerDefaultEntryPreview() { val timerInfo = CustomTimerInfo( - "my preview timer", "This is the description of the timer", 60 + "Default preview timer", "This is the description of the timer", 60 ) TimerEntry(timerInfo = timerInfo, false, buttonName = R.string.edit) { } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt similarity index 98% rename from app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt rename to app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt index 9bf0d20..518075e 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.drawer +package be.ugent.sel.studeez.common.composable.drawer import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerViewModel.kt similarity index 95% rename from app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerViewModel.kt index 7e03b9b..d16d930 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerViewModel.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.drawer +package be.ugent.sel.studeez.common.composable.drawer import be.ugent.sel.studeez.domain.AccountDAO import be.ugent.sel.studeez.domain.LogService diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarComposable.kt similarity index 98% rename from app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt rename to app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarComposable.kt index 2c62f29..21311ef 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarComposable.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.navbar +package be.ugent.sel.studeez.common.composable.navbar import androidx.compose.material.BottomNavigation import androidx.compose.material.BottomNavigationItem diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarViewModel.kt similarity index 93% rename from app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarViewModel.kt index 75613d5..1e4bd0d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/navbar/NavigationBarViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/navbar/NavigationBarViewModel.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.navbar +package be.ugent.sel.studeez.common.composable.navbar import be.ugent.sel.studeez.domain.AccountDAO import be.ugent.sel.studeez.domain.LogService 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 e864032..08d62ea 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 @@ -13,12 +13,12 @@ import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.common.ext.basicButton 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 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 @Composable fun HomeRoute( diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt index f6ae487..a12dd08 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt @@ -16,10 +16,10 @@ import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.Headline import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.drawer.DrawerActions -import be.ugent.sel.studeez.screens.drawer.getDrawerActions -import be.ugent.sel.studeez.screens.navbar.NavigationBarActions -import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions +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.getNavigationBarActions import kotlinx.coroutines.CoroutineScope import be.ugent.sel.studeez.R.string as AppText 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 c7fefa2..5d597e0 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 @@ -18,10 +18,10 @@ 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.TimerInfo import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.drawer.DrawerActions -import be.ugent.sel.studeez.screens.drawer.getDrawerActions -import be.ugent.sel.studeez.screens.navbar.NavigationBarActions -import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions +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.getNavigationBarActions import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf 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 0a534a8..4692d68 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 @@ -13,10 +13,10 @@ import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.common.composable.TimerEntry 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.getDrawerActions -import be.ugent.sel.studeez.screens.navbar.NavigationBarActions -import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions +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.getNavigationBarActions import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf From f1efad51205521cc00712e483a78f59a65c437a9 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 00:40:14 +0200 Subject: [PATCH 14/19] fix timerselection going to timeroverview --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 de77d4f..20e8764 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -33,6 +33,7 @@ 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.timer_overview.TimerOverviewRoute +import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -139,6 +140,6 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { - TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel()) + TimerSelectionRoute(open, openAndPopUp, viewModel = hiltViewModel()) } } \ No newline at end of file From 6bfa96bab7c82efed808992e24da3f519f579ed4 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sun, 23 Apr 2023 23:33:03 +0200 Subject: [PATCH 15/19] wrap SessionScreen in route --- .idea/misc.xml | 1 - .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../studeez/screens/session/SessionScreen.kt | 116 +++++++++++++----- 3 files changed, 86 insertions(+), 34 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 0ad17cb..8978d23 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - 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 20e8764..f1141fd 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -29,6 +29,7 @@ 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.SessionScreen import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute @@ -128,7 +129,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.SESSION_SCREEN) { - SessionScreen(open, openAndPopUp) + SessionRoute(open, viewModel = hiltViewModel()) } // TODO Timers screen diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt index 451f705..f8b6766 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt @@ -10,38 +10,61 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.material.TextButton -import androidx.compose.ui.Alignment 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.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import be.ugent.sel.studeez.navigation.StudeezDestinations import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer.StudyState +import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.resources import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds var timerEnd = false +data class SessionActions( + val getTimer: () -> FunctionalTimer, + val getTask: () -> String, + val prepareMediaPlayer: () -> Unit, + val releaseMediaPlayer: () -> Unit, + val play: () -> Unit, +) + +fun getSessionActions( + viewModel: SessionViewModel, + mediaplayer: MediaPlayer, +): SessionActions { + return SessionActions( + getTimer = viewModel::getTimer, + getTask = viewModel::getTask, + prepareMediaPlayer = mediaplayer::prepare, + releaseMediaPlayer = mediaplayer::release, + play = mediaplayer::start, + ) +} + @Composable -fun SessionScreen( +fun SessionRoute( open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: SessionViewModel = hiltViewModel() + viewModel: SessionViewModel, ) { val context = LocalContext.current val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) @@ -57,24 +80,34 @@ fun SessionScreen( mediaplayer.setOnPreparedListener { mediaplayer.start() } + SessionScreen( + open = open, + sessionActions = getSessionActions(viewModel, mediaplayer), + ) +} +@Composable +fun SessionScreen( + open: (String) -> Unit, + sessionActions: SessionActions, +) { Column( - modifier = Modifier.padding(10.dp) - ) { - Timer(viewModel, mediaplayer) - + modifier = Modifier.padding(10.dp) + ) { + Timer( + sessionActions = sessionActions, + ) Box( - contentAlignment = Alignment.Center, - modifier = Modifier + contentAlignment = Alignment.Center, modifier = Modifier .fillMaxWidth() .padding(50.dp) ) { TextButton( onClick = { - mediaplayer.release() + sessionActions.releaseMediaPlayer open(StudeezDestinations.HOME_SCREEN) // Vanaf hier ook naar report gaan als "end session" knop word ingedrukt - }, + }, modifier = Modifier .padding(horizontal = 20.dp) .border(1.dp, Color.Red, RoundedCornerShape(32.dp)) @@ -89,28 +122,37 @@ fun SessionScreen( ) } } +// Button(onClick = sessionActions.play) { +// Text(text = "Play") +// } } } @Composable -private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: MediaPlayer) { +private fun Timer( + sessionActions: SessionActions, +) { var tikker by remember { mutableStateOf(false) } LaunchedEffect(tikker) { delay(1.seconds) - viewModel.getTimer().tick() + sessionActions.getTimer().tick() tikker = !tikker } - if (viewModel.getTimer().hasCurrentCountdownEnded() && !viewModel.getTimer().hasEnded()) { - mediaplayer.prepare() + if ( + sessionActions.getTimer().hasCurrentCountdownEnded() && !sessionActions.getTimer() + .hasEnded() + ) { + sessionActions.prepareMediaPlayer() } - if (!timerEnd && viewModel.getTimer().hasEnded()) { - mediaplayer.prepare() - timerEnd = true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten + if (!timerEnd && sessionActions.getTimer().hasEnded()) { + sessionActions.prepareMediaPlayer() + timerEnd = + true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten } - val hms = viewModel.getTimer().getHoursMinutesSeconds() + val hms = sessionActions.getTimer().getHoursMinutesSeconds() Column { Text( text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", @@ -121,13 +163,12 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: Me fontWeight = FontWeight.Bold, fontSize = 40.sp, ) - val stateString: String = when (viewModel.getTimer().view) { + val stateString: String = when (sessionActions.getTimer().view) { StudyState.DONE -> resources().getString(R.string.state_done) StudyState.FOCUS -> resources().getString(R.string.state_focus) StudyState.BREAK -> resources().getString(R.string.state_take_a_break) - StudyState.FOCUS_REMAINING -> - (viewModel.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let { - resources().getQuantityString(R.plurals.state_focus_remaining, it, it) + StudyState.FOCUS_REMAINING -> (sessionActions.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let { + resources().getQuantityString(R.plurals.state_focus_remaining, it, it) }.toString() } @@ -140,8 +181,7 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: Me ) Box( - contentAlignment = Alignment.Center, - modifier = Modifier + contentAlignment = Alignment.Center, modifier = Modifier .fillMaxWidth() .padding(50.dp) ) { @@ -152,16 +192,28 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: Me .background(Color.Blue, RoundedCornerShape(32.dp)) ) { Text( - text = viewModel.getTask(), + text = sessionActions.getTask(), color = Color.White, fontSize = 18.sp, fontWeight = FontWeight.Bold, - modifier = Modifier - .padding(vertical = 4.dp, horizontal = 20.dp) + modifier = Modifier.padding(vertical = 4.dp, horizontal = 20.dp) ) } } } +} +@Preview +@Composable +fun TimerPreview() { + Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {})) +} -} \ No newline at end of file +@Preview +@Composable +fun SessionPreview() { + SessionScreen( + open = {}, + sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {}) + ) +} From 70449500ccb0403c36f48da0483d17ac97c28f93 Mon Sep 17 00:00:00 2001 From: brreynie Date: Mon, 24 Apr 2023 00:18:38 +0200 Subject: [PATCH 16/19] try to fix crash because of mediaplayer --- .../studeez/screens/session/SessionScreen.kt | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt index f8b6766..495827a 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.material.TextButton import androidx.compose.runtime.Composable @@ -45,7 +44,6 @@ data class SessionActions( val getTask: () -> String, val prepareMediaPlayer: () -> Unit, val releaseMediaPlayer: () -> Unit, - val play: () -> Unit, ) fun getSessionActions( @@ -55,9 +53,8 @@ fun getSessionActions( return SessionActions( getTimer = viewModel::getTimer, getTask = viewModel::getTask, - prepareMediaPlayer = mediaplayer::prepare, + prepareMediaPlayer = mediaplayer::prepareAsync, releaseMediaPlayer = mediaplayer::release, - play = mediaplayer::start, ) } @@ -68,11 +65,10 @@ fun SessionRoute( ) { val context = LocalContext.current val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) - val mediaplayer = MediaPlayer.create(context, uri) + val mediaplayer = MediaPlayer() + mediaplayer.setDataSource(context, uri) mediaplayer.setOnCompletionListener { - if (!mediaplayer.isPlaying) { - mediaplayer.stop() - } + mediaplayer.stop() if (timerEnd) { mediaplayer.release() } @@ -122,9 +118,6 @@ fun SessionScreen( ) } } -// Button(onClick = sessionActions.play) { -// Text(text = "Play") -// } } } @@ -206,7 +199,7 @@ private fun Timer( @Preview @Composable fun TimerPreview() { - Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {})) + Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) } @Preview @@ -214,6 +207,6 @@ fun TimerPreview() { fun SessionPreview() { SessionScreen( open = {}, - sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {}) + sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}) ) } From 097d1ea1342d5e75334a1beb6f82f6aad586b6b9 Mon Sep 17 00:00:00 2001 From: brreynie Date: Mon, 24 Apr 2023 15:41:31 +0200 Subject: [PATCH 17/19] decouple button from timerEntry --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 1 - .../studeez/common/composable/TimerEntry.kt | 18 +++++-------- .../composable/drawer/DrawerComposable.kt | 4 ++- .../sel/studeez/screens/home/HomeScreen.kt | 6 ++--- .../timer_overview/TimerOverviewScreen.kt | 27 ++++++++++--------- .../timer_selection/TimerSelectionScreen.kt | 19 +++++++------ 6 files changed, 37 insertions(+), 38 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 f1141fd..9d071c7 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -30,7 +30,6 @@ 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.SessionScreen import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt index 12f1738..bfa2711 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimerEntry.kt @@ -1,6 +1,5 @@ package be.ugent.sel.studeez.common.composable -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -21,9 +20,7 @@ import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo @Composable fun TimerEntry( timerInfo: TimerInfo, - showButton: Boolean, - @StringRes buttonName: Int = -1, - onButtonClick: (TimerInfo) -> Unit = {} + button: @Composable () -> Unit, ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -40,12 +37,7 @@ fun TimerEntry( text = timerInfo.description, fontWeight = FontWeight.Light, fontSize = 15.sp ) } - if (showButton) { - StealthButton(buttonName) { - onButtonClick(timerInfo) - } - } - + button() } } @@ -55,7 +47,9 @@ fun TimerEntryPreview() { val timerInfo = CustomTimerInfo( "my preview timer", "This is the description of the timer", 60 ) - TimerEntry(timerInfo = timerInfo, true, buttonName = R.string.edit) { } + TimerEntry(timerInfo = timerInfo) { + StealthButton(text = R.string.edit) {} + } } @Preview @@ -64,5 +58,5 @@ fun TimerDefaultEntryPreview() { val timerInfo = CustomTimerInfo( "Default preview timer", "This is the description of the timer", 60 ) - TimerEntry(timerInfo = timerInfo, false, buttonName = R.string.edit) { } + TimerEntry(timerInfo = timerInfo) {} } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt index 518075e..47571f5 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/drawer/DrawerComposable.kt @@ -89,7 +89,9 @@ fun Drawer( @Composable fun DrawerEntry( - icon: ImageVector, text: String, onClick: () -> Unit + icon: ImageVector, + text: String, + onClick: () -> Unit ) { Row( horizontalArrangement = Arrangement.Center, 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 08d62ea..d989966 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 @@ -11,14 +11,12 @@ 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.ext.basicButton -import be.ugent.sel.studeez.resources 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 @Composable fun HomeRoute( 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 5d597e0..2a1435e 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 @@ -13,15 +13,16 @@ 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.ext.basicButton -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.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.getNavigationBarActions +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.TimerInfo +import be.ugent.sel.studeez.resources import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf @@ -75,16 +76,18 @@ fun TimerOverviewScreen( ) { // Default Timers, cannot be edited items(timerOverviewActions.getDefaultTimers()) { - TimerEntry(timerInfo = it, showButton = false) + TimerEntry(timerInfo = it) {} } // User timers, can be edited - items(timers.value) { + items(timers.value) { timerInfo -> TimerEntry( - timerInfo = it, - true, - R.string.edit, - onButtonClick = timerOverviewActions.onEditClick - ) + timerInfo = timerInfo, + ) { + StealthButton( + text = R.string.edit, + onClick = { timerOverviewActions.onEditClick(timerInfo) } + ) + } } } @@ -103,7 +106,7 @@ fun TimerOverviewPreview() { ) TimerOverviewScreen( timerOverviewActions = TimerOverviewActions( - { flowOf(listOf()) }, + { flowOf() }, { listOf(customTimer, customTimer) }, {}), drawerActions = DrawerActions({}, {}, {}, {}, {}), 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 4692d68..c6d8f4e 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 @@ -10,13 +10,14 @@ 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.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.resources 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.getNavigationBarActions +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.resources import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf @@ -62,13 +63,15 @@ fun TimerSelectionScreen( ) { LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { // All timers - items(timers.value) { + items(timers.value) { timerInfo -> TimerEntry( - timerInfo = it, - showButton = true, - buttonName = R.string.start, - onButtonClick = timerSelectionActions.startSession - ) + timerInfo = timerInfo, + ) { + StealthButton( + text = R.string.start, + onClick = { timerSelectionActions.startSession(timerInfo) } + ) + } } } } From bbdcd0140c5061ca65f97f08254241dc912c42fc Mon Sep 17 00:00:00 2001 From: brreynie Date: Mon, 24 Apr 2023 16:07:25 +0200 Subject: [PATCH 18/19] 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), ) } From fce9ea45b76ce2dc5ae845101aa849955d09a310 Mon Sep 17 00:00:00 2001 From: brreynie Date: Mon, 24 Apr 2023 16:30:59 +0200 Subject: [PATCH 19/19] comment out mediaplayer to avoid crashes --- .../be/ugent/sel/studeez/screens/session/SessionScreen.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt index 495827a..3db95c1 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt @@ -70,11 +70,11 @@ fun SessionRoute( mediaplayer.setOnCompletionListener { mediaplayer.stop() if (timerEnd) { - mediaplayer.release() +// mediaplayer.release() } } mediaplayer.setOnPreparedListener { - mediaplayer.start() +// mediaplayer.start() } SessionScreen( open = open, @@ -136,11 +136,11 @@ private fun Timer( sessionActions.getTimer().hasCurrentCountdownEnded() && !sessionActions.getTimer() .hasEnded() ) { - sessionActions.prepareMediaPlayer() +// sessionActions.prepareMediaPlayer() } if (!timerEnd && sessionActions.getTimer().hasEnded()) { - sessionActions.prepareMediaPlayer() +// sessionActions.prepareMediaPlayer() timerEnd = true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten }