From 968842609382d5f1269e919dd57b7f6bdce5841f Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 10:27:20 +0200 Subject: [PATCH 01/23] intermediate type select screen for add and route to edit instead of add --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 8 ++++++++ .../ugent/sel/studeez/navigation/StudeezDestinations.kt | 1 + .../studeez/screens/timer_overview/TimerOverviewScreen.kt | 8 ++++---- .../screens/timer_overview/TimerOverviewViewModel.kt | 4 ++-- 4 files changed, 15 insertions(+), 6 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 7216f4f..f8c5572 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -32,6 +32,7 @@ import be.ugent.sel.studeez.screens.sessions.SessionsRoute import be.ugent.sel.studeez.screens.settings.SettingsRoute import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute +import be.ugent.sel.studeez.screens.timer_add.TimerTypeSelectScreen import be.ugent.sel.studeez.screens.timer_edit.TimerEditRoute import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute import be.ugent.sel.studeez.screens.timer_overview.add_timer.AddTimerRoute @@ -183,6 +184,13 @@ fun StudeezNavGraph( ) } + composable(StudeezDestinations.TIMER_TYPE_CHOOSING_SCREEN) { + TimerTypeSelectScreen( + open = open, + popUp = goBack + ) + } + composable(StudeezDestinations.SESSION_SCREEN) { SessionRoute( open, 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 ef4868a..999ece1 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 @@ -19,6 +19,7 @@ object StudeezDestinations { // Studying flow const val TIMER_SELECTION_SCREEN = "timer_selection" const val TIMER_EDIT_SCREEN = "timer_edit" + const val TIMER_TYPE_CHOOSING_SCREEN = "timer_type_choosing_screen" const val SESSION_SCREEN = "session" const val SESSION_RECAP = "session_recap" 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 dd3f062..a07dd67 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 @@ -25,7 +25,7 @@ data class TimerOverviewActions( val getUserTimers: () -> Flow>, val getDefaultTimers: () -> List, val onEditClick: (TimerInfo) -> Unit, - val onAddClick: () -> Unit, + val onAddClick: () -> Unit ) fun getTimerOverviewActions( @@ -36,7 +36,7 @@ fun getTimerOverviewActions( getUserTimers = viewModel::getUserTimers, getDefaultTimers = viewModel::getDefaultTimers, onEditClick = { viewModel.update(it, open) }, - onAddClick = { viewModel.create(open) } + onAddClick = { viewModel.onAddClick(open) } ) } @@ -48,14 +48,14 @@ fun TimerOverviewRoute( ) { TimerOverviewScreen( timerOverviewActions = getTimerOverviewActions(viewModel, open), - drawerActions = drawerActions + drawerActions = drawerActions, ) } @Composable fun TimerOverviewScreen( timerOverviewActions: TimerOverviewActions, - drawerActions: DrawerActions + drawerActions: DrawerActions, ) { val timers = timerOverviewActions.getUserTimers().collectAsState(initial = emptyList()) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewViewModel.kt index 77a5a6e..3e10053 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewViewModel.kt @@ -32,8 +32,8 @@ class TimerOverviewViewModel @Inject constructor( open(StudeezDestinations.TIMER_EDIT_SCREEN) } - fun create(open: (String) -> Unit) { - open(StudeezDestinations.ADD_TIMER_SCREEN) + fun onAddClick(open: (String) -> Unit) { + open(StudeezDestinations.TIMER_TYPE_CHOOSING_SCREEN) } fun delete(timerInfo: TimerInfo) =timerDAO.deleteTimer(timerInfo) From 61b3c8714239129e85a00344376e9ac0faae2b42 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 10:29:34 +0200 Subject: [PATCH 02/23] forgot to remove 20 labels test --- .../editScreens/AbstractTimerEditScreen.kt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt index 898492e..c4ec5a5 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt @@ -43,15 +43,12 @@ abstract class AbstractTimerEditScreen(private val timerInfo: TimerInfo) { label = R.string.name ) - repeat(20) { - LabelledInputField( - value = description, - onNewValue = { description = it }, - label = R.string.description, - singleLine = false - ) - - } + LabelledInputField( + value = description, + onNewValue = { description = it }, + label = R.string.description, + singleLine = false + ) ExtraFields() From 7934154af92a1130392da58b939f155b1816b645 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 10:46:14 +0200 Subject: [PATCH 03/23] removed own add screenn (niet dat van Rune) + minor refactor --- .../screens/timer_add/TimerAddScreen.kt | 44 ------------------- .../screens/timer_add/TimerAddViewModel.kt | 29 ------------ .../timer_add/TimerTypeSelectScreen.kt | 3 +- .../timer_add/TimerTypeSelectViewModel.kt | 1 - 4 files changed, 2 insertions(+), 75 deletions(-) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddScreen.kt delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddViewModel.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddScreen.kt deleted file mode 100644 index 7cb6a8f..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddScreen.kt +++ /dev/null @@ -1,44 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_add - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.tooling.preview.Preview -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate -import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.screens.timer_edit.GetTimerEditScreen -import be.ugent.sel.studeez.screens.timer_edit.TimerEditViewModel -import be.ugent.sel.studeez.screens.timer_edit.editScreens.AbstractTimerEditScreen -import be.ugent.sel.studeez.ui.theme.StudeezTheme - -data class TimerEditActions( - val getTimerInfo: () -> TimerInfo, - val saveTimer: (TimerInfo, () -> Unit) -> Unit -) - -fun getTimerEditActions( - viewModel: TimerEditViewModel, - open: (String) -> Unit -): TimerEditActions { - return TimerEditActions( - getTimerInfo = viewModel::getTimerInfo, - saveTimer = viewModel::saveTimer - ) -} - -@Composable -fun TimerEditRoute( - open: (String) -> Unit, - popUp: () -> Unit, - viewModel: TimerEditViewModel, -) { - - val timerEditActions = getTimerEditActions(viewModel, open) - - SecondaryScreenTemplate(title = "Edit Timer", popUp = popUp) { - - val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen()) - timerEditScreen { timerInfo -> - timerEditActions.saveTimer(timerInfo, popUp) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddViewModel.kt deleted file mode 100644 index 9ab766c..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddViewModel.kt +++ /dev/null @@ -1,29 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_add - -import be.ugent.sel.studeez.data.EditTimerState -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 javax.inject.Inject - -@HiltViewModel -class TimerAddViewModel @Inject constructor( - private val editTimerState: EditTimerState, - private val timerDAO: TimerDAO, - logService: LogService -) : StudeezViewModel(logService) { - - private val timerInfo: TimerInfo = editTimerState.timerInfo - - fun getTimerInfo(): TimerInfo { - return timerInfo - } - - fun saveTimer(timerInfo: TimerInfo, goBack: () -> Unit) { - timerDAO.updateTimer(timerInfo) - goBack() - } - -} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt index d14bb86..f950c23 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt @@ -34,7 +34,8 @@ fun TimerTypeSelectScreen( modifier = Modifier.fillMaxWidth() ) { TimerType.values().forEach { timerType -> - Button(onClick = { viewModel.onTimerTypeChosen(defaultTimerInfo[timerType]!!, open) }) { + val default: TimerInfo = defaultTimerInfo.getValue(timerType) + Button(onClick = { viewModel.onTimerTypeChosen(default, open) }) { Text(text = timerType.name) } } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt index 1892833..11b512d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt @@ -13,7 +13,6 @@ import javax.inject.Inject @HiltViewModel class TimerTypeSelectViewModel @Inject constructor( private val editTimerState: EditTimerState, - private val timerDAO: TimerDAO, logService: LogService ) : StudeezViewModel(logService) { From 0b65c44da120b8a6c60f958103e91ea139894580 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 12:22:42 +0200 Subject: [PATCH 04/23] added error inputfield --- .../common/composable/TextFieldComposable.kt | 97 ++++++++++++++++++- 1 file changed, 93 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt index 47dbb0b..8d158be 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt @@ -1,11 +1,11 @@ package be.ugent.sel.studeez.common.composable import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.OutlinedTextField -import androidx.compose.material.Text +import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Email import androidx.compose.material.icons.filled.Lock @@ -14,10 +14,15 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import be.ugent.sel.studeez.common.ext.fieldModifier +import be.ugent.sel.studeez.resources +import kotlin.math.sin import be.ugent.sel.studeez.R.drawable as AppIcon import be.ugent.sel.studeez.R.string as AppText @@ -85,6 +90,90 @@ fun EmailField( ) } +@Composable +fun LabeledNumberInputField( + value: Int, + onNewValue: (Int) -> Unit, + @StringRes label: Int, + singleLine: Boolean = false +) { + var number by remember { mutableStateOf(value) } + OutlinedTextField( + value = number.toString(), + singleLine = singleLine, + label = { Text(resources().getString(label)) }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + onValueChange = {typedInt -> + val isNumber = typedInt.matches(Regex("[1-9]+\\d*]")) + if (isNumber) { + number = typedInt.toInt() + onNewValue(typedInt.toInt()) + } + } + ) +} + +@Composable +fun LabeledErrorTextField( + modifier: Modifier = Modifier, + initialValue: String, + @StringRes label: Int, + singleLine: Boolean = false, + errorText: String, + keyboardType: KeyboardType, + predicate: (String) -> Boolean, + onNewCorrectValue: (String) -> Unit +) { + var value by remember { + mutableStateOf(initialValue) + } + + var isValid by remember { + mutableStateOf(predicate(value)) + } + + Column { + OutlinedTextField( + modifier = modifier.fieldModifier(), + value = value, + onValueChange = { newText -> + value = newText + isValid = predicate(value) + if (isValid) { + onNewCorrectValue(newText) + } + }, + singleLine = singleLine, + label = { Text(text = resources().getString(label)) }, + isError = !isValid, + keyboardOptions = KeyboardOptions( + keyboardType = keyboardType, + imeAction = ImeAction.Done + ) + ) + + if (!isValid) { + Text( + modifier = Modifier.padding(start = 16.dp), + text = errorText, + color = MaterialTheme.colors.error + ) + } + } +} + +fun isNumber(string: String): Boolean { + return string.matches(Regex("[1-9]+\\d*")) +} + + + + @Preview(showBackground = true) + @Composable + fun IntInputPreview() { + LabeledNumberInputField(value = 1, onNewValue = {}, label = AppText.email) + } + @Composable fun PasswordField( value: String, From 4d064ad319dc5a5ba5f1c717d54c6e4e6cc267b6 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 12:23:05 +0200 Subject: [PATCH 05/23] made repeats public --- .../studeez/data/local/models/timer_info/PomodoroTimerInfo.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt index 6dd6797..7316630 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt @@ -9,7 +9,7 @@ class PomodoroTimerInfo( description: String, var studyTime: Int, var breakTime: Int, - val repeats: Int, + var repeats: Int, id: String = "" ): TimerInfo(id, name, description) { From 3fc3bee8c2ca617632c2ea22a13f5eaa87844287 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 12:23:26 +0200 Subject: [PATCH 06/23] added error label for breaktimeEdit --- .../editScreens/BreakTimerEditScreen.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt index b6104b6..3f4b520 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt @@ -1,8 +1,13 @@ package be.ugent.sel.studeez.screens.timer_edit.editScreens +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.common.composable.LabeledErrorTextField +import be.ugent.sel.studeez.common.composable.LabeledNumberInputField import be.ugent.sel.studeez.common.composable.TimePickerButton import be.ugent.sel.studeez.common.composable.TimePickerCard import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds @@ -10,6 +15,7 @@ import be.ugent.sel.studeez.data.local.models.timer_functional.Time import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo +import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme class BreakTimerEditScreen( @@ -26,8 +32,18 @@ class BreakTimerEditScreen( TimePickerCard(R.string.breakTime, breakTimerInfo.breakTime) { newTime -> breakTimerInfo.breakTime = newTime } - } + LabeledErrorTextField( + initialValue = breakTimerInfo.repeats.toString(), + label = R.string.repeats, + errorText = resources().getString(R.string.repeats_error), + keyboardType = KeyboardType.Decimal, + predicate = { it.matches(Regex("[1-9]+\\d*")) } + ) { correctlyTypedInt -> + breakTimerInfo.repeats = correctlyTypedInt.toInt() + } + + } } @Preview From cfb624b6b65ddb3992996d4c81b14c121884ac1a Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Thu, 4 May 2023 12:23:58 +0200 Subject: [PATCH 07/23] added error for invalid repeats --- 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 2c5ec3a..a1ea6ef 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -125,6 +125,7 @@ Name + Repeats must be a positive non-zero number Description Study Time Break Time From a28a425c3ccba1e7f3b7f0760af3fe1459a1013d Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 21:37:02 +0200 Subject: [PATCH 08/23] fix string resource inconsistencies --- .../common/composable/TextFieldComposable.kt | 10 +++------- .../editScreens/AbstractTimerEditScreen.kt | 3 ++- .../timer_edit/editScreens/BreakTimerEditScreen.kt | 13 +++---------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt index 8d158be..aadcee3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt @@ -119,7 +119,7 @@ fun LabeledErrorTextField( initialValue: String, @StringRes label: Int, singleLine: Boolean = false, - errorText: String, + errorText: Int, keyboardType: KeyboardType, predicate: (String) -> Boolean, onNewCorrectValue: (String) -> Unit @@ -144,7 +144,7 @@ fun LabeledErrorTextField( } }, singleLine = singleLine, - label = { Text(text = resources().getString(label)) }, + label = { Text(text = stringResource(id = label)) }, isError = !isValid, keyboardOptions = KeyboardOptions( keyboardType = keyboardType, @@ -155,17 +155,13 @@ fun LabeledErrorTextField( if (!isValid) { Text( modifier = Modifier.padding(start = 16.dp), - text = errorText, + text = stringResource(id = errorText), color = MaterialTheme.colors.error ) } } } -fun isNumber(string: String): Boolean { - return string.matches(Regex("[1-9]+\\d*")) -} - @Preview(showBackground = true) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt index c4ec5a5..6e38938 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt @@ -14,6 +14,7 @@ import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.LabelledInputField import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.R.string as AppText abstract class AbstractTimerEditScreen(private val timerInfo: TimerInfo) { @@ -46,7 +47,7 @@ abstract class AbstractTimerEditScreen(private val timerInfo: TimerInfo) { LabelledInputField( value = description, onNewValue = { description = it }, - label = R.string.description, + label = AppText.description, singleLine = false ) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt index 3f4b520..8b00b94 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt @@ -1,22 +1,15 @@ package be.ugent.sel.studeez.screens.timer_edit.editScreens -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.* -import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.LabeledErrorTextField -import be.ugent.sel.studeez.common.composable.LabeledNumberInputField -import be.ugent.sel.studeez.common.composable.TimePickerButton import be.ugent.sel.studeez.common.composable.TimePickerCard -import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds -import be.ugent.sel.studeez.data.local.models.timer_functional.Time -import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo -import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo -import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.ui.theme.StudeezTheme +import be.ugent.sel.studeez.R.string as AppText + class BreakTimerEditScreen( private val breakTimerInfo: PomodoroTimerInfo @@ -36,7 +29,7 @@ class BreakTimerEditScreen( LabeledErrorTextField( initialValue = breakTimerInfo.repeats.toString(), label = R.string.repeats, - errorText = resources().getString(R.string.repeats_error), + errorText = AppText.repeats_error, keyboardType = KeyboardType.Decimal, predicate = { it.matches(Regex("[1-9]+\\d*")) } ) { correctlyTypedInt -> From 24fe1b4f7802b0d137141561773dc8e4944c3050 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:54:12 +0200 Subject: [PATCH 09/23] added add screen to routes --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 5 +++-- .../be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt 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 f8c5572..402a2bc 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -32,6 +32,7 @@ import be.ugent.sel.studeez.screens.sessions.SessionsRoute import be.ugent.sel.studeez.screens.settings.SettingsRoute import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute +import be.ugent.sel.studeez.screens.timer_add.TimerAddRoute import be.ugent.sel.studeez.screens.timer_add.TimerTypeSelectScreen import be.ugent.sel.studeez.screens.timer_edit.TimerEditRoute import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute @@ -207,9 +208,9 @@ fun StudeezNavGraph( } composable(StudeezDestinations.ADD_TIMER_SCREEN) { - AddTimerRoute( + TimerAddRoute( open = open, - goBack = goBack, + popUp = goBack, viewModel = hiltViewModel() ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt new file mode 100644 index 0000000..dbf0f30 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt @@ -0,0 +1,4 @@ +package be.ugent.sel.studeez.screens.timer_add + +class TimerAddRoute { +} \ No newline at end of file From 11e7990ee9feffddbaa67121d8724f98ecde4c63 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:54:51 +0200 Subject: [PATCH 10/23] added timer add route --- .../screens/timer_add/TimerAddRoute.kt | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt index dbf0f30..d656aab 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt @@ -1,4 +1,40 @@ package be.ugent.sel.studeez.screens.timer_add -class TimerAddRoute { +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.screens.timer_edit.GetTimerEditScreen +import be.ugent.sel.studeez.screens.timer_edit.TimerEditViewModel + +data class TimerEditActions( + val getTimerInfo: () -> TimerInfo, + val saveTimer: (TimerInfo) -> Unit +) + +fun getTimerAddActions( + viewModel: TimerEditViewModel, + goBack: () -> Unit +): TimerEditActions { + return TimerEditActions( + getTimerInfo = viewModel::getTimerInfo, + saveTimer = { timerInfo -> viewModel.saveTimer(timerInfo, goBack) } + ) +} + +@Composable +fun TimerAddRoute( + open: (String) -> Unit, + popUp: () -> Unit, + viewModel: TimerEditViewModel, +) { + + val timerEditActions = getTimerAddActions(viewModel, goBack = popUp) + + SecondaryScreenTemplate(title = stringResource(id = R.string.edit_timer), popUp = popUp) { + + val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen()) + timerEditScreen { timerEditActions.saveTimer(it) } + } } \ No newline at end of file From b909c7dd158503de6f0f619c1c2734ab9333ef8c Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:55:41 +0200 Subject: [PATCH 11/23] open add route instead of edit screen --- .../sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt index 11b512d..58d46a1 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt @@ -19,6 +19,6 @@ class TimerTypeSelectViewModel @Inject constructor( fun onTimerTypeChosen(timerInfo: TimerInfo, open: (String) -> Unit) { editTimerState.timerInfo = timerInfo - open(StudeezDestinations.TIMER_EDIT_SCREEN) + open(StudeezDestinations.ADD_TIMER_SCREEN) } } \ No newline at end of file From 534a88db5d94a338a9c342d6071770e2ca2e2f61 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:56:26 +0200 Subject: [PATCH 12/23] changed savedTimer to editTimer --- .../studeez/screens/timer_edit/TimerEditScreen.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt index 649caf6..68aa3a4 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt @@ -1,16 +1,14 @@ package be.ugent.sel.studeez.screens.timer_edit import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.res.stringResource import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.screens.timer_edit.editScreens.AbstractTimerEditScreen -import be.ugent.sel.studeez.ui.theme.StudeezTheme +import be.ugent.sel.studeez.R.string as AppText data class TimerEditActions( val getTimerInfo: () -> TimerInfo, - val saveTimer: (TimerInfo, () -> Unit) -> Unit + val editTimer: (TimerInfo, () -> Unit) -> Unit ) fun getTimerEditActions( @@ -19,7 +17,7 @@ fun getTimerEditActions( ): TimerEditActions { return TimerEditActions( getTimerInfo = viewModel::getTimerInfo, - saveTimer = viewModel::saveTimer + editTimer = viewModel::editTimer ) } @@ -32,11 +30,11 @@ fun TimerEditRoute( val timerEditActions = getTimerEditActions(viewModel, open) - SecondaryScreenTemplate(title = "Edit Timer", popUp = popUp) { + SecondaryScreenTemplate(title = stringResource(id = AppText.edit_timer), popUp = popUp) { val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen()) timerEditScreen { timerInfo -> - timerEditActions.saveTimer(timerInfo, popUp) + timerEditActions.editTimer(timerInfo, popUp) } } } From 4015a806be7bb2dcc92b61ac3e0e9afbd503b1c9 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:57:31 +0200 Subject: [PATCH 13/23] saveTimer -> editTimer --- .../sel/studeez/screens/timer_edit/TimerEditViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt index 3258f24..b2bb172 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt @@ -21,9 +21,13 @@ class TimerEditViewModel @Inject constructor( return timerInfo } - fun saveTimer(timerInfo: TimerInfo, goBack: () -> Unit) { + fun editTimer(timerInfo: TimerInfo, goBack: () -> Unit) { timerDAO.updateTimer(timerInfo) goBack() } + fun saveTimer(timerInfo: TimerInfo, goBack: () -> Unit) { + timerDAO.saveTimer(timerInfo) + goBack() + } } \ No newline at end of file From 165fe4ca8632a540bf463ea12798597ff58c9539 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Thu, 4 May 2023 22:58:35 +0200 Subject: [PATCH 14/23] added edit screen string --- 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 a1ea6ef..e40ffe4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -125,6 +125,7 @@ Name + Edit Timer Repeats must be a positive non-zero number Description Study Time From 86c7a0e6a8000222dfc0b8bcccfc3311bcb0e711 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:01:01 +0200 Subject: [PATCH 15/23] *EditScreen -> *FormScreen --- .../screens/timer_add/TimerAddRoute.kt | 40 ----------- .../screens/timer_edit/TimerEditScreen.kt | 63 ----------------- .../GetTimerFormScreen.kt} | 10 +-- .../screens/timer_form/TimerFormRoute.kt | 68 +++++++++++++++++++ .../TimerFormViewModel.kt} | 2 +- .../form_screens/AbstractTimerFormScreen.kt} | 4 +- .../form_screens/BreakTimerFormScreen.kt} | 8 +-- .../form_screens/CustomTimerFormScreen.kt} | 8 +-- .../form_screens/EndlessTimerFormScreen.kt} | 8 +-- .../TimerTypeSelectScreen.kt | 2 +- .../TimerTypeSelectViewModel.kt | 2 +- 11 files changed, 90 insertions(+), 125 deletions(-) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/GetTimerEditScreen.kt => timer_form/GetTimerFormScreen.kt} (68%) create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/TimerEditViewModel.kt => timer_form/TimerFormViewModel.kt} (94%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/editScreens/AbstractTimerEditScreen.kt => timer_form/form_screens/AbstractTimerFormScreen.kt} (94%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/editScreens/BreakTimerEditScreen.kt => timer_form/form_screens/BreakTimerFormScreen.kt} (89%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/editScreens/CustomTimerEditScreen.kt => timer_form/form_screens/CustomTimerFormScreen.kt} (79%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_edit/editScreens/EndlessTimerEditScreen.kt => timer_form/form_screens/EndlessTimerFormScreen.kt} (70%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_add => timer_form/timer_type_select}/TimerTypeSelectScreen.kt (96%) rename app/src/main/java/be/ugent/sel/studeez/screens/{timer_add => timer_form/timer_type_select}/TimerTypeSelectViewModel.kt (93%) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt deleted file mode 100644 index d656aab..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerAddRoute.kt +++ /dev/null @@ -1,40 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_add - -import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import be.ugent.sel.studeez.R -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate -import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.screens.timer_edit.GetTimerEditScreen -import be.ugent.sel.studeez.screens.timer_edit.TimerEditViewModel - -data class TimerEditActions( - val getTimerInfo: () -> TimerInfo, - val saveTimer: (TimerInfo) -> Unit -) - -fun getTimerAddActions( - viewModel: TimerEditViewModel, - goBack: () -> Unit -): TimerEditActions { - return TimerEditActions( - getTimerInfo = viewModel::getTimerInfo, - saveTimer = { timerInfo -> viewModel.saveTimer(timerInfo, goBack) } - ) -} - -@Composable -fun TimerAddRoute( - open: (String) -> Unit, - popUp: () -> Unit, - viewModel: TimerEditViewModel, -) { - - val timerEditActions = getTimerAddActions(viewModel, goBack = popUp) - - SecondaryScreenTemplate(title = stringResource(id = R.string.edit_timer), popUp = popUp) { - - val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen()) - timerEditScreen { timerEditActions.saveTimer(it) } - } -} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt deleted file mode 100644 index 68aa3a4..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditScreen.kt +++ /dev/null @@ -1,63 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_edit - -import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate -import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.R.string as AppText - -data class TimerEditActions( - val getTimerInfo: () -> TimerInfo, - val editTimer: (TimerInfo, () -> Unit) -> Unit -) - -fun getTimerEditActions( - viewModel: TimerEditViewModel, - open: (String) -> Unit -): TimerEditActions { - return TimerEditActions( - getTimerInfo = viewModel::getTimerInfo, - editTimer = viewModel::editTimer - ) -} - -@Composable -fun TimerEditRoute( - open: (String) -> Unit, - popUp: () -> Unit, - viewModel: TimerEditViewModel, -) { - - val timerEditActions = getTimerEditActions(viewModel, open) - - SecondaryScreenTemplate(title = stringResource(id = AppText.edit_timer), popUp = popUp) { - - val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen()) - timerEditScreen { timerInfo -> - timerEditActions.editTimer(timerInfo, popUp) - } - } -} - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/GetTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt similarity index 68% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/GetTimerEditScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt index b22b775..8a66919 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/GetTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt @@ -1,13 +1,13 @@ -package be.ugent.sel.studeez.screens.timer_edit +package be.ugent.sel.studeez.screens.timer_form.timer_edit import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfoVisitor -import be.ugent.sel.studeez.screens.timer_edit.editScreens.AbstractTimerEditScreen -import be.ugent.sel.studeez.screens.timer_edit.editScreens.BreakTimerEditScreen -import be.ugent.sel.studeez.screens.timer_edit.editScreens.CustomTimerEditScreen -import be.ugent.sel.studeez.screens.timer_edit.editScreens.EndlessTimerEditScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.AbstractTimerEditScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.BreakTimerEditScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.CustomTimerEditScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.EndlessTimerEditScreen class GetTimerEditScreen: TimerInfoVisitor { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt new file mode 100644 index 0000000..607116f --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt @@ -0,0 +1,68 @@ +package be.ugent.sel.studeez.screens.timer_form.timer_edit + +import androidx.annotation.StringRes +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.screens.timer_form.GetTimerFormScreen +import be.ugent.sel.studeez.screens.timer_form.TimerFormViewModel +import java.util.Timer +import be.ugent.sel.studeez.R.string as AppText + +@Composable +fun TimerAddRoute( + popUp: () -> Unit, + viewModel: TimerFormViewModel +) { + TimerFormScreen(popUp = popUp, getTimerInfo = viewModel::getTimerInfo, AppText.add_timer) { + viewModel.saveTimer(it, goBack = popUp) + } +} + +@Composable +fun TimerEditRoute( + popUp: () -> Unit, + viewModel: TimerFormViewModel +) { + TimerFormScreen(popUp = popUp, getTimerInfo = viewModel::getTimerInfo, AppText.edit_timer) { + viewModel.editTimer(it, goBack = popUp) + } +} + +@Composable +fun TimerFormScreen( + popUp: () -> Unit, + getTimerInfo: () -> TimerInfo, + @StringRes label: Int, + onConfirmClick: (TimerInfo) -> Unit +) { + val timerEditScreen = getTimerInfo().accept(GetTimerFormScreen()) + + SecondaryScreenTemplate(title = stringResource(id = label), popUp = popUp) { + timerEditScreen(onConfirmClick) + } +} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt similarity index 94% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt index b2bb172..4b9a24c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/TimerEditViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_edit +package be.ugent.sel.studeez.screens.timer_form.timer_edit import be.ugent.sel.studeez.data.EditTimerState import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/AbstractTimerFormScreen.kt similarity index 94% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/AbstractTimerFormScreen.kt index 6e38938..44043ed 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/AbstractTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/AbstractTimerFormScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_edit.editScreens +package be.ugent.sel.studeez.screens.timer_form.form_screens import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -16,7 +16,7 @@ import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.R.string as AppText -abstract class AbstractTimerEditScreen(private val timerInfo: TimerInfo) { +abstract class AbstractTimerFormScreen(private val timerInfo: TimerInfo) { @Composable operator fun invoke(onSaveClick: (TimerInfo) -> Unit) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/BreakTimerFormScreen.kt similarity index 89% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/BreakTimerFormScreen.kt index 8b00b94..12d07a4 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/BreakTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/BreakTimerFormScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_edit.editScreens +package be.ugent.sel.studeez.screens.timer_form.form_screens import androidx.compose.runtime.* import androidx.compose.ui.text.input.KeyboardType @@ -11,9 +11,9 @@ import be.ugent.sel.studeez.ui.theme.StudeezTheme import be.ugent.sel.studeez.R.string as AppText -class BreakTimerEditScreen( +class BreakTimerFormScreen( private val breakTimerInfo: PomodoroTimerInfo -): AbstractTimerEditScreen(breakTimerInfo) { +): AbstractTimerFormScreen(breakTimerInfo) { @Composable override fun ExtraFields() { @@ -50,6 +50,6 @@ fun BreakEditScreenPreview() { 5 ) StudeezTheme { - BreakTimerEditScreen(pomodoroTimerInfo).invoke(onSaveClick = {}) + BreakTimerFormScreen(pomodoroTimerInfo).invoke(onSaveClick = {}) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/CustomTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/CustomTimerFormScreen.kt similarity index 79% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/CustomTimerEditScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/CustomTimerFormScreen.kt index f3278d5..27c0657 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/CustomTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/CustomTimerFormScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_edit.editScreens +package be.ugent.sel.studeez.screens.timer_form.form_screens import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview @@ -7,9 +7,9 @@ import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo import be.ugent.sel.studeez.ui.theme.StudeezTheme import be.ugent.sel.studeez.R.string as AppText -class CustomTimerEditScreen( +class CustomTimerFormScreen( private val customTimerInfo: CustomTimerInfo - ): AbstractTimerEditScreen(customTimerInfo) { + ): AbstractTimerFormScreen(customTimerInfo) { @Composable override fun ExtraFields() { @@ -29,6 +29,6 @@ class CustomTimerEditScreen( fun CustomEditScreenPreview() { val customTimerInfo = CustomTimerInfo("custom", "my description", 25) StudeezTheme { - CustomTimerEditScreen(customTimerInfo).invoke(onSaveClick = {}) + CustomTimerFormScreen(customTimerInfo).invoke(onSaveClick = {}) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EndlessTimerEditScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/EndlessTimerFormScreen.kt similarity index 70% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EndlessTimerEditScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/EndlessTimerFormScreen.kt index 0e26209..9009fff 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EndlessTimerEditScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/form_screens/EndlessTimerFormScreen.kt @@ -1,13 +1,13 @@ -package be.ugent.sel.studeez.screens.timer_edit.editScreens +package be.ugent.sel.studeez.screens.timer_form.form_screens import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo import be.ugent.sel.studeez.ui.theme.StudeezTheme -class EndlessTimerEditScreen( +class EndlessTimerFormScreen( endlessTimerInfo: EndlessTimerInfo -): AbstractTimerEditScreen(endlessTimerInfo) { +): AbstractTimerFormScreen(endlessTimerInfo) { } @Preview @@ -18,6 +18,6 @@ fun EndlessEditScreenPreview() { "My endless timer description", ) StudeezTheme { - EndlessTimerEditScreen(endlessTimerInfo).invoke(onSaveClick = {}) + EndlessTimerFormScreen(endlessTimerInfo).invoke(onSaveClick = {}) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt similarity index 96% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt index f950c23..197f10c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_add +package be.ugent.sel.studeez.screens.timer_form.timer_add import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt similarity index 93% rename from app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt index 58d46a1..d2f048b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_add/TimerTypeSelectViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_add +package be.ugent.sel.studeez.screens.timer_form.timer_add import be.ugent.sel.studeez.data.EditTimerState import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo From 853a2d8c285ac5e4ed41b24b2c48d87df3329202 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:03:05 +0200 Subject: [PATCH 16/23] select timer type string resource and package refactor --- .../timer_form/timer_type_select/TimerTypeSelectScreen.kt | 8 +++++--- .../timer_type_select/TimerTypeSelectViewModel.kt | 4 +--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt index 197f10c..fa8d650 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_form.timer_add +package be.ugent.sel.studeez.screens.timer_form.timer_type_select import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -7,16 +7,18 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.data.local.models.timer_info.* +import be.ugent.sel.studeez.R.string as AppText import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.CUSTOM import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.BREAK import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.ENDLESS val defaultTimerInfo: Map = mapOf( CUSTOM to CustomTimerInfo("", "", 0), - BREAK to PomodoroTimerInfo("", "", 0, 0, 0), + BREAK to PomodoroTimerInfo("", "", 0, 0, 1), ENDLESS to EndlessTimerInfo("", ""), ) @@ -28,7 +30,7 @@ fun TimerTypeSelectScreen( viewModel: TimerTypeSelectViewModel = hiltViewModel() ) { - SecondaryScreenTemplate(title = "Edit Timer", popUp = popUp) { + SecondaryScreenTemplate(title = stringResource(id = AppText.timer_type_select), popUp = popUp) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxWidth() diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt index d2f048b..569a36c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/timer_type_select/TimerTypeSelectViewModel.kt @@ -1,13 +1,11 @@ -package be.ugent.sel.studeez.screens.timer_form.timer_add +package be.ugent.sel.studeez.screens.timer_form.timer_type_select import be.ugent.sel.studeez.data.EditTimerState 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 import javax.inject.Inject @HiltViewModel From 7f615c94a1b9733f65a26bf5b8b274150ecaa584 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:03:53 +0200 Subject: [PATCH 17/23] GetTimerEditScreen -> GetTimerFormScreen --- .../screens/timer_form/GetTimerFormScreen.kt | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt index 8a66919..99426e4 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/GetTimerFormScreen.kt @@ -1,26 +1,26 @@ -package be.ugent.sel.studeez.screens.timer_form.timer_edit +package be.ugent.sel.studeez.screens.timer_form import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfoVisitor -import be.ugent.sel.studeez.screens.timer_form.form_screens.AbstractTimerEditScreen -import be.ugent.sel.studeez.screens.timer_form.form_screens.BreakTimerEditScreen -import be.ugent.sel.studeez.screens.timer_form.form_screens.CustomTimerEditScreen -import be.ugent.sel.studeez.screens.timer_form.form_screens.EndlessTimerEditScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.AbstractTimerFormScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.BreakTimerFormScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.CustomTimerFormScreen +import be.ugent.sel.studeez.screens.timer_form.form_screens.EndlessTimerFormScreen -class GetTimerEditScreen: TimerInfoVisitor { +class GetTimerFormScreen: TimerInfoVisitor { - override fun visitCustomTimerInfo(customTimerInfo: CustomTimerInfo): AbstractTimerEditScreen { - return CustomTimerEditScreen(customTimerInfo) + override fun visitCustomTimerInfo(customTimerInfo: CustomTimerInfo): AbstractTimerFormScreen { + return CustomTimerFormScreen(customTimerInfo) } - override fun visitEndlessTimerInfo(endlessTimerInfo: EndlessTimerInfo): AbstractTimerEditScreen { - return EndlessTimerEditScreen(endlessTimerInfo) + override fun visitEndlessTimerInfo(endlessTimerInfo: EndlessTimerInfo): AbstractTimerFormScreen { + return EndlessTimerFormScreen(endlessTimerInfo) } - override fun visitBreakTimerInfo(pomodoroTimerInfo: PomodoroTimerInfo): AbstractTimerEditScreen { - return BreakTimerEditScreen(pomodoroTimerInfo) + override fun visitBreakTimerInfo(pomodoroTimerInfo: PomodoroTimerInfo): AbstractTimerFormScreen { + return BreakTimerFormScreen(pomodoroTimerInfo) } From 51af1f576625818eadf7a6e8776609eb648d6827 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:04:52 +0200 Subject: [PATCH 18/23] edit route en add route staan in dezelfde TimerFormRoute File --- .../sel/studeez/screens/timer_form/TimerFormRoute.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt index 607116f..7ad21fa 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt @@ -1,13 +1,10 @@ -package be.ugent.sel.studeez.screens.timer_form.timer_edit +package be.ugent.sel.studeez.screens.timer_form import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.screens.timer_form.GetTimerFormScreen -import be.ugent.sel.studeez.screens.timer_form.TimerFormViewModel -import java.util.Timer import be.ugent.sel.studeez.R.string as AppText @Composable @@ -37,10 +34,10 @@ fun TimerFormScreen( @StringRes label: Int, onConfirmClick: (TimerInfo) -> Unit ) { - val timerEditScreen = getTimerInfo().accept(GetTimerFormScreen()) + val timerFormScreen = getTimerInfo().accept(GetTimerFormScreen()) SecondaryScreenTemplate(title = stringResource(id = label), popUp = popUp) { - timerEditScreen(onConfirmClick) + timerFormScreen(onConfirmClick) } } From 2556e1c658c759473b87860b10fc6b2693f89b68 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:05:27 +0200 Subject: [PATCH 19/23] TimerFormViewModel ipv TimerEditViewModel --- .../sel/studeez/screens/timer_form/TimerFormViewModel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt index 4b9a24c..4c2079c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormViewModel.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.timer_form.timer_edit +package be.ugent.sel.studeez.screens.timer_form import be.ugent.sel.studeez.data.EditTimerState import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo @@ -9,7 +9,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class TimerEditViewModel @Inject constructor( +class TimerFormViewModel @Inject constructor( private val editTimerState: EditTimerState, private val timerDAO: TimerDAO, logService: LogService From 6144afe03f2bbf988baa98618fada29c78539a5e Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:06:13 +0200 Subject: [PATCH 20/23] TimerEditRoute en TimerAddRoute staan op andere plaatsen --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 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 402a2bc..c002c61 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -32,11 +32,10 @@ import be.ugent.sel.studeez.screens.sessions.SessionsRoute import be.ugent.sel.studeez.screens.settings.SettingsRoute import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute -import be.ugent.sel.studeez.screens.timer_add.TimerAddRoute -import be.ugent.sel.studeez.screens.timer_add.TimerTypeSelectScreen -import be.ugent.sel.studeez.screens.timer_edit.TimerEditRoute +import be.ugent.sel.studeez.screens.timer_form.timer_type_select.TimerTypeSelectScreen +import be.ugent.sel.studeez.screens.timer_form.TimerAddRoute +import be.ugent.sel.studeez.screens.timer_form.TimerEditRoute import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute -import be.ugent.sel.studeez.screens.timer_overview.add_timer.AddTimerRoute import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -209,7 +208,6 @@ fun StudeezNavGraph( composable(StudeezDestinations.ADD_TIMER_SCREEN) { TimerAddRoute( - open = open, popUp = goBack, viewModel = hiltViewModel() ) @@ -217,7 +215,6 @@ fun StudeezNavGraph( composable(StudeezDestinations.TIMER_EDIT_SCREEN) { TimerEditRoute( - open = open, popUp = goBack, viewModel = hiltViewModel() ) From d087783e12b4514054224c4a5268bc952bef1ab8 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:06:50 +0200 Subject: [PATCH 21/23] timer type select resource --- app/src/main/res/values/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e40ffe4..263dc69 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -123,6 +123,9 @@ " minutes of studytime" How long do you want to study? + + Select Timer Type + Name Edit Timer From 0b1ff3f02dfa8fed23ddd16fa42d48a83ebaf86f Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 00:09:52 +0200 Subject: [PATCH 22/23] removed previous add screen --- .../add_timer/AddTimerUiState.kt | 12 - .../add_timer/AddTimerViewModel.kt | 91 ------ .../add_timer/addTimerScreen.kt | 274 ------------------ 3 files changed, 377 deletions(-) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerUiState.kt delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerViewModel.kt delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/addTimerScreen.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerUiState.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerUiState.kt deleted file mode 100644 index fcfa79a..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerUiState.kt +++ /dev/null @@ -1,12 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_overview.add_timer - -data class AddTimerUiState( - val studyTimeHours: Int = 1, - val studyTimeMinutes: Int = 0, - val withBreaks: Boolean = false, - val breakTimeMinutes: Int = 5, - val breakTimeHours: Int = 0, - val repeats: Int = 1, - val name: String = "Timer", - val description: String = "Long study session", -) \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerViewModel.kt deleted file mode 100644 index d507974..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/AddTimerViewModel.kt +++ /dev/null @@ -1,91 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_overview.add_timer - -import androidx.compose.runtime.mutableStateOf -import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo -import be.ugent.sel.studeez.data.local.models.timer_info.PomodoroTimerInfo -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 javax.inject.Inject - -@HiltViewModel -class AddTimerViewModel @Inject constructor( - logService: LogService, - private val timerDAO: TimerDAO, -): StudeezViewModel(logService) { - var uiState = mutableStateOf(AddTimerUiState()) - private set - - private val studyTimeHours - get() = uiState.value.studyTimeHours - - private val studyTimeMinutes - get() = uiState.value.studyTimeMinutes - - private val breakTimeHours - get() = uiState.value.breakTimeHours - - private val breakTimeMinutes - get() = uiState.value.breakTimeMinutes - - private val repeats - get() = uiState.value.repeats - - private val name - get() = uiState.value.name - - private val description - get() = uiState.value.description - - fun onStudyTimeHoursChange(newValue: Int) { - uiState.value = uiState.value.copy(studyTimeHours = newValue) - - } - - fun onStudyTimeMinutesChange(newValue: Int) { - uiState.value = uiState.value.copy(studyTimeMinutes = newValue) - } - - fun onWithBreaksChange() { - uiState.value = uiState.value.copy(withBreaks = !uiState.value.withBreaks) - } - - fun onBreakTimeHourChange(newValue: Int) { - uiState.value = uiState.value.copy(breakTimeHours = newValue) - } - - fun onBreakTimeMinutesChange(newValue: Int) { - uiState.value = uiState.value.copy(breakTimeMinutes = newValue) - } - - fun onRepeatsChange(newValue: Int) { - uiState.value = uiState.value.copy(repeats = newValue) - } - - fun addTimer() { - if (uiState.value.withBreaks) { - timerDAO.saveTimer(PomodoroTimerInfo( - name = uiState.value.name, - description = uiState.value.description, - studyTime = studyTimeHours * 60 * 60 + studyTimeMinutes * 60, - breakTime = breakTimeHours * 60 * 60 + breakTimeMinutes * 60, - repeats = repeats - )) - } else { - timerDAO.saveTimer(CustomTimerInfo( - name = uiState.value.name, - description = uiState.value.description, - studyTime = studyTimeHours * 60 * 60 + studyTimeMinutes * 60 - )) - } - } - - fun onNameChange(newValue: String) { - uiState.value = uiState.value.copy(name = newValue) - } - - fun onDescriptionChange(newValue: String) { - uiState.value = uiState.value.copy(description = newValue) - } -} diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/addTimerScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/addTimerScreen.kt deleted file mode 100644 index dc7bbda..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/add_timer/addTimerScreen.kt +++ /dev/null @@ -1,274 +0,0 @@ -package be.ugent.sel.studeez.screens.timer_overview.add_timer - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.Button -import androidx.compose.material.Checkbox -import androidx.compose.material.Text -import androidx.compose.material.TextField -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource -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.R -import be.ugent.sel.studeez.common.composable.BasicButton -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate -import be.ugent.sel.studeez.common.composable.navbar.BasicTimePicker -import be.ugent.sel.studeez.navigation.StudeezDestinations -import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.ui.theme.StudeezTheme - -data class AddTimerActions( - val open: (String) -> Unit, - val goBack: () -> Unit, - val onStudyTimeHoursChange: (Int) -> Unit, - val onStudyTimeMinutesChange: (Int) -> Unit, - val onBreakTimeHourChange: (Int) -> Unit, - val onBreakTimeMinutesChange: (Int) -> Unit, - val onRepeatsChange: (Int) -> Unit, - val onWithBreaksChange: () -> Unit, - val addTimer: () -> Unit, - val onNameChange: (String) -> Unit, - val onDescriptionChange: (String) -> Unit, -) - -fun getAddTimerActions( - open: (String) -> Unit, - goBack: () -> Unit, - viewModel: AddTimerViewModel, -): AddTimerActions { - return AddTimerActions( - open = open, - goBack = goBack, - onWithBreaksChange = viewModel::onWithBreaksChange, - onStudyTimeHoursChange = viewModel::onStudyTimeHoursChange, - onStudyTimeMinutesChange = viewModel::onStudyTimeMinutesChange, - onBreakTimeHourChange = viewModel::onBreakTimeHourChange, - onBreakTimeMinutesChange = viewModel::onBreakTimeMinutesChange, - onRepeatsChange = viewModel::onRepeatsChange, - addTimer = viewModel::addTimer, - onNameChange = viewModel::onNameChange, - onDescriptionChange = viewModel::onDescriptionChange - ) -} - -@Composable -fun AddTimerRoute( - open: (String) -> Unit, - goBack: () -> Unit, - viewModel: AddTimerViewModel, -) { - val uiState by viewModel.uiState - - AddTimerScreen( - addTimerActions = getAddTimerActions( - open = open, - goBack = goBack, - viewModel = viewModel, - ), - uiState = uiState - ) -} - -@Composable -fun AddTimerScreen( - addTimerActions: AddTimerActions, - uiState: AddTimerUiState, -) { - val mStudyTimePicker = BasicTimePicker( - onHoursChange = addTimerActions.onStudyTimeHoursChange, - onMinutesChange = addTimerActions.onStudyTimeMinutesChange, - Hours = uiState.studyTimeHours, - Minutes = uiState.studyTimeMinutes - ) - - val mBreakTimePicker = BasicTimePicker( - onHoursChange = addTimerActions.onBreakTimeHourChange, - onMinutesChange = addTimerActions.onBreakTimeMinutesChange, - Hours = uiState.breakTimeHours, - Minutes = uiState.breakTimeMinutes - ) - - SecondaryScreenTemplate( - title = resources().getString(R.string.add_timer), - popUp = addTimerActions.goBack - ) { - LazyColumn( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - item { - Row( - modifier = Modifier - .padding(16.dp) - ) { - Text( - text = stringResource(R.string.addTimer_question), - textAlign = TextAlign.Center - ) - } - } - - item { - Text( - text = uiState.studyTimeHours.toString() + stringResource(R.string.addTimer_studytime_1) + uiState.studyTimeMinutes + stringResource( - R.string.addTimer_studytime_2) - ) - } - - item { - Button( - onClick = { - mStudyTimePicker.show() - }, - ) { - Text( - text = stringResource(R.string.addTimer_timepicker), - ) - } - } - - item { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Center - ) { - Text( - text = stringResource(R.string.addTimer_break_question), - ) - Checkbox( - checked = uiState.withBreaks, - onCheckedChange = { addTimerActions.onWithBreaksChange() } - ) - } - } - - if (uiState.withBreaks) { - item { - Text( - text = if (uiState.repeats == 1) uiState.repeats.toString() + stringResource( - R.string.addTimer_break_1) - else uiState.repeats.toString() + stringResource( - R.string.addTimer_break_s) - ) - TextField( - value = uiState.repeats.toString(), - onValueChange = { it: String -> - it.toIntOrNull()?.let { it1 -> - addTimerActions.onRepeatsChange( - kotlin.math.abs(it1) - ) - } - } - ) - } - - item { - Text( - text = uiState.breakTimeHours.toString() + stringResource(R.string.breakTime_1) + uiState.breakTimeMinutes + stringResource( - R.string.breakTime_2) - ) - } - - item { - Button( - onClick = { - mBreakTimePicker.show() - }, - ) { - Text( - text = stringResource(R.string.addTimer_timepicker), - ) - } - } - } - - item { - Text( - text = stringResource(R.string.addTimer_name) - ) - } - - item { - TextField( - value = uiState.name, - onValueChange = { addTimerActions.onNameChange(it) } - ) - } - - item { - if (uiState.name == "") { - Text( - text = stringResource(R.string.addTimer_name_error), - color = Color.Red - ) - } - } - - item { - Text( - text = stringResource(R.string.addTimer_description) - ) - } - - item { - TextField( - value = uiState.description, - onValueChange = { addTimerActions.onDescriptionChange(it) } - ) - } - - item { - if (uiState.description == "") { - Text( - text = stringResource(R.string.addTimer_description_error), - color = Color.Red - ) - } - } - - item { - Row( - modifier = Modifier - .fillMaxWidth() - .fillMaxHeight(), - verticalAlignment = Alignment.Bottom, - horizontalArrangement = Arrangement.Center - ) { - BasicButton( - text = R.string.add_timer, - modifier = Modifier, - onClick = { - if (uiState.description != "" && uiState.name != "") { - addTimerActions.addTimer() - addTimerActions.open(StudeezDestinations.TIMER_SCREEN) - } - } - ) - } - } - } - } -} - -@Preview -@Composable -fun AddTimerScreenPreview() { StudeezTheme { - AddTimerScreen( - addTimerActions = AddTimerActions({}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}), - uiState = AddTimerUiState() - ) - } -} From 620722038d0733b15f58953bd6cce875a025afbb Mon Sep 17 00:00:00 2001 From: lbarraga Date: Fri, 5 May 2023 08:27:10 +0200 Subject: [PATCH 23/23] Update app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt Co-authored-by: Tibo De Peuter --- .../screens/timer_form/TimerFormRoute.kt | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt index 7ad21fa..0323dc2 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_form/TimerFormRoute.kt @@ -40,26 +40,3 @@ fun TimerFormScreen( timerFormScreen(onConfirmClick) } } - - - - - - - - - - - - - - - - - - - - - - -