#30 hierarchical edit screen structure
This commit is contained in:
parent
dfbc99ba38
commit
e592a6acc0
4 changed files with 114 additions and 6 deletions
|
@ -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 {
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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()
|
||||
}
|
|
@ -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) {
|
||||
}
|
Reference in a new issue