From 360097cfc5d4c4cb4a3b730b7bd293426b617807 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 1 May 2023 17:50:22 +0200 Subject: [PATCH] added timepicker card --- .../composable/TimePickerButtonComposable.kt | 86 ++++++++++++++++--- .../editScreens/EditScreenUIState.kt | 4 + 2 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EditScreenUIState.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimePickerButtonComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimePickerButtonComposable.kt index 869d724..eab0d35 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/TimePickerButtonComposable.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TimePickerButtonComposable.kt @@ -3,45 +3,107 @@ package be.ugent.sel.studeez.common.composable import android.app.TimePickerDialog import android.app.TimePickerDialog.OnTimeSetListener import android.content.Context +import androidx.annotation.StringRes import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button -import androidx.compose.material.ButtonColors -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Text -import androidx.compose.runtime.Composable +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +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.ext.fieldModifier import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds +import be.ugent.sel.studeez.ui.theme.StudeezTheme import java.util.* -// TODO codeduplicatie met Tibo, later wegdoen +@Composable +fun TimePickerCard( + @StringRes text: Int, + initialSeconds: Int, + onTimeChosen: (Int) -> Unit +) { + Card( + modifier = Modifier + .fillMaxWidth() + .fieldModifier(), + elevation = 10.dp + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .fieldModifier(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(id = text), + fontWeight = FontWeight.Medium + ) + + TimePickerButton( + initialSeconds = initialSeconds, + onTimeChosen = onTimeChosen + ) + } + } +} + @Composable fun TimePickerButton( - hoursMinutesSeconds: HoursMinutesSeconds, + initialSeconds: Int, modifier: Modifier = Modifier, colors: ButtonColors = ButtonDefaults.buttonColors(), border: BorderStroke? = null, - onTimeSetListener: OnTimeSetListener + onTimeChosen: (Int) -> Unit ) { val context = LocalContext.current + val timeState: MutableState = remember { + mutableStateOf(initialSeconds) + } + Button( - onClick = { pickDuration(context, onTimeSetListener) }, + onClick = { pickDuration(context, onTimeChosen, timeState) }, modifier = modifier, shape = RoundedCornerShape(20.dp), colors = colors, border = border ) { - Text(text = hoursMinutesSeconds.toString()) + Text(text = HoursMinutesSeconds(timeState.value).toString()) } } -// TODO idem codedup Tibo -private fun pickDuration(context: Context, listener: OnTimeSetListener) { +private fun pickDuration(context: Context, nextStep: (Int) -> Unit, timeState: MutableState) { + val listener = OnTimeSetListener { _, hour, minute -> + timeState.value = hour * 60 * 60 + minute * 60 + nextStep(timeState.value) + } val mCalendar = Calendar.getInstance() val mHour = mCalendar[Calendar.HOUR] val mMinute = mCalendar[Calendar.MINUTE] val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true) mTimePickerDialog.show() +} + +@Preview +@Composable +fun TimePickerButtonPreview() { + StudeezTheme { + TimePickerButton(initialSeconds = 5 * 60 + 12, onTimeChosen = {}) + } +} + +@Preview +@Composable +fun TimePickerCardPreview() { + StudeezTheme { + TimePickerCard(text = R.string.studyTime, initialSeconds = 5 * 60 + 12, onTimeChosen = {}) + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EditScreenUIState.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EditScreenUIState.kt new file mode 100644 index 0000000..219c06b --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_edit/editScreens/EditScreenUIState.kt @@ -0,0 +1,4 @@ +package be.ugent.sel.studeez.screens.timer_edit.editScreens + +class EditScreenUIState { +} \ No newline at end of file