Implement compose TimePickerDialog
This commit is contained in:
1 parent
89347768b3
commit
48e3b44658
3 files changed
+92
-5
No files matched your search
@@ -41,10 +41,10 @@ class DailyCheckWork(context: Context, workerParams: WorkerParameters) :
|
||||
}
|
||||
|
||||
val schedHour
|
||||
get() = Settings.requestNewsTimerHour.takeUnless { it == -1 }
|
||||
get() = Settings.requestNewsTimerHour.takeUnless { it == -1 } ?: 0
|
||||
|
||||
val schedMinute
|
||||
get() = Settings.requestNewsTimerMinute.takeUnless { it == -1 }
|
||||
get() = Settings.requestNewsTimerMinute.takeUnless { it == -1 } ?: 0
|
||||
|
||||
private val whenToWork
|
||||
get() = LocalDateTime.now()
|
||||
|
||||
@@ -18,8 +18,10 @@ 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
|
||||
@@ -38,6 +40,9 @@ import com.hippo.ehviewer.client.EhEngine
|
||||
import com.hippo.ehviewer.client.EhUrl
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.parser.HomeParser
|
||||
import com.hippo.ehviewer.dailycheck.schedHour
|
||||
import com.hippo.ehviewer.dailycheck.schedMinute
|
||||
import com.hippo.ehviewer.dailycheck.updateDailyCheckWork
|
||||
import com.hippo.ehviewer.ui.compose.observed
|
||||
import com.hippo.ehviewer.ui.compose.rememberedAccessor
|
||||
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
|
||||
@@ -261,9 +266,26 @@ fun EhScreen() {
|
||||
value = reqNews.rememberedAccessor,
|
||||
)
|
||||
AnimatedVisibility(visible = reqNews.value) {
|
||||
Preference(
|
||||
title = stringResource(id = R.string.settings_eh_request_news_timepicker),
|
||||
)
|
||||
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
|
||||
}
|
||||
}
|
||||
AnimatedVisibility(visible = reqNews.value) {
|
||||
SwitchPreference(
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.hippo.ehviewer.ui.settings
|
||||
|
||||
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