added timepicker card

This commit is contained in:
lbarraga 2023-05-01 17:50:22 +02:00
parent e4fc0a9a07
commit 360097cfc5
2 changed files with 78 additions and 12 deletions

View file

@ -3,45 +3,107 @@ package be.ugent.sel.studeez.common.composable
import android.app.TimePickerDialog import android.app.TimePickerDialog
import android.app.TimePickerDialog.OnTimeSetListener import android.app.TimePickerDialog.OnTimeSetListener
import android.content.Context import android.content.Context
import androidx.annotation.StringRes
import androidx.compose.foundation.BorderStroke 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.foundation.shape.RoundedCornerShape
import androidx.compose.material.Button import androidx.compose.material.*
import androidx.compose.material.ButtonColors import androidx.compose.runtime.*
import androidx.compose.material.ButtonDefaults import androidx.compose.ui.Alignment
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext 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 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.data.local.models.timer_functional.HoursMinutesSeconds
import be.ugent.sel.studeez.ui.theme.StudeezTheme
import java.util.* 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 @Composable
fun TimePickerButton( fun TimePickerButton(
hoursMinutesSeconds: HoursMinutesSeconds, initialSeconds: Int,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
colors: ButtonColors = ButtonDefaults.buttonColors(), colors: ButtonColors = ButtonDefaults.buttonColors(),
border: BorderStroke? = null, border: BorderStroke? = null,
onTimeSetListener: OnTimeSetListener onTimeChosen: (Int) -> Unit
) { ) {
val context = LocalContext.current val context = LocalContext.current
val timeState: MutableState<Int> = remember {
mutableStateOf(initialSeconds)
}
Button( Button(
onClick = { pickDuration(context, onTimeSetListener) }, onClick = { pickDuration(context, onTimeChosen, timeState) },
modifier = modifier, modifier = modifier,
shape = RoundedCornerShape(20.dp), shape = RoundedCornerShape(20.dp),
colors = colors, colors = colors,
border = border border = border
) { ) {
Text(text = hoursMinutesSeconds.toString()) Text(text = HoursMinutesSeconds(timeState.value).toString())
} }
} }
// TODO idem codedup Tibo private fun pickDuration(context: Context, nextStep: (Int) -> Unit, timeState: MutableState<Int>) {
private fun pickDuration(context: Context, listener: OnTimeSetListener) { val listener = OnTimeSetListener { _, hour, minute ->
timeState.value = hour * 60 * 60 + minute * 60
nextStep(timeState.value)
}
val mCalendar = Calendar.getInstance() val mCalendar = Calendar.getInstance()
val mHour = mCalendar[Calendar.HOUR] val mHour = mCalendar[Calendar.HOUR]
val mMinute = mCalendar[Calendar.MINUTE] val mMinute = mCalendar[Calendar.MINUTE]
val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true) val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true)
mTimePickerDialog.show() 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 = {})
}
} }

View file

@ -0,0 +1,4 @@
package be.ugent.sel.studeez.screens.timer_edit.editScreens
class EditScreenUIState {
}