fix: 修复阅读菜单滑块同步问题

This commit is contained in:
HapeLee
2026-06-14 00:36:37 +08:00
parent 1beefc59a2
commit 242fba70e8
@@ -1729,28 +1729,45 @@ private fun MenuBottomBar(
val sliderMax = seekMax.toFloat().coerceAtLeast(1f) val sliderMax = seekMax.toFloat().coerceAtLeast(1f)
var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) } var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) }
var sliderDragging by remember { mutableStateOf(false) } 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 toolButtonsBottomPadding = if (buttonGlassEnabled) 6.dp else 0.dp
val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) { val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) {
bottomPadding - toolButtonsBottomPadding bottomPadding - toolButtonsBottomPadding
} else { } else {
0.dp 0.dp
} }
val progressBarBehavior = ReadConfig.progressBarBehavior
fun commitSliderValue(value: Float) { fun commitSliderValue(value: Float) {
val target = value.roundToInt().coerceIn(0, seekMax) val target = value.roundToInt().coerceIn(0, seekMax)
sliderDragging = false sliderDragging = false
sliderValue = target.toFloat() sliderValue = target.toFloat()
val behavior = ReadConfig.progressBarBehavior previewPageIndex = target
if (behavior == "page") { if (progressBarBehavior == "page") {
onIntent(ReadBookIntent.SkipToPage(target)) onIntent(ReadBookIntent.SkipToPage(target))
} else { } else {
onIntent(ReadBookIntent.SeekToChapter(target)) onIntent(ReadBookIntent.SeekToChapter(target))
} }
} }
LaunchedEffect(state.seekProgress, seekMax) { fun updateSliderValue(value: Float) {
if (!sliderDragging) { val coercedValue = value.coerceIn(0f, sliderMax)
sliderValue = state.seekProgress.coerceIn(0, seekMax).toFloat() 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( ReadMenuSlider(
value = sliderValue.coerceIn(0f, sliderMax), value = sliderValue.coerceIn(0f, sliderMax),
onValueChange = { value -> onValueChange = ::updateSliderValue,
sliderDragging = true
sliderValue = value.coerceIn(0f, sliderMax)
},
onValueChangeFinished = { onValueChangeFinished = {
commitSliderValue(sliderValue) commitSliderValue(sliderValue)
}, },
@@ -2721,20 +2735,29 @@ private fun BrightnessBar(
var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) } var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) }
var sliderDragging by remember { mutableStateOf(false) } var sliderDragging by remember { mutableStateOf(false) }
LaunchedEffect(brightness) { LaunchedEffect(brightness, brightnessAuto) {
if (!sliderDragging) { if (brightnessAuto) {
sliderDragging = false
sliderValue = brightness.toFloat()
} else if (!sliderDragging) {
sliderValue = brightness.toFloat() sliderValue = brightness.toFloat()
} }
} }
fun commitSliderValue(value: Float) { fun commitSliderValue(value: Float) {
if (brightnessAuto) return
val target = value.roundToInt().coerceIn(0, 100) val target = value.roundToInt().coerceIn(0, 100)
sliderDragging = false sliderDragging = false
sliderValue = target.toFloat() sliderValue = target.toFloat()
if (brightnessAuto) return
onBrightnessChange(target) onBrightnessChange(target)
} }
fun toggleAuto() {
sliderDragging = false
sliderValue = brightness.toFloat()
onToggleAuto()
}
if (vertical) { if (vertical) {
Column( Column(
modifier = modifier modifier = modifier
@@ -2744,7 +2767,7 @@ private fun BrightnessBar(
verticalArrangement = Arrangement.spacedBy(10.dp), verticalArrangement = Arrangement.spacedBy(10.dp),
) { ) {
ReadMenuGlassIconButton( ReadMenuGlassIconButton(
onClick = onToggleAuto, onClick = ::toggleAuto,
icon = Icons.Filled.BrightnessAuto, icon = Icons.Filled.BrightnessAuto,
colors = colors, colors = colors,
backdrop = backdrop, backdrop = backdrop,
@@ -2787,7 +2810,7 @@ private fun BrightnessBar(
horizontalArrangement = Arrangement.spacedBy(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp),
) { ) {
ReadMenuGlassIconButton( ReadMenuGlassIconButton(
onClick = onToggleAuto, onClick = ::toggleAuto,
icon = Icons.Filled.BrightnessAuto, icon = Icons.Filled.BrightnessAuto,
colors = colors, colors = colors,
backdrop = backdrop, backdrop = backdrop,