time picker composable shows picked hour and not current hour
This commit is contained in:
parent
e0f46d676b
commit
8e3cca531a
5 changed files with 153 additions and 7 deletions
|
@ -22,6 +22,7 @@ import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.ext.fieldModifier
|
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 be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||||
|
import com.commandiron.wheel_picker_compose.WheelTimePicker
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -80,15 +81,19 @@ fun TimePickerButton(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun pickDuration(context: Context, nextStep: (Int) -> Unit, timeState: MutableState<Int>) {
|
private fun pickDuration(context: Context, onTimeChosen: (Int) -> Unit, timeState: MutableState<Int>) {
|
||||||
val listener = OnTimeSetListener { _, hour, minute ->
|
val listener = OnTimeSetListener { _, hour, minute ->
|
||||||
timeState.value = hour * 60 * 60 + minute * 60
|
timeState.value = HoursMinutesSeconds(hour, minute, 0).getTotalSeconds()
|
||||||
nextStep(timeState.value)
|
onTimeChosen(timeState.value)
|
||||||
}
|
}
|
||||||
val mCalendar = Calendar.getInstance()
|
val hms = HoursMinutesSeconds(timeState.value)
|
||||||
val mHour = mCalendar[Calendar.HOUR]
|
val mTimePickerDialog = TimePickerDialog(
|
||||||
val mMinute = mCalendar[Calendar.MINUTE]
|
context,
|
||||||
val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true)
|
listener,
|
||||||
|
hms.hours,
|
||||||
|
hms.minutes,
|
||||||
|
true
|
||||||
|
)
|
||||||
mTimePickerDialog.show()
|
mTimePickerDialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_add
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
import be.ugent.sel.studeez.screens.timer_edit.GetTimerEditScreen
|
||||||
|
import be.ugent.sel.studeez.screens.timer_edit.TimerEditViewModel
|
||||||
|
import be.ugent.sel.studeez.screens.timer_edit.editScreens.AbstractTimerEditScreen
|
||||||
|
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||||
|
|
||||||
|
data class TimerEditActions(
|
||||||
|
val getTimerInfo: () -> TimerInfo,
|
||||||
|
val saveTimer: (TimerInfo, () -> Unit) -> Unit
|
||||||
|
)
|
||||||
|
|
||||||
|
fun getTimerEditActions(
|
||||||
|
viewModel: TimerEditViewModel,
|
||||||
|
open: (String) -> Unit
|
||||||
|
): TimerEditActions {
|
||||||
|
return TimerEditActions(
|
||||||
|
getTimerInfo = viewModel::getTimerInfo,
|
||||||
|
saveTimer = viewModel::saveTimer
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun TimerEditRoute(
|
||||||
|
open: (String) -> Unit,
|
||||||
|
popUp: () -> Unit,
|
||||||
|
viewModel: TimerEditViewModel,
|
||||||
|
) {
|
||||||
|
|
||||||
|
val timerEditActions = getTimerEditActions(viewModel, open)
|
||||||
|
|
||||||
|
SecondaryScreenTemplate(title = "Edit Timer", popUp = popUp) {
|
||||||
|
|
||||||
|
val timerEditScreen = timerEditActions.getTimerInfo().accept(GetTimerEditScreen())
|
||||||
|
timerEditScreen { timerInfo ->
|
||||||
|
timerEditActions.saveTimer(timerInfo, popUp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_add
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.EditTimerState
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
|
import be.ugent.sel.studeez.domain.TimerDAO
|
||||||
|
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class TimerAddViewModel @Inject constructor(
|
||||||
|
private val editTimerState: EditTimerState,
|
||||||
|
private val timerDAO: TimerDAO,
|
||||||
|
logService: LogService
|
||||||
|
) : StudeezViewModel(logService) {
|
||||||
|
|
||||||
|
private val timerInfo: TimerInfo = editTimerState.timerInfo
|
||||||
|
|
||||||
|
fun getTimerInfo(): TimerInfo {
|
||||||
|
return timerInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
fun saveTimer(timerInfo: TimerInfo, goBack: () -> Unit) {
|
||||||
|
timerDAO.updateTimer(timerInfo)
|
||||||
|
goBack()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_add
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.material.Button
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
|
import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.*
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.CUSTOM
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.BREAK
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerType.ENDLESS
|
||||||
|
|
||||||
|
val defaultTimerInfo: Map<TimerType, TimerInfo> = mapOf(
|
||||||
|
CUSTOM to CustomTimerInfo("", "", 0),
|
||||||
|
BREAK to PomodoroTimerInfo("", "", 0, 0, 0),
|
||||||
|
ENDLESS to EndlessTimerInfo("", ""),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun TimerTypeSelectScreen(
|
||||||
|
open: (String) -> Unit,
|
||||||
|
popUp: () -> Unit,
|
||||||
|
viewModel: TimerTypeSelectViewModel = hiltViewModel()
|
||||||
|
) {
|
||||||
|
|
||||||
|
SecondaryScreenTemplate(title = "Edit Timer", popUp = popUp) {
|
||||||
|
Column(
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
TimerType.values().forEach { timerType ->
|
||||||
|
Button(onClick = { viewModel.onTimerTypeChosen(defaultTimerInfo[timerType]!!, open) }) {
|
||||||
|
Text(text = timerType.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_add
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.EditTimerState
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
|
import be.ugent.sel.studeez.domain.TimerDAO
|
||||||
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
|
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class TimerTypeSelectViewModel @Inject constructor(
|
||||||
|
private val editTimerState: EditTimerState,
|
||||||
|
private val timerDAO: TimerDAO,
|
||||||
|
logService: LogService
|
||||||
|
) : StudeezViewModel(logService) {
|
||||||
|
|
||||||
|
|
||||||
|
fun onTimerTypeChosen(timerInfo: TimerInfo, open: (String) -> Unit) {
|
||||||
|
editTimerState.timerInfo = timerInfo
|
||||||
|
open(StudeezDestinations.TIMER_EDIT_SCREEN)
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue