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.data.local.models.timer_functional.HoursMinutesSeconds
 | 
			
		||||
import be.ugent.sel.studeez.ui.theme.StudeezTheme
 | 
			
		||||
import com.commandiron.wheel_picker_compose.WheelTimePicker
 | 
			
		||||
import java.util.*
 | 
			
		||||
 | 
			
		||||
@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 ->
 | 
			
		||||
        timeState.value = hour * 60 * 60 + minute * 60
 | 
			
		||||
        nextStep(timeState.value)
 | 
			
		||||
        timeState.value = HoursMinutesSeconds(hour, minute, 0).getTotalSeconds()
 | 
			
		||||
        onTimeChosen(timeState.value)
 | 
			
		||||
    }
 | 
			
		||||
    val mCalendar = Calendar.getInstance()
 | 
			
		||||
    val mHour = mCalendar[Calendar.HOUR]
 | 
			
		||||
    val mMinute = mCalendar[Calendar.MINUTE]
 | 
			
		||||
    val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true)
 | 
			
		||||
    val hms = HoursMinutesSeconds(timeState.value)
 | 
			
		||||
    val mTimePickerDialog = TimePickerDialog(
 | 
			
		||||
        context,
 | 
			
		||||
        listener,
 | 
			
		||||
        hms.hours,
 | 
			
		||||
        hms.minutes,
 | 
			
		||||
        true
 | 
			
		||||
    )
 | 
			
		||||
    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