added timepicker card
This commit is contained in:
parent
e4fc0a9a07
commit
360097cfc5
2 changed files with 78 additions and 12 deletions
|
@ -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 = {})
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_edit.editScreens
|
||||||
|
|
||||||
|
class EditScreenUIState {
|
||||||
|
}
|
Reference in a new issue