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
	
	 Lukas Barragan Torres
						Lukas Barragan Torres