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.OnTimeSetListener | ||||
| import android.content.Context | ||||
| import androidx.annotation.StringRes | ||||
| 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.material.Button | ||||
| import androidx.compose.material.ButtonColors | ||||
| import androidx.compose.material.ButtonDefaults | ||||
| import androidx.compose.material.Text | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.material.* | ||||
| import androidx.compose.runtime.* | ||||
| import androidx.compose.ui.Alignment | ||||
| import androidx.compose.ui.Modifier | ||||
| 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 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 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 | ||||
| fun TimePickerButton( | ||||
|     hoursMinutesSeconds: HoursMinutesSeconds, | ||||
|     initialSeconds: Int, | ||||
|     modifier: Modifier = Modifier, | ||||
|     colors: ButtonColors = ButtonDefaults.buttonColors(), | ||||
|     border: BorderStroke? = null, | ||||
|     onTimeSetListener: OnTimeSetListener | ||||
|     onTimeChosen: (Int) -> Unit | ||||
| ) { | ||||
|     val context = LocalContext.current | ||||
|     val timeState: MutableState<Int> = remember { | ||||
|         mutableStateOf(initialSeconds) | ||||
|     } | ||||
| 
 | ||||
|     Button( | ||||
|         onClick = { pickDuration(context, onTimeSetListener) }, | ||||
|         onClick = { pickDuration(context, onTimeChosen, timeState) }, | ||||
|         modifier = modifier, | ||||
|         shape = RoundedCornerShape(20.dp), | ||||
|         colors = colors, | ||||
|         border = border | ||||
|     ) { | ||||
|         Text(text = hoursMinutesSeconds.toString()) | ||||
|         Text(text = HoursMinutesSeconds(timeState.value).toString()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // TODO idem codedup Tibo | ||||
| private fun pickDuration(context: Context, listener: OnTimeSetListener) { | ||||
| private fun pickDuration(context: Context, nextStep: (Int) -> Unit, timeState: MutableState<Int>) { | ||||
|     val listener = OnTimeSetListener { _, hour, minute -> | ||||
|         timeState.value = hour * 60 * 60 + minute * 60 | ||||
|         nextStep(timeState.value) | ||||
|     } | ||||
|     val mCalendar = Calendar.getInstance() | ||||
|     val mHour = mCalendar[Calendar.HOUR] | ||||
|     val mMinute = mCalendar[Calendar.MINUTE] | ||||
|     val mTimePickerDialog = TimePickerDialog(context, listener, mHour, mMinute, true) | ||||
|     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
	
	 lbarraga
						lbarraga