From e6f5e87613d5691655f0697183d6cc350d96695a Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Mon, 29 Jun 2026 02:26:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B9=A6=E7=AD=BE=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E7=A7=BB=E8=87=B3=E7=8B=AC=E7=AB=8B=20AppModalBottomSheet?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=B6=B2=E6=80=81=E7=8E=BB=E7=92=83?= =?UTF-8?q?=E4=BA=AE=E5=BA=A6=E6=BB=91=E5=9D=97=E6=8B=96=E5=8A=A8=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E6=9C=AA=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/book/read/ReadBookContract.kt | 1 - .../app/ui/book/read/ReadBookMenuBar.kt | 30 ++----------------- .../legado/app/ui/book/read/ReadBookScreen.kt | 15 ++++++++-- .../app/ui/book/read/ReadBookViewModel.kt | 21 ++++++------- 4 files changed, 23 insertions(+), 44 deletions(-) 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 6c43618e4..7370a0ce6 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 @@ -43,7 +43,6 @@ sealed interface ReadBookMenuRoute { data object AutoRead : ReadBookMenuRoute data object PaddingConfig : ReadBookMenuRoute data object HeaderFooterConfig : ReadBookMenuRoute - data class Bookmark(val bookmark: io.legado.app.data.entities.Bookmark) : ReadBookMenuRoute } @Stable 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 140849929..51d927ef6 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 @@ -167,7 +167,6 @@ import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.theme.hazeStyle.HazeLegado import io.legado.app.ui.widget.components.AppSlider import io.legado.app.ui.widget.components.AppVerticalSlider -import io.legado.app.ui.widget.components.bookmark.BookmarkEditContent import io.legado.app.ui.widget.components.button.series.SmallTonalButton import io.legado.app.ui.widget.components.divider.PillDivider import io.legado.app.ui.widget.components.menuItem.MenuItemIcon @@ -764,23 +763,6 @@ private fun ReadBookMenuSurface( } } - is ReadBookMenuRoute.Bookmark -> { - ReadBookMenuRoutePage( - title = targetRoute.bookmark.chapterName, - maxHeight = maxHeight, - scrollContent = true, - bottomPadding = if (extendSurfaceToNavigationBar) navBarHeight else 0.dp, - onBack = { onIntent(ReadBookIntent.ReadMenuBack) }, - ) { - Box(Modifier.padding(horizontal = 16.dp)) { - BookmarkEditContent( - bookmark = targetRoute.bookmark, - onSave = { onIntent(ReadBookIntent.SaveBookmark(it)) }, - onDelete = { onIntent(ReadBookIntent.DeleteBookmark(it)) }, - ) - } - } - } } } } @@ -2420,7 +2402,6 @@ private fun ReadMenuLiquidSlider( val rangeEnd = valueRange.endInclusive val range = rangeEnd - rangeStart val animationScope = rememberCoroutineScope() - var didDrag by remember { mutableStateOf(false) } val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr val dampedDragAnimation = remember(animationScope, trackWidth, rangeStart, rangeEnd, isLtr) { DampedDragAnimation( @@ -2432,17 +2413,10 @@ private fun ReadMenuLiquidSlider( pressedScale = 1.5f, onDragStarted = {}, onDragStopped = { - if (didDrag) { - onValueChange(targetValue) - onValueCommit?.invoke(targetValue) - } else { - onValueChangeFinished?.invoke() - } + onValueChange(targetValue) + onValueCommit?.invoke(targetValue) ?: onValueChangeFinished?.invoke() }, onDrag = { _, dragAmount -> - if (!didDrag) { - didDrag = dragAmount.x != 0f - } val delta = range * (dragAmount.x / trackWidth) val nextValue = if (isLtr) { (targetValue + delta).coerceIn(valueRange) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookScreen.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookScreen.kt index 46145652f..0478b4fe6 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookScreen.kt @@ -39,6 +39,7 @@ import io.legado.app.ui.book.read.sheet.UnderlineConfigSheet import io.legado.app.ui.widget.components.FontFolderState import io.legado.app.ui.widget.components.FontSelectSheet import io.legado.app.ui.widget.components.alert.AppAlertDialog +import io.legado.app.ui.widget.components.bookmark.BookmarkEditSheet import io.legado.app.ui.widget.components.changeSource.ChangeSourceSheet import io.legado.app.ui.widget.components.log.AppLogSheet import io.legado.app.ui.config.readConfig.TextSelectMenuFilterSheet @@ -327,6 +328,16 @@ fun ReadBookScreen( sourceOrigin = photoSheet?.sourceOrigin, onDismissRequest = dismissSheet, ) + val bookmarkSheet = state.activeSheet as? ReadBookSheet.Bookmark + bookmarkSheet?.let { sheet -> + BookmarkEditSheet( + show = true, + bookmark = sheet.bookmark, + onDismiss = dismissSheet, + onSave = { onIntent(ReadBookIntent.SaveBookmark(it)) }, + onDelete = { onIntent(ReadBookIntent.DeleteBookmark(it)) }, + ) + } // AlertDialog-based sheets and special cases — conditionally composed when (state.activeSheet) { @@ -382,9 +393,7 @@ fun ReadBookScreen( ) } - is ReadBookSheet.Bookmark -> { - // Handled by ViewModel — redirects to menu route - } + is ReadBookSheet.Bookmark -> Unit is ReadBookSheet.InfoConfig -> { // Integrated into ReadStyleSheet's HeaderFooterPage 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 499b32028..e6de1aa48 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 @@ -380,10 +380,7 @@ class ReadBookViewModel( } is ReadBookIntent.ShowSheet -> { - if (intent.sheet is ReadBookSheet.Bookmark) { - // Bookmark is shown as a menu route, not a sheet - openReadMenuRoute(ReadBookMenuRoute.Bookmark(intent.sheet.bookmark)) - } else if (intent.sheet is ReadBookSheet.HighlightRuleConfig) { + if (intent.sheet is ReadBookSheet.HighlightRuleConfig) { loadHighlightRules() _uiState.update { it.copy(activeSheet = intent.sheet) } } else { @@ -1076,13 +1073,8 @@ class ReadBookViewModel( is ReadBookIntent.TextActionBookmark -> { _uiState.update { it.copy( - menuState = ReadBookMenuState( - visible = true, - routeStack = kotlinx.collections.immutable.persistentListOf( - ReadBookMenuRoute.Main, - ReadBookMenuRoute.Bookmark(intent.bookmark), - ), - ), + menuState = ReadBookMenuState(), + activeSheet = ReadBookSheet.Bookmark(intent.bookmark), ) } } @@ -1483,7 +1475,12 @@ class ReadBookViewModel( content = "", ) withContext(Main) { - openReadMenuRoute(ReadBookMenuRoute.Bookmark(bookmark)) + _uiState.update { + it.copy( + menuState = ReadBookMenuState(), + activeSheet = ReadBookSheet.Bookmark(bookmark), + ) + } } } }