From e592a6acc08bcaad4382c3c58473a7bf53326b83 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 1 May 2023 13:02:29 +0200 Subject: [PATCH] #30 hierarchical edit screen structure --- .../editScreens/AbstractTimerEditScreen.kt | 58 ++++++++++++++++++- .../editScreens/BreakTimerEditScreen.kt | 27 ++++++++- .../editScreens/CustomTimerEditScreen.kt | 31 +++++++++- .../editScreens/EndlessTimerEditScreen.kt | 4 +- 4 files changed, 114 insertions(+), 6 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 59b04e7..eedaa78 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 @@ -1,4 +1,58 @@ -package be.ugent.sel.studeez.screens.timer_edit +package be.ugent.sel.studeez.screens.timer_edit.editScreens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.OutlinedTextField +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import be.ugent.sel.studeez.R +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.common.ext.fieldModifier +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo + +abstract class AbstractTimerEditScreen(private val timerInfo: TimerInfo) { + + @Composable + operator fun invoke(onSaveClick: (TimerInfo) -> Unit) { + // TODO klassen hierarchie voor uistate + // TODO klassen extras implementeren + + Column( + modifier = Modifier.fillMaxWidth().fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + + // Fields that every timer shares (ommited id) + LabelledInputField( + value = timerInfo.name, + onNewValue = {}, + label = R.string.name + ) + LabelledInputField( + value = timerInfo.description, + onNewValue = {}, + label = R.string.description, + singleLine = false + ) + + ExtraFields() + + BasicButton(R.string.save, Modifier.basicButton()) { + onSaveClick(timerInfo) + } + } + } + + @Composable + open fun ExtraFields() { + // By default no extra fields, unless overwritten by subclass. + } -abstract class AbstractTimerEditScreen { } \ No newline at end of file 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 1405682..f00e9f6 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,4 +1,29 @@ package be.ugent.sel.studeez.screens.timer_edit.editScreens -class BreakTimerEditScreen { +import androidx.compose.runtime.* +import be.ugent.sel.studeez.common.composable.TimePickerButton +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.PomodoroTimerInfo + +class BreakTimerEditScreen( + private val breakTimerInfo: PomodoroTimerInfo +): AbstractTimerEditScreen(breakTimerInfo) { + + @Composable + override fun ExtraFields() { + // If the user presses the OK button on the timepicker, the time in the button should change + var studyTime: Int by remember { mutableStateOf(breakTimerInfo.studyTime) } + var breakTime: Int by remember { mutableStateOf(breakTimerInfo.breakTime) } + + val breakHms: HoursMinutesSeconds = Time(breakTime).getAsHMS() + val studyHms: HoursMinutesSeconds = Time(studyTime).getAsHMS() + TimePickerButton(studyHms) { _, hour, minute -> + studyTime = hour * 60 * 60 + minute * 60 + } + TimePickerButton(breakHms) { _, hour, minute -> + breakTime = hour * 60 * 60 + minute * 60 + } + } + } \ 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_edit/editScreens/CustomTimerEditScreen.kt index bbe66ec..3e2e234 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_edit/editScreens/CustomTimerEditScreen.kt @@ -1,4 +1,31 @@ -package be.ugent.sel.studeez.screens.timer_edit +package be.ugent.sel.studeez.screens.timer_edit.editScreens -class CustomTimerEditScreen { +import androidx.compose.runtime.* +import androidx.compose.ui.tooling.preview.Preview +import be.ugent.sel.studeez.common.composable.TimePickerButton +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 + +class CustomTimerEditScreen(private val customTimerInfo: CustomTimerInfo): AbstractTimerEditScreen(customTimerInfo) { + + @Composable + override fun ExtraFields() { + // If the user presses the OK button on the timepicker, the time in the button should change + var studyTime by remember { mutableStateOf(customTimerInfo.studyTime) } + + val hms: HoursMinutesSeconds = Time(studyTime).getAsHMS() + TimePickerButton(hms) { _, hour, minute -> + studyTime = hour * 60 * 60 + minute * 60 + } + } + + +} + +@Preview +@Composable +fun TimePickerPreview() { + val customTimerInfo = CustomTimerInfo("custom", "my description", 25) + CustomTimerEditScreen(customTimerInfo).ExtraFields() } \ 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_edit/editScreens/EndlessTimerEditScreen.kt index 5c6263d..0f5b30a 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_edit/editScreens/EndlessTimerEditScreen.kt @@ -1,4 +1,6 @@ package be.ugent.sel.studeez.screens.timer_edit.editScreens -class EndlessTimerEditScreen { +import be.ugent.sel.studeez.data.local.models.timer_info.EndlessTimerInfo + +class EndlessTimerEditScreen(endlessTimerInfo: EndlessTimerInfo): AbstractTimerEditScreen(endlessTimerInfo) { } \ No newline at end of file