#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
|
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
|
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