From f9fb720ae3d667fe472f95ac321fb94d6c229669 Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Tue, 9 Jun 2026 01:02:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BA=95=E6=A0=8F=E6=98=BE=E9=9A=90?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/help/config/ReadBookConfig.kt | 8 ++ .../app/ui/book/read/ReadBookContract.kt | 1 + .../app/ui/book/read/ReadBookMenuBar.kt | 88 ++++++++++--------- .../app/ui/book/read/ReadBookViewModel.kt | 6 +- .../app/ui/book/read/sheet/MoreConfigSheet.kt | 13 --- .../app/ui/book/read/sheet/SystemMenuPage.kt | 15 ++++ app/src/main/res/values-zh-rCN/arrays.xml | 3 - app/src/main/res/values/array_values.xml | 3 - app/src/main/res/values/arrays.xml | 3 - 9 files changed, 74 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index 91ebdd4a1..bef237980 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -288,6 +288,7 @@ object ReadBookConfig { parseReadMenuCustomIcons(appCtx.getPrefString(PreferKey.titleBarCustomIcons)) private var titleBarIconPositionValue = appCtx.getPrefInt(PreferKey.titleBarIconPosition) private var showTitleBarIconsValue = appCtx.getPrefBoolean(PreferKey.showTitleBarIcons, true) + private var readSliderModeValue = appCtx.getPrefString(PreferKey.readSliderMode) ?: "0" fun syncPreferences(preferences: ReadPreferences) { readBodyToLhValue = preferences.readBodyToLh @@ -329,6 +330,7 @@ object ReadBookConfig { titleBarCustomIconsValue = parseReadMenuCustomIcons(preferences.titleBarCustomIcons) titleBarIconPositionValue = preferences.titleBarIconPosition showTitleBarIconsValue = preferences.showTitleBarIcons + readSliderModeValue = preferences.readSliderMode } var readMenuBgColor: Int @@ -540,6 +542,12 @@ object ReadBookConfig { showTitleBarIconsValue = value } + var readSliderMode: String + get() = readSliderModeValue + set(value) { + readSliderModeValue = value + } + fun encodeReadMenuCustomIcons(value: Map): String { return GSON.toJson(value.filterValues { it.isNotBlank() }) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt index 339b6aac4..62bbfd2d8 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt @@ -178,6 +178,7 @@ data class ReadMenuConfig( val readMenuBottomBarBlurStyle: Int = ReadMenuBlurStyle.Solid, val readMenuIconStyle: Int = 0, val readMenuIconShowText: Boolean = true, + val readSliderMode: String = "0", val titleBarCustomIcons: ImmutableMap = persistentMapOf(), val readMenuCustomIcons: ImmutableMap = persistentMapOf(), val titleBarButtons: ImmutableList = persistentListOf(), diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt index 427f55a07..528bd48d8 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookMenuBar.kt @@ -1400,51 +1400,53 @@ private fun MenuBottomBar( .animateContentSize(), ) { // Seek bar row: prev + slider + next - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 4.dp) - .padding(horizontal = 16.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - BottomBarGlassIconButton( - onClick = { onIntent(ReadBookIntent.PrevChapter) }, - icon = Icons.AutoMirrored.Filled.ArrowBack, - colors = colors, - backdrop = backdrop, - menuConfig = state.menuConfig, - glassEnabled = buttonGlassEnabled, - ) - - ReadMenuSlider( - value = sliderValue.coerceIn(0f, sliderMax), - onValueChange = { value -> - sliderDragging = true - sliderValue = value.coerceIn(0f, sliderMax) - }, - onValueChangeFinished = { - commitSliderValue(sliderValue) - }, - onValueCommit = ::commitSliderValue, - valueRange = 0f..sliderMax, - steps = (seekMax - 1).coerceAtLeast(0), - enabled = seekMax > 0, - backdrop = backdrop, - glassThumbEnabled = buttonGlassEnabled, + AnimatedVisibility(visible = state.menuConfig.readSliderMode != "1") { + Row( modifier = Modifier - .weight(1f) - .padding(horizontal = 8.dp) - ) + .fillMaxWidth() + .padding(vertical = 4.dp) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + BottomBarGlassIconButton( + onClick = { onIntent(ReadBookIntent.PrevChapter) }, + icon = Icons.AutoMirrored.Filled.ArrowBack, + colors = colors, + backdrop = backdrop, + menuConfig = state.menuConfig, + glassEnabled = buttonGlassEnabled, + ) - BottomBarGlassIconButton( - onClick = { onIntent(ReadBookIntent.NextChapter) }, - icon = Icons.AutoMirrored.Filled.ArrowForward, - colors = colors, - backdrop = backdrop, - menuConfig = state.menuConfig, - glassEnabled = buttonGlassEnabled, - ) + ReadMenuSlider( + value = sliderValue.coerceIn(0f, sliderMax), + onValueChange = { value -> + sliderDragging = true + sliderValue = value.coerceIn(0f, sliderMax) + }, + onValueChangeFinished = { + commitSliderValue(sliderValue) + }, + onValueCommit = ::commitSliderValue, + valueRange = 0f..sliderMax, + steps = (seekMax - 1).coerceAtLeast(0), + enabled = seekMax > 0, + backdrop = backdrop, + glassThumbEnabled = buttonGlassEnabled, + modifier = Modifier + .weight(1f) + .padding(horizontal = 8.dp) + ) + + BottomBarGlassIconButton( + onClick = { onIntent(ReadBookIntent.NextChapter) }, + icon = Icons.AutoMirrored.Filled.ArrowForward, + colors = colors, + backdrop = backdrop, + menuConfig = state.menuConfig, + glassEnabled = buttonGlassEnabled, + ) + } } Spacer(Modifier.height(8.dp)) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 7fc15579c..18a713a6f 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -1348,6 +1348,7 @@ class ReadBookViewModel( readMenuBottomBarBlurStyle = ReadBookConfig.readMenuBottomBarBlurStyle, readMenuIconStyle = ReadBookConfig.readMenuIconStyle, readMenuIconShowText = ReadBookConfig.readMenuIconShowText, + readSliderMode = ReadBookConfig.readSliderMode, titleBarCustomIcons = ReadBookConfig.titleBarCustomIcons.toImmutableMap(), readMenuCustomIcons = ReadBookConfig.readMenuCustomIcons.toImmutableMap(), titleBarButtons = current.menuConfig.titleBarButtons, @@ -2518,10 +2519,13 @@ class ReadBookViewModel( } } is ConfigUpdate.ReadSliderMode -> { + ReadBookConfig.readSliderMode = update.value viewModelScope.launch { readSettingsRepository.setReadSliderMode(update.value) } - postEvent(EventBus.UPDATE_READ_ACTION_BAR, true) + _uiState.update { + it.copy(menuConfig = it.menuConfig.copy(readSliderMode = update.value)) + } } is ConfigUpdate.DoubleHorizontalPage -> { viewModelScope.launch { diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/MoreConfigSheet.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/MoreConfigSheet.kt index 449145e61..952db073b 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/MoreConfigSheet.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/MoreConfigSheet.kt @@ -97,9 +97,6 @@ fun MoreConfigSheet( SectionTitle(stringResource(R.string.page_control)) PageControlSettings( preferences = preferences, - onReadSliderModeChange = { - onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.ReadSliderMode(it))) - }, onDoubleHorizontalPageChange = { onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.DoubleHorizontalPage(it))) }, @@ -248,7 +245,6 @@ private fun ScreenSettings( @Composable private fun PageControlSettings( preferences: ReadPreferences, - onReadSliderModeChange: (String) -> Unit, onDoubleHorizontalPageChange: (String) -> Unit, onProgressBarBehaviorChange: (String) -> Unit, onMouseWheelPageChange: (Boolean) -> Unit, @@ -256,20 +252,11 @@ private fun PageControlSettings( onVolumeKeyPageOnPlayChange: (Boolean) -> Unit, onKeyPageOnLongPressChange: (Boolean) -> Unit, ) { - val readSliderModeEntries = stringArrayResource(R.array.read_slider_mode) - val readSliderModeValues = stringArrayResource(R.array.read_slider_mode_value) val doublePageEntries = stringArrayResource(R.array.double_page_title) val doublePageValues = stringArrayResource(R.array.double_page_value) val progressBarEntries = stringArrayResource(R.array.progress_bar_behavior_title) val progressBarValues = stringArrayResource(R.array.progress_bar_behavior_value) - TinyDropdownSettingItem( - title = stringResource(R.string.read_slider_mode), - selectedValue = preferences.readSliderMode, - displayEntries = readSliderModeEntries, - entryValues = readSliderModeValues, - onValueChange = onReadSliderModeChange, - ) TinyDropdownSettingItem( title = stringResource(R.string.double_page_horizontal), selectedValue = preferences.doubleHorizontalPage, diff --git a/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt b/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt index e5fef2b94..7aeb12ec0 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/sheet/SystemMenuPage.kt @@ -419,6 +419,7 @@ private fun BottomBarTab( onShowIconSheet: () -> Unit, onShowColorPicker: (Int, Int) -> Unit, ) { + var readSliderMode by remember { mutableStateOf(preferences.readSliderMode) } var showIconText by remember { mutableStateOf(preferences.readMenuIconShowText) } var iconStyle by remember { mutableIntStateOf(preferences.readMenuIconStyle) } var iconsPerRow by remember { mutableIntStateOf(preferences.readMenuIconItemsPerRow) } @@ -440,6 +441,20 @@ private fun BottomBarTab( .padding(horizontal = 16.dp) .verticalScroll(rememberScrollState()), ) { + val readSliderModeEntries = stringArrayResource(R.array.read_slider_mode) + val readSliderModeValues = stringArrayResource(R.array.read_slider_mode_value) + + TinyDropdownSettingItem( + title = stringResource(R.string.read_slider_mode), + selectedValue = readSliderMode, + displayEntries = readSliderModeEntries, + entryValues = readSliderModeValues, + onValueChange = { + readSliderMode = it + onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.ReadSliderMode(it))) + }, + ) + SectionTitle(stringResource(R.string.read_menu_icon_style)) TinySwitchSettingItem( diff --git a/app/src/main/res/values-zh-rCN/arrays.xml b/app/src/main/res/values-zh-rCN/arrays.xml index b3eee2dbe..7a28e4a96 100644 --- a/app/src/main/res/values-zh-rCN/arrays.xml +++ b/app/src/main/res/values-zh-rCN/arrays.xml @@ -210,9 +210,6 @@ 常驻 不显示 - 按钮置左 - 按钮置右 - 仅显示滑动条 diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index 77876517f..dff580148 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -123,9 +123,6 @@ 0 1 - 2 - 3 - 4 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index b1f02c77d..f279eac99 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -103,9 +103,6 @@ Always Disable - Left button - Right button - Only slider