From 5be2b77e424215c16b36ed659a945c44ac805d31 Mon Sep 17 00:00:00 2001 From: tarsin Date: Mon, 5 Jun 2023 00:55:49 +0800 Subject: [PATCH] Implement Compose SimpleMenuPreference --- .../main/java/com/hippo/ehviewer/Settings.kt | 2 +- .../ehviewer/ui/settings/AdvancedScreen.kt | 6 ++++++ .../ehviewer/ui/settings/PreferenceWidgets.kt | 17 +++++++++++++++++ .../composeprefs3/ui/prefs/DropDownPref.kt | 1 - 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 1c9bd8e56..f85913b9b 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -62,7 +62,7 @@ object Settings : DefaultPreferences() { val listMode by intFromStrPref(KEY_LIST_MODE, 0) val detailSize by intFromStrPref(KEY_DETAIL_SIZE, 0) val thumbResolution by intFromStrPref(KEY_THUMB_RESOLUTION, 0) - val readCacheSize by intFromStrPref(KEY_READ_CACHE_SIZE, 640) + var readCacheSize by intFromStrPref(KEY_READ_CACHE_SIZE, 640) var launchPage by intFromStrPref("launch_page", 0) val showComments by boolPref("show_gallery_comments", true) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index ce093282a..422aa0ff9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -50,6 +50,12 @@ fun AdvancedScreen() { title = stringResource(id = R.string.settings_advanced_dump_logcat), summary = stringResource(id = R.string.settings_advanced_dump_logcat_summary), ) + SimpleMenuPreference( + title = stringResource(id = R.string.settings_advanced_read_cache_size), + entry = R.array.read_cache_size_entries, + entryValueRes = R.array.read_cache_size_entry_values, + value = Settings::readCacheSize, + ) } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceWidgets.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceWidgets.kt index d6535b72a..a9bf90cb5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceWidgets.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/PreferenceWidgets.kt @@ -1,5 +1,6 @@ package com.hippo.ehviewer.ui.settings +import androidx.annotation.ArrayRes import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -23,11 +24,13 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString import com.hippo.ehviewer.ui.login.LocalNavController import com.hippo.ehviewer.ui.openBrowser import com.hippo.ehviewer.ui.settings.PreferenceTokens.PreferenceTextPadding +import com.jamal.composeprefs3.ui.prefs.DropDownPref import com.jamal.composeprefs3.ui.prefs.SliderPref import com.jamal.composeprefs3.ui.prefs.SpannedTextPref import com.jamal.composeprefs3.ui.prefs.SwitchPref @@ -81,3 +84,17 @@ fun UrlPreference(title: String, url: String) { fun HtmlPreference(title: String, summary: AnnotatedString? = null, onClick: () -> Unit = {}) { SpannedTextPref(title = title, summary = summary, onClick = onClick) } + +@Composable +fun SimpleMenuPreference(title: String, @ArrayRes entry: Int, @ArrayRes entryValueRes: Int, value: KMutableProperty0) { + val entryArray = stringArrayResource(id = entry) + val valuesArray = stringArrayResource(id = entryValueRes) + val map = remember { + val iter = entryArray.iterator() + valuesArray.associateWith { iter.next() } + } + var v by remember { mutableIntStateOf(value.get()) } + fun set(new: String) = value.set(new.toInt().also { v = it }) + check(entryArray.size == valuesArray.size) + DropDownPref(title = title, defaultValue = v.toString(), onValueChange = ::set, useSelectedAsSummary = true, entries = map) +} diff --git a/app/src/main/java/com/jamal/composeprefs3/ui/prefs/DropDownPref.kt b/app/src/main/java/com/jamal/composeprefs3/ui/prefs/DropDownPref.kt index e9c8de022..c9da02c6c 100644 --- a/app/src/main/java/com/jamal/composeprefs3/ui/prefs/DropDownPref.kt +++ b/app/src/main/java/com/jamal/composeprefs3/ui/prefs/DropDownPref.kt @@ -19,7 +19,6 @@ import androidx.compose.ui.unit.dp @Composable fun DropDownPref( - key: String, title: String, modifier: Modifier = Modifier, summary: String? = null,