From 242fba70e8983ff9a6de0f8761e10dbd0809b058 Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Sun, 14 Jun 2026 00:35:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=98=85=E8=AF=BB?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=BB=91=E5=9D=97=E5=90=8C=E6=AD=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/read/ReadBookMenuBar.kt | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) 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 7358e9759..41a8c405f 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 @@ -1729,28 +1729,45 @@ private fun MenuBottomBar( val sliderMax = seekMax.toFloat().coerceAtLeast(1f) var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) } var sliderDragging by remember { mutableStateOf(false) } + var previewPageIndex by remember { mutableIntStateOf(state.seekProgress.coerceIn(0, seekMax)) } val toolButtonsBottomPadding = if (buttonGlassEnabled) 6.dp else 0.dp val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) { bottomPadding - toolButtonsBottomPadding } else { 0.dp } + val progressBarBehavior = ReadConfig.progressBarBehavior fun commitSliderValue(value: Float) { val target = value.roundToInt().coerceIn(0, seekMax) sliderDragging = false sliderValue = target.toFloat() - val behavior = ReadConfig.progressBarBehavior - if (behavior == "page") { + previewPageIndex = target + if (progressBarBehavior == "page") { onIntent(ReadBookIntent.SkipToPage(target)) } else { onIntent(ReadBookIntent.SeekToChapter(target)) } } - LaunchedEffect(state.seekProgress, seekMax) { - if (!sliderDragging) { - sliderValue = state.seekProgress.coerceIn(0, seekMax).toFloat() + fun updateSliderValue(value: Float) { + val coercedValue = value.coerceIn(0f, sliderMax) + sliderDragging = true + sliderValue = coercedValue + if (progressBarBehavior == "page") { + val target = coercedValue.roundToInt().coerceIn(0, seekMax) + if (target != previewPageIndex) { + previewPageIndex = target + onIntent(ReadBookIntent.SkipToPage(target)) + } + } + } + + LaunchedEffect(state.seekProgress, seekMax, progressBarBehavior) { + val progress = state.seekProgress.coerceIn(0, seekMax) + previewPageIndex = progress + if (progressBarBehavior == "page" || !sliderDragging) { + sliderValue = progress.toFloat() } } @@ -1810,10 +1827,7 @@ private fun MenuBottomBar( ReadMenuSlider( value = sliderValue.coerceIn(0f, sliderMax), - onValueChange = { value -> - sliderDragging = true - sliderValue = value.coerceIn(0f, sliderMax) - }, + onValueChange = ::updateSliderValue, onValueChangeFinished = { commitSliderValue(sliderValue) }, @@ -2721,20 +2735,29 @@ private fun BrightnessBar( var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) } var sliderDragging by remember { mutableStateOf(false) } - LaunchedEffect(brightness) { - if (!sliderDragging) { + LaunchedEffect(brightness, brightnessAuto) { + if (brightnessAuto) { + sliderDragging = false + sliderValue = brightness.toFloat() + } else if (!sliderDragging) { sliderValue = brightness.toFloat() } } fun commitSliderValue(value: Float) { - if (brightnessAuto) return val target = value.roundToInt().coerceIn(0, 100) sliderDragging = false sliderValue = target.toFloat() + if (brightnessAuto) return onBrightnessChange(target) } + fun toggleAuto() { + sliderDragging = false + sliderValue = brightness.toFloat() + onToggleAuto() + } + if (vertical) { Column( modifier = modifier @@ -2744,7 +2767,7 @@ private fun BrightnessBar( verticalArrangement = Arrangement.spacedBy(10.dp), ) { ReadMenuGlassIconButton( - onClick = onToggleAuto, + onClick = ::toggleAuto, icon = Icons.Filled.BrightnessAuto, colors = colors, backdrop = backdrop, @@ -2787,7 +2810,7 @@ private fun BrightnessBar( horizontalArrangement = Arrangement.spacedBy(8.dp), ) { ReadMenuGlassIconButton( - onClick = onToggleAuto, + onClick = ::toggleAuto, icon = Icons.Filled.BrightnessAuto, colors = colors, backdrop = backdrop,