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
	
	 lbarraga
						lbarraga