Convert TimePicker to use a dialogState
This commit is contained in:
1 parent
271c1b1390
commit
175e1d7df9
3 files changed
+55
-85
No files matched your search
@@ -15,10 +15,8 @@ import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.SnackbarHost
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TimePicker
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.rememberTimePickerState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
@@ -50,7 +48,6 @@ import com.hippo.ehviewer.ui.destinations.SignInScreenDestination
|
||||
import com.hippo.ehviewer.ui.destinations.UConfigScreenDestination
|
||||
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
|
||||
import com.hippo.ehviewer.ui.tools.LocalDialogState
|
||||
import com.hippo.ehviewer.ui.tools.TimePickerDialog
|
||||
import com.hippo.ehviewer.ui.tools.observed
|
||||
import com.hippo.ehviewer.ui.tools.rememberedAccessor
|
||||
import com.hippo.ehviewer.util.copyTextToClipboard
|
||||
@@ -325,24 +322,13 @@ fun EhScreen(navigator: DestinationsNavigator) {
|
||||
)
|
||||
AnimatedVisibility(visible = reqNews.value) {
|
||||
val pickerTitle = stringResource(id = R.string.settings_eh_request_news_timepicker)
|
||||
var showPicker by rememberSaveable { mutableStateOf(false) }
|
||||
val state = rememberTimePickerState(schedHour, schedMinute)
|
||||
if (showPicker) {
|
||||
TimePickerDialog(
|
||||
title = pickerTitle,
|
||||
onCancel = { showPicker = false },
|
||||
onConfirm = {
|
||||
showPicker = false
|
||||
Settings.requestNewsTimerHour = state.hour
|
||||
Settings.requestNewsTimerMinute = state.minute
|
||||
updateDailyCheckWork(context)
|
||||
},
|
||||
) {
|
||||
TimePicker(state = state)
|
||||
}
|
||||
}
|
||||
Preference(title = pickerTitle) {
|
||||
showPicker = true
|
||||
coroutineScope.launch {
|
||||
val (hour, minute) = dialogState.showTimePicker(pickerTitle, schedHour, schedMinute)
|
||||
Settings.requestNewsTimerHour = hour
|
||||
Settings.requestNewsTimerMinute = minute
|
||||
updateDailyCheckWork(context)
|
||||
}
|
||||
}
|
||||
}
|
||||
AnimatedVisibility(visible = reqNews.value) {
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package com.hippo.ehviewer.ui.tools
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.IntrinsicSize
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -41,7 +45,9 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.material3.TextFieldDefaults
|
||||
import androidx.compose.material3.TimePicker
|
||||
import androidx.compose.material3.rememberDatePickerState
|
||||
import androidx.compose.material3.rememberTimePickerState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.compositionLocalOf
|
||||
@@ -60,6 +66,7 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import com.jamal.composeprefs3.ui.ifNotNullThen
|
||||
import com.jamal.composeprefs3.ui.ifTrueThen
|
||||
@@ -344,6 +351,48 @@ class DialogState {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun showTimePicker(
|
||||
title: String,
|
||||
initialHour: Int,
|
||||
initialMinute: Int,
|
||||
) = dialog { cont ->
|
||||
val state = rememberTimePickerState(initialHour, initialMinute)
|
||||
Dialog(
|
||||
onDismissRequest = { cont.cancel() },
|
||||
properties = DialogProperties(usePlatformDefaultWidth = false),
|
||||
) {
|
||||
Surface(
|
||||
shape = MaterialTheme.shapes.extraLarge,
|
||||
tonalElevation = 6.dp,
|
||||
modifier = Modifier.width(IntrinsicSize.Min).height(IntrinsicSize.Min).background(
|
||||
shape = MaterialTheme.shapes.extraLarge,
|
||||
color = MaterialTheme.colorScheme.surface,
|
||||
),
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.padding(24.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.fillMaxWidth().padding(bottom = 20.dp),
|
||||
text = title,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
)
|
||||
TimePicker(state = state)
|
||||
Row(modifier = Modifier.height(40.dp).fillMaxWidth()) {
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
TextButton(onClick = { cont.cancel() }) {
|
||||
Text(stringResource(id = android.R.string.cancel))
|
||||
}
|
||||
TextButton(onClick = { cont.resume(state.hour to state.minute) }) {
|
||||
Text(stringResource(id = android.R.string.ok))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun showSingleChoice(
|
||||
items: Array<String>,
|
||||
selected: Int,
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
package com.hippo.ehviewer.ui.tools
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.IntrinsicSize
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
|
||||
@Composable
|
||||
fun TimePickerDialog(
|
||||
title: String,
|
||||
onCancel: () -> Unit,
|
||||
onConfirm: () -> Unit,
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
Dialog(
|
||||
onDismissRequest = onCancel,
|
||||
properties = DialogProperties(usePlatformDefaultWidth = false),
|
||||
) {
|
||||
Surface(
|
||||
shape = MaterialTheme.shapes.extraLarge,
|
||||
tonalElevation = 6.dp,
|
||||
modifier = Modifier.width(IntrinsicSize.Min).height(IntrinsicSize.Min).background(
|
||||
shape = MaterialTheme.shapes.extraLarge,
|
||||
color = MaterialTheme.colorScheme.surface,
|
||||
),
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.padding(24.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
modifier = Modifier.fillMaxWidth().padding(bottom = 20.dp),
|
||||
text = title,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
)
|
||||
content()
|
||||
Row(modifier = Modifier.height(40.dp).fillMaxWidth()) {
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
TextButton(onClick = onCancel) {
|
||||
Text(stringResource(id = android.R.string.cancel))
|
||||
}
|
||||
TextButton(onClick = onConfirm) {
|
||||
Text(stringResource(id = android.R.string.ok))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user