Skip to content

Commit

Permalink
Send the picker back to previous screen
Browse files Browse the repository at this point in the history
  • Loading branch information
YuanLiou committed Jul 16, 2023
1 parent 0ca3354 commit c5fe505
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 13 deletions.
20 changes: 18 additions & 2 deletions wear/src/main/java/com/rayliu/gymnote/wearos/MainNavGraph.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.rayliu.gymnote.wearos.navigation.CATEGORY_ID_NAV_ARGUMENT
import com.rayliu.gymnote.wearos.navigation.DestinationScrollType
import com.rayliu.gymnote.wearos.navigation.SCROLL_TYPE_NAV_ARGUMENT
import com.rayliu.gymnote.wearos.navigation.Screen
import com.rayliu.gymnote.wearos.navigation.TIME_PICKER_RESULT_NAV_ARGUMENT
import com.rayliu.gymnote.wearos.navigation.WORKOUT_ID_NAV_ARGUMENT
import com.rayliu.gymnote.wearos.timepicker.TimePickerScreen
import com.rayliu.gymnote.wearos.workout.WorkoutScreen
Expand Down Expand Up @@ -158,7 +159,10 @@ fun NavGraphBuilder.mainNavGraph(
val focusRequester = remember { FocusRequester() }
val viewModel: AddRecordViewModel = koinNavViewModel()
viewModel.performPreScreenTasks()

val recordTypes = viewModel.recordInputTypes.value
val userInputTimeRecord = it.savedStateHandle.get<String>(TIME_PICKER_RESULT_NAV_ARGUMENT)

AddRecordScreen(
recordTypes = recordTypes,
focusRequester = focusRequester,
Expand All @@ -170,7 +174,8 @@ fun NavGraphBuilder.mainNavGraph(
},
onTimeAdjustButtonClicked = {
navController.navigate(Screen.TimePickerScreen.route)
}
},
userInputTimeRecord = userInputTimeRecord
)
}
composable(
Expand All @@ -182,7 +187,18 @@ fun NavGraphBuilder.mainNavGraph(
}
)
) {
TimePickerScreen()
val focusRequester = remember { FocusRequester() }
TimePickerScreen(
focusRequester = focusRequester,
onTimeConfirm = {
navController.previousBackStackEntry
?.savedStateHandle
?.set(TIME_PICKER_RESULT_NAV_ARGUMENT, it)

navController.popBackStack()
}
)
RequestFocusOnResume(focusRequester)
}
}

Expand Down
4 changes: 3 additions & 1 deletion wear/src/main/java/com/rayliu/gymnote/wearos/WearApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ fun WearApp(
}

key(backStackEntry.destination.route) {
TimeText(modifier = timeTextModifier ?: Modifier)
TimeText(
modifier = timeTextModifier ?: Modifier
)
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ fun AddRecordScreen(
onCancelButtonClicked: () -> Unit,
onTimeAdjustButtonClicked: () -> Unit,
onRequestFocus: @Composable (FocusRequester) -> Unit,
userInputTimeRecord: String?,
modifier: Modifier = Modifier
) {
Box(
Expand All @@ -60,7 +61,8 @@ fun AddRecordScreen(
ShowScreenByRecordType(
focusRequester,
recordType,
onTimeAdjustButtonClicked
onTimeAdjustButtonClicked,
userInputTimeRecord
)
onRequestFocus(focusRequester)
}
Expand Down Expand Up @@ -95,7 +97,8 @@ fun AddRecordScreen(
private fun ShowScreenByRecordType(
focusRequester: FocusRequester,
recordType: RecordType,
onTimeAdjustButtonClicked: () -> Unit
onTimeAdjustButtonClicked: () -> Unit,
userInputTimeRecord: String?,
) {
when (recordType) {
RecordType.WEIGHT -> {
Expand Down Expand Up @@ -128,7 +131,8 @@ private fun ShowScreenByRecordType(
AddTimeRecordScreen(
onAdjustButtonClicked = onTimeAdjustButtonClicked,
focusRequester = focusRequester,
modifier = Modifier
modifier = Modifier,
defaultText = userInputTimeRecord
)
}

Expand Down Expand Up @@ -173,7 +177,8 @@ private fun AddRecordScreenPreview() {
focusRequester = FocusRequester(),
onRequestFocus = {},
onCancelButtonClicked = {},
onTimeAdjustButtonClicked = {}
onTimeAdjustButtonClicked = {},
userInputTimeRecord = null
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ import com.rayliu.gymnote.R
import com.rayliu.gymnote.wearos.theme.GymNoteTheme
import com.rayliu.gymnote.wearos.theme.PreviewConstants

const val DEFAULT_TIME = "00:00:00"

@Composable
fun AddTimeRecordScreen(
focusRequester: FocusRequester,
onAdjustButtonClicked: () -> Unit,
modifier: Modifier = Modifier,
defaultText: String = "00:00:00"
defaultText: String? = DEFAULT_TIME
) {
Row(
verticalAlignment = Alignment.CenterVertically,
Expand All @@ -38,7 +40,7 @@ fun AddTimeRecordScreen(
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
defaultText,
defaultText ?: DEFAULT_TIME,
fontSize = 22.sp
)
CompactChip(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.rayliu.gymnote.wearos.navigation
const val SCROLL_TYPE_NAV_ARGUMENT = "scrollType"
const val CATEGORY_ID_NAV_ARGUMENT = "categoryId"
const val WORKOUT_ID_NAV_ARGUMENT = "workoutId"
const val TIME_PICKER_RESULT_NAV_ARGUMENT = "timePickerResult"

sealed class Screen(val route: String) {
object SportsCategory : Screen("sports_category")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,48 @@ package com.rayliu.gymnote.wearos.timepicker
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.tooling.preview.Preview
import androidx.wear.compose.material.Text
import androidx.compose.ui.unit.dp
import com.google.android.horologist.composables.TimePicker
import com.rayliu.gymnote.wearos.addrecord.recordinput.DEFAULT_TIME
import com.rayliu.gymnote.wearos.theme.GymNoteTheme
import com.rayliu.gymnote.wearos.theme.PreviewConstants
import kotlinx.datetime.LocalTime
import kotlinx.datetime.toJavaLocalTime
import kotlinx.datetime.toLocalTime

@Composable
fun TimePickerScreen(
modifier: Modifier = Modifier
focusRequester: FocusRequester,
onTimeConfirm: (String) -> Unit,
modifier: Modifier = Modifier,
defaultTime: LocalTime? = null,
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center,
modifier = modifier.fillMaxSize()
) {
Text("TimePicker")
val localTime =
defaultTime?.toJavaLocalTime() ?: DEFAULT_TIME.toLocalTime().toJavaLocalTime()
TimePicker(
time = localTime,
onTimeConfirm = {
val hourText = "%02d".format(it.hour)
val minuteText = "%02d".format(it.minute)
val secondText = "%02d".format(it.second)
onTimeConfirm("$hourText:$minuteText:$secondText")
},
modifier = Modifier
.padding(4.dp)
.focusRequester(focusRequester)
)
}
}

Expand All @@ -33,6 +57,9 @@ fun TimePickerScreen(
@Composable
fun TimePickerScreenPreview() {
GymNoteTheme {
TimePickerScreen()
TimePickerScreen(
focusRequester = FocusRequester(),
onTimeConfirm = {}
)
}
}

0 comments on commit c5fe505

Please sign in to comment.