From 1bb359374cddc24205dcaf037a09c792e79fe04d Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 17:19:29 +0200 Subject: [PATCH 01/13] onLogoutClick is niet meer nodig --- .../sel/studeez/screens/timers/TimerScreen.kt | 4 -- .../screens/timers/TimerSelectionScreen.kt | 50 +++++++++++++++++++ .../screens/timers/TimerSelectionViewModel.kt | 24 +++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt deleted file mode 100644 index b7ca484..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt +++ /dev/null @@ -1,4 +0,0 @@ -package be.ugent.sel.studeez.screens.timers - -class TimerScreen { -} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt new file mode 100644 index 0000000..1793984 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt @@ -0,0 +1,50 @@ +package be.ugent.sel.studeez.screens.timers + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +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.ext.basicButton +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.timer_overview.TimerEntry +import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewViewModel + +@Composable +fun TimerSelectScreen( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerSelectViewModel = hiltViewModel() +) { + + val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) + + PrimaryScreenTemplate( + title = resources().getString(R.string.timers), + open = open, + openAndPopUp = openAndPopUp + ) { + + Column { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(7.dp) + ) { + + // All timers + items(timers.value) { + TimerEntry(timerInfo = it, true) { timerInfo -> + viewModel.startSession() + } + } + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt new file mode 100644 index 0000000..f7b74a9 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt @@ -0,0 +1,24 @@ +package be.ugent.sel.studeez.screens.timers + +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.domain.LogService +import be.ugent.sel.studeez.domain.TimerDAO +import be.ugent.sel.studeez.screens.StudeezViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +@HiltViewModel +class TimerSelectViewModel @Inject constructor( + private val timerDAO: TimerDAO, + logService: LogService +) : StudeezViewModel(logService) { + + fun getAllTimers() : Flow> { + return timerDAO.getAllTimers() + } + + fun startSession() { + + } +} \ No newline at end of file From 199b4c2f6f96fc5f1cc96036156c43df2fd2ca36 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 17:20:10 +0200 Subject: [PATCH 02/13] onLogoutClick is niet meer nodig --- .../be/ugent/sel/studeez/screens/home/HomeViewModel.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt index f0f7b64..429c560 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt @@ -18,11 +18,4 @@ class HomeViewModel @Inject constructor( fun onStartSessionClick(openAndPopUp: (String) -> Unit) { openAndPopUp(StudeezDestinations.SESSION_SCREEN) } - - fun onLogoutClick(openAndPopup: (String, String) -> Unit) { - launchCatching { - accountDAO.signOut() - openAndPopup(LOGIN_SCREEN, HOME_SCREEN) - } - } } \ No newline at end of file From ecea5746f438b07d3c900d4960fd16e7d1449183 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 21:07:04 +0200 Subject: [PATCH 03/13] werkende timers --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 5 ++ .../studeez/navigation/StudeezDestinations.kt | 3 +- .../sel/studeez/screens/home/HomeViewModel.kt | 4 +- .../studeez/screens/session/SessionScreen.kt | 12 ++--- .../timer_overview/TimerOverviewScreen.kt | 18 ++++--- .../screens/timers/TimerSelectionScreen.kt | 47 +++++++++++-------- .../screens/timers/TimerSelectionViewModel.kt | 15 ++++-- 7 files changed, 66 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 c1a3ea2..7c49174 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 be.ugent.sel.studeez.screens.profile.ProfileScreen 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 +import be.ugent.sel.studeez.screens.timers.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -130,4 +131,8 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { EditProfileScreen(goBack, openAndPopUp) } + + composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { + TimerSelectionScreen(open, openAndPopUp) + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt index a6c8290..760c814 100644 --- a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt +++ b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt @@ -5,8 +5,9 @@ object StudeezDestinations { const val SIGN_UP_SCREEN = "signup" const val LOGIN_SCREEN = "login" - const val HOME_SCREEN = "home" + const val HOME_SCREEN = "home" const val TIMER_OVERVIEW_SCREEN = "timer_overview" + const val TIMER_SELECTION_SCREEN = "timer_selection" const val SESSION_SCREEN = "session" // const val TASKS_SCREEN = "tasks" // const val SESSIONS_SCREEN = "sessions" diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt index 429c560..7db6f8d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt @@ -15,7 +15,7 @@ class HomeViewModel @Inject constructor( logService: LogService ) : StudeezViewModel(logService) { - fun onStartSessionClick(openAndPopUp: (String) -> Unit) { - openAndPopUp(StudeezDestinations.SESSION_SCREEN) + fun onStartSessionClick(open: (String) -> Unit) { + open(StudeezDestinations.TIMER_SELECTION_SCREEN) } } \ No newline at end of file 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 d69470e..8caac2b 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 @@ -14,33 +14,33 @@ 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.timers.TimerSelectionViewModel import kotlinx.coroutines.delay @Composable fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, - viewModel: SessionViewModel = hiltViewModel() ) { PrimaryScreenTemplate( title = resources().getString(R.string.start_session), open = open, openAndPopUp = openAndPopUp ) { - Timer(viewModel) + Timer() } } @Composable -private fun Timer(viewModel: SessionViewModel = hiltViewModel()) { +fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { var tikker by remember { mutableStateOf(false) } LaunchedEffect(tikker) { delay(1000) - viewModel.getTimer().tick() + viewModel.sessionTimer!!.tick() tikker = !tikker } - val hms = viewModel.getTimer().getHoursMinutesSeconds() + val hms = viewModel.sessionTimer!!.getHoursMinutesSeconds() Column { Text( text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", @@ -50,7 +50,7 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel()) { fontSize = 80.sp ) Text( - text = viewModel.getTimer().getViewString(), + text = viewModel.sessionTimer!!.getViewString(), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, 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 fccbc66..66ddfad 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,5 +1,6 @@ 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 @@ -46,12 +47,12 @@ fun TimerOverviewScreen( ) { // Default Timers, cannot be edited items(viewModel.getDefaultTimers()) { - TimerEntry(timerInfo = it, canEdit = false) + TimerEntry(timerInfo = it, canDisplay = false) } // User timers, can be edited items(timers.value) { - TimerEntry(timerInfo = it, true) { timerInfo -> + TimerEntry(timerInfo = it, true, R.string.edit) { timerInfo -> viewModel.update(timerInfo) } } @@ -65,7 +66,12 @@ fun TimerOverviewScreen( } @Composable -fun TimerEntry(timerInfo: TimerInfo, canEdit: Boolean, update: (TimerInfo) -> Unit = {}) { +fun TimerEntry( + timerInfo: TimerInfo, + canDisplay: Boolean, + @StringRes buttonName: Int = -1, + buttonFunction: (TimerInfo) -> Unit = {} +) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth(), @@ -83,9 +89,9 @@ fun TimerEntry(timerInfo: TimerInfo, canEdit: Boolean, update: (TimerInfo) -> Un fontSize = 15.sp ) } - if (canEdit) { - BasicButton(R.string.edit, Modifier.card()) { - // TODO + if (canDisplay) { + BasicButton(buttonName, Modifier.card()) { + buttonFunction(timerInfo) } } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt index 1793984..c0abe68 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt @@ -4,26 +4,24 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.ui.Modifier +import androidx.compose.runtime.* 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.ext.basicButton +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.session.Timer import be.ugent.sel.studeez.screens.timer_overview.TimerEntry -import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewViewModel @Composable -fun TimerSelectScreen( +fun TimerSelectionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, - viewModel: TimerSelectViewModel = hiltViewModel() + viewModel: TimerSelectionViewModel = hiltViewModel() ) { + val inSession by remember { viewModel.inSession } val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) PrimaryScreenTemplate( @@ -32,19 +30,28 @@ fun TimerSelectScreen( openAndPopUp = openAndPopUp ) { - Column { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(7.dp) - ) { - - // All timers - items(timers.value) { - TimerEntry(timerInfo = it, true) { timerInfo -> - viewModel.startSession() - } - } - } + if (inSession) { + Timer(viewModel) + } else { + TimerSelection(timers = timers, viewModel = viewModel) } } +} + +@Composable +fun TimerSelection(timers: State>, viewModel: TimerSelectionViewModel, ) { + LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { + + // All timers + items(timers.value) { + TimerEntry( + timerInfo = it, + canDisplay = true, + buttonName = R.string.start + ) { timerInfo -> + viewModel.startSession(timerInfo) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt index f7b74a9..473f2f3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt @@ -1,5 +1,10 @@ package be.ugent.sel.studeez.screens.timers +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO @@ -9,16 +14,20 @@ import kotlinx.coroutines.flow.Flow import javax.inject.Inject @HiltViewModel -class TimerSelectViewModel @Inject constructor( +class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, logService: LogService ) : StudeezViewModel(logService) { + var inSession = mutableStateOf(false) + var sessionTimer: FunctionalTimer? = null + fun getAllTimers() : Flow> { return timerDAO.getAllTimers() } - fun startSession() { - + fun startSession(timerInfo: TimerInfo) { + inSession.value = true + sessionTimer = timerInfo.getFunctionalTimer() } } \ No newline at end of file From d409294ad8ee33718d29be9c0fc0200d63f499bb Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 08:40:58 +0200 Subject: [PATCH 04/13] added start --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b48d7f8..5b022c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ Cancel Go back Next + Start Success! From d5b9e1dae842157d7bfb14e8fdd77a710579406f Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:36:54 +0200 Subject: [PATCH 05/13] #40 button now starts a new session --- .../sel/studeez/data/SelectedTimerRepo.kt | 11 ++++ .../timer_selection/TimerSelectionScreen.kt | 44 ++++++++++++++ .../TimerSelectionViewModel.kt | 15 ++--- .../screens/timers/TimerSelectionScreen.kt | 57 ------------------- 4 files changed, 61 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt rename app/src/main/java/be/ugent/sel/studeez/screens/{timers => timer_selection}/TimerSelectionViewModel.kt (68%) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt new file mode 100644 index 0000000..1aa763d --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt @@ -0,0 +1,11 @@ +package be.ugent.sel.studeez.screens.timers + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class SelectedTimerRepo @Inject constructor(){ + var selectedTimer: FunctionalTimer? = null + +} \ No newline at end of file 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 new file mode 100644 index 0000000..8e8df37 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt @@ -0,0 +1,44 @@ +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.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.resources +import be.ugent.sel.studeez.screens.timer_overview.TimerEntry + +@Composable +fun TimerSelectionScreen( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerSelectionViewModel = hiltViewModel() +) { + + val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) + + PrimaryScreenTemplate( + title = resources().getString(R.string.timers), + open = open, + openAndPopUp = openAndPopUp, + ) { + + LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { + + // All timers + items(timers.value) { + TimerEntry( + timerInfo = it, + canDisplay = true, + buttonName = R.string.start + ) { timerInfo -> + viewModel.startSession(open, timerInfo) + } + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt similarity index 68% rename from app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index 473f2f3..d90a54c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,13 +1,12 @@ package be.ugent.sel.studeez.screens.timers -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import be.ugent.sel.studeez.data.SelectedTimerRepo import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO +import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.StudeezViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow @@ -16,18 +15,16 @@ import javax.inject.Inject @HiltViewModel class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, + private val selectedTimerRepo: SelectedTimerRepo, logService: LogService ) : StudeezViewModel(logService) { - var inSession = mutableStateOf(false) - var sessionTimer: FunctionalTimer? = null - fun getAllTimers() : Flow> { return timerDAO.getAllTimers() } - fun startSession(timerInfo: TimerInfo) { - inSession.value = true - sessionTimer = timerInfo.getFunctionalTimer() + fun startSession(open: (String) -> Unit, timerInfo: TimerInfo) { + selectedTimerRepo.selectedTimer = timerInfo.getFunctionalTimer() + open(StudeezDestinations.SESSION_SCREEN) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt deleted file mode 100644 index c0abe68..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt +++ /dev/null @@ -1,57 +0,0 @@ -package be.ugent.sel.studeez.screens.timers - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.* -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.session.Timer -import be.ugent.sel.studeez.screens.timer_overview.TimerEntry - -@Composable -fun TimerSelectionScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: TimerSelectionViewModel = hiltViewModel() -) { - - val inSession by remember { viewModel.inSession } - val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) - - PrimaryScreenTemplate( - title = resources().getString(R.string.timers), - open = open, - openAndPopUp = openAndPopUp - ) { - - if (inSession) { - Timer(viewModel) - } else { - TimerSelection(timers = timers, viewModel = viewModel) - } - - } -} - -@Composable -fun TimerSelection(timers: State>, viewModel: TimerSelectionViewModel, ) { - LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { - - // All timers - items(timers.value) { - TimerEntry( - timerInfo = it, - canDisplay = true, - buttonName = R.string.start - ) { timerInfo -> - viewModel.startSession(timerInfo) - } - } - } -} \ No newline at end of file From e3e3eaf1fa8c61d3ddc7b87df207b4b9654956ca Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:39:07 +0200 Subject: [PATCH 06/13] #26 session can be started --- .../screens/timer_selection/TimerSelectionViewModel.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index d90a54c..cae25e3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,8 +1,6 @@ -package be.ugent.sel.studeez.screens.timers +package be.ugent.sel.studeez.screens.timer_selection -import androidx.compose.runtime.mutableStateOf import be.ugent.sel.studeez.data.SelectedTimerRepo -import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO From b2d010ff3f3557e4a8ad33f39773e3dcf8640368 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:40:05 +0200 Subject: [PATCH 07/13] #26 timer can be displayed --- .../studeez/screens/session/SessionScreen.kt | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 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 8caac2b..4e6feb2 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 @@ -7,40 +7,39 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.TextUnit -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.PrimaryScreenTemplate +import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.timers.TimerSelectionViewModel import kotlinx.coroutines.delay +import kotlin.time.Duration.Companion.seconds @Composable fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, ) { - PrimaryScreenTemplate( + SecondaryScreenTemplate( title = resources().getString(R.string.start_session), - open = open, - openAndPopUp = openAndPopUp - ) { - Timer() - } + popUp = {}, + content = { Timer() } + ) } @Composable -fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { - var tikker by remember { mutableStateOf(false) } - LaunchedEffect(tikker) { - delay(1000) - viewModel.sessionTimer!!.tick() - tikker = !tikker +fun Timer(viewModel: SessionViewModel = hiltViewModel()) { + + + var ticker by remember { mutableStateOf(false) } + LaunchedEffect(ticker) { + delay(1.seconds) + viewModel.getTimer().tick() + ticker = !ticker } - val hms = viewModel.sessionTimer!!.getHoursMinutesSeconds() + val hms = viewModel.getTimer().getHoursMinutesSeconds() Column { Text( text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", @@ -50,7 +49,7 @@ fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { fontSize = 80.sp ) Text( - text = viewModel.sessionTimer!!.getViewString(), + text = viewModel.getTimer().getViewString(), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, From 42eb9cf208c2c2ee82ab4cc3cdf465f12673a5a4 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:40:56 +0200 Subject: [PATCH 08/13] get selectedtimer from repository --- .../ugent/sel/studeez/screens/session/SessionViewModel.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt index 7326212..8d36a50 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt @@ -1,20 +1,19 @@ package be.ugent.sel.studeez.screens.session -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.domain.LogService import be.ugent.sel.studeez.screens.StudeezViewModel +import be.ugent.sel.studeez.data.SelectedTimerRepo import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class SessionViewModel @Inject constructor( + private val selectedTimerRepo: SelectedTimerRepo, logService: LogService ) : StudeezViewModel(logService) { - private val timer: FunctionalTimer = FunctionalPomodoroTimer(15, 5, 3) - fun getTimer() : FunctionalTimer { - return timer + return selectedTimerRepo.selectedTimer!! } } \ No newline at end of file From 8f84c24bad75b8dc6c585923d075f7e5651bc88f Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:41:58 +0200 Subject: [PATCH 09/13] singleton repo for selectedTimer --- .../java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt index 1aa763d..9fcd487 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt @@ -1,11 +1,14 @@ -package be.ugent.sel.studeez.screens.timers +package be.ugent.sel.studeez.data import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import javax.inject.Inject import javax.inject.Singleton +/** + * Used to communicate the SelectedTimer from the selection screen to the session screen. + * Because this is a singleton-class the view-models of both screens observe the same data. + */ @Singleton class SelectedTimerRepo @Inject constructor(){ var selectedTimer: FunctionalTimer? = null - } \ No newline at end of file From 63bb3f60ac14b07af7be82752dc4e32031024957 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:43:17 +0200 Subject: [PATCH 10/13] add TimerSelectionScreen to imports --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 2 +- 1 file changed, 1 insertion(+), 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 7c49174..04b4914 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -26,7 +26,7 @@ import be.ugent.sel.studeez.screens.profile.ProfileScreen 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 -import be.ugent.sel.studeez.screens.timers.TimerSelectionScreen +import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope From 38b582ead97fb2b0c25858c5b7045a0e3bf1b163 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:29:52 +0200 Subject: [PATCH 11/13] secondaryscreen gone --- .../be/ugent/sel/studeez/screens/session/SessionScreen.kt | 6 +----- 1 file changed, 1 insertion(+), 5 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 4e6feb2..0c60b3c 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 @@ -21,11 +21,7 @@ fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, ) { - SecondaryScreenTemplate( - title = resources().getString(R.string.start_session), - popUp = {}, - content = { Timer() } - ) + Timer() } @Composable From b3651bbbe59ca8859d92e2cb47b73d90c5a36670 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:31:48 +0200 Subject: [PATCH 12/13] BreaktimerInfo -> PomodoroTimerInfo --- .../timer_info/{BreakTimerInfo.kt => PomodoroTimerInfo.kt} | 2 +- .../ugent/sel/studeez/domain/implementation/ToTimerConverter.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/{BreakTimerInfo.kt => PomodoroTimerInfo.kt} (97%) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt similarity index 97% rename from app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt rename to app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt index 735f917..18bcea6 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt @@ -3,7 +3,7 @@ package be.ugent.sel.studeez.data.local.models.timer_info import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer -class BreakTimerInfo( +class PomodoroTimerInfo( name: String, description: String, private val studyTime: Int, diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt index 021f9a0..ea06747 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt @@ -30,7 +30,7 @@ class ToTimerConverter { it.studyTime, it.id ) }, - TimerType.BREAK to TimerFactory { BreakTimerInfo( + TimerType.BREAK to TimerFactory { PomodoroTimerInfo( it.name, it.description, it.studyTime, From d8b95f5d5b2785fdb3dae12c2fbec5d528885e4a Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:33:37 +0200 Subject: [PATCH 13/13] change name of SelectedTimerRepo to SelectedTimerState --- .../data/{SelectedTimerRepo.kt => SelectedTimerState.kt} | 2 +- .../ugent/sel/studeez/screens/session/SessionViewModel.kt | 6 +++--- .../screens/timer_selection/TimerSelectionViewModel.kt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/data/{SelectedTimerRepo.kt => SelectedTimerState.kt} (89%) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt similarity index 89% rename from app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt rename to app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt index 9fcd487..f8fcebd 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt @@ -9,6 +9,6 @@ import javax.inject.Singleton * Because this is a singleton-class the view-models of both screens observe the same data. */ @Singleton -class SelectedTimerRepo @Inject constructor(){ +class SelectedTimerState @Inject constructor(){ var selectedTimer: FunctionalTimer? = null } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt index 8d36a50..f4bf93c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt @@ -3,17 +3,17 @@ package be.ugent.sel.studeez.screens.session import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.screens.StudeezViewModel -import be.ugent.sel.studeez.data.SelectedTimerRepo +import be.ugent.sel.studeez.data.SelectedTimerState import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class SessionViewModel @Inject constructor( - private val selectedTimerRepo: SelectedTimerRepo, + private val selectedTimerState: SelectedTimerState, logService: LogService ) : StudeezViewModel(logService) { fun getTimer() : FunctionalTimer { - return selectedTimerRepo.selectedTimer!! + return selectedTimerState.selectedTimer!! } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index cae25e3..c555bfa 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,6 +1,6 @@ package be.ugent.sel.studeez.screens.timer_selection -import be.ugent.sel.studeez.data.SelectedTimerRepo +import be.ugent.sel.studeez.data.SelectedTimerState import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO @@ -13,7 +13,7 @@ import javax.inject.Inject @HiltViewModel class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, - private val selectedTimerRepo: SelectedTimerRepo, + private val selectedTimerState: SelectedTimerState, logService: LogService ) : StudeezViewModel(logService) { @@ -22,7 +22,7 @@ class TimerSelectionViewModel @Inject constructor( } fun startSession(open: (String) -> Unit, timerInfo: TimerInfo) { - selectedTimerRepo.selectedTimer = timerInfo.getFunctionalTimer() + selectedTimerState.selectedTimer = timerInfo.getFunctionalTimer() open(StudeezDestinations.SESSION_SCREEN) } } \ No newline at end of file