From d95774fd409add05be7dafadcc0f615904b3b0a3 Mon Sep 17 00:00:00 2001
From: HapeLee <1321903405@qq.com>
Date: Fri, 30 Jan 2026 20:06:39 +0800
Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=B8=80=E4=BA=9B?=
=?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 1 +
.../app/ui/book/bookmark/AllBookmarkScreen.kt | 6 +-
.../app/ui/book/explore/ExploreShowScreen.kt | 6 +-
.../ui/book/readRecord/ReadRecordScreen.kt | 6 +-
.../book/searchContent/SearchContentScreen.kt | 7 +-
.../app/ui/replace/ReplaceRuleActivity.kt | 3 +-
.../app/ui/replace/edit/ReplaceEditScreen.kt | 185 ++++++++++--------
.../ui/replace/edit/ReplaceEditViewModel.kt | 2 +-
.../widget/components/SplicedColumnGroup.kt | 2 +-
9 files changed, 116 insertions(+), 102 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b1a19d69a..ae3c7e51c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -245,6 +245,7 @@
Unit,
onSaveSuccess: () -> Unit,
- onShowHelp: (String) -> Unit,
viewModel: ReplaceEditViewModel = koinViewModel()
) {
val state by viewModel.uiState.collectAsState()
@@ -99,74 +108,106 @@ fun ReplaceEditScreen(
val isKeyboardVisible by keyboardAsState()
with(sharedTransitionScope) {
- Box(modifier = Modifier.fillMaxSize()) {
- Scaffold(
- modifier = Modifier
- .nestedScroll(scrollBehavior.nestedScrollConnection)
- .sharedBounds(
- sharedContentState = rememberSharedContentState(key = sharedKey),
- animatedVisibilityScope = animatedVisibilityScope,
- resizeMode = SharedTransitionScope.ResizeMode.RemeasureToBounds,
- //clipInOverlayDuringTransition = OverlayClip(RoundedCornerShape(16.dp))
- ),
- topBar = {
- GlassMediumFlexibleTopAppBar(
- title = { Text(if (state.id > 0) "编辑替换规则" else "新增替换规则") },
- navigationIcon = {
- SmallTopBarButton(onClick = onBack)
- },
- actions = {
-
- IconButton(onClick = { onShowHelp("regexHelp") }) {
- Icon(
- Icons.AutoMirrored.Filled.HelpOutline,
- contentDescription = "帮助"
- )
- }
-
+ Scaffold(
+ modifier = Modifier
+ .nestedScroll(scrollBehavior.nestedScrollConnection)
+ .sharedBounds(
+ sharedContentState = rememberSharedContentState(key = sharedKey),
+ animatedVisibilityScope = animatedVisibilityScope,
+ resizeMode = SharedTransitionScope.ResizeMode.RemeasureToBounds
+ )
+ .imePadding(),
+ topBar = {
+ GlassMediumFlexibleTopAppBar(
+ title = { Text(if (state.id > 0) "编辑替换规则" else "新增替换规则") },
+ navigationIcon = {
+ SmallTopBarButton(onClick = onBack)
+ },
+ actions = {
+ AnimatedVisibility(
+ visible = isKeyboardVisible,
+ enter = fadeIn(),
+ exit = fadeOut()
+ ) {
IconButton(onClick = {
viewModel.save(onSaveSuccess)
}) {
Icon(Icons.Default.Save, contentDescription = "保存")
}
-
- IconButton(onClick = { showMenu = true }) {
- Icon(Icons.Default.MoreVert, contentDescription = "更多操作")
- }
-
- DropdownMenu(
- expanded = showMenu,
- onDismissRequest = { showMenu = false }
- ) {
-
- DropdownMenuItem(
- text = { Text("复制规则") },
- onClick = {
- showMenu = false
- viewModel.copyRule()
- }
- )
-
- DropdownMenuItem(
- text = { Text("粘贴规则") },
- onClick = {
- showMenu = false
- viewModel.pasteRule(onSuccess = {})
- }
- )
- }
- },
- scrollBehavior = scrollBehavior
+ }
+ IconButton(onClick = { showMenu = true }) {
+ Icon(Icons.Default.MoreVert, contentDescription = "更多操作")
+ }
+ DropdownMenu(
+ expanded = showMenu,
+ onDismissRequest = { showMenu = false }
+ ) {
+ DropdownMenuItem(
+ text = { Text("复制规则") },
+ onClick = {
+ showMenu = false
+ viewModel.copyRule()
+ }
+ )
+ DropdownMenuItem(
+ text = { Text("粘贴规则") },
+ onClick = {
+ showMenu = false
+ viewModel.pasteRule(onSuccess = {})
+ }
+ )
+ }
+ },
+ scrollBehavior = scrollBehavior
+ )
+ },
+ floatingActionButton = {
+ TooltipBox(
+ modifier = Modifier.navigationBarsPadding(),
+ positionProvider = TooltipDefaults.rememberTooltipPositionProvider(
+ TooltipAnchorPosition.Above
+ ),
+ tooltip = { PlainTooltip { Text("添加") } },
+ state = rememberTooltipState(),
+ ) {
+ FloatingActionButton(
+ modifier = Modifier.animateFloatingActionButton(
+ visible = !isKeyboardVisible,
+ alignment = Alignment.BottomEnd,
+ ),
+ onClick = { viewModel.save(onSaveSuccess) }
+ ) {
+ Icon(Icons.Default.Save, contentDescription = "保存")
+ }
+ }
+ }, contentWindowInsets = WindowInsets(0, 0, 0, 0)
+ ) { innerPadding ->
+ Box(
+ Modifier
+ .fillMaxSize()
+ .padding(innerPadding)
+ ) {
+ AnimatedVisibility(
+ visible = isKeyboardVisible,
+ enter = slideInVertically(
+ initialOffsetY = { fullHeight -> fullHeight },
+ ),
+ exit = slideOutVertically(
+ targetOffsetY = { fullHeight -> fullHeight },
+ ),
+ modifier = Modifier
+ .align(Alignment.BottomCenter)
+ .zIndex(1f)
+ ) {
+ QuickInputBar(
+ onInsert = { text -> viewModel.insertTextAtCursor(text) }
)
}
- ) { paddingValues ->
Column(
modifier = Modifier
- .padding(paddingValues)
- .fillMaxSize()
- .verticalScroll(rememberScrollState())
- .imePadding()
- .padding(horizontal = 16.dp, vertical = 8.dp),
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp)
+ .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
@@ -306,29 +347,11 @@ fun ReplaceEditScreen(
modifier = Modifier.fillMaxWidth()
)
- Spacer(Modifier.height(16.dp))
+ Spacer(Modifier.height(120.dp))
}
}
- AnimatedVisibility(
- visible = isKeyboardVisible,
- enter = slideInVertically(
- initialOffsetY = { fullHeight -> fullHeight },
- ),
- exit = slideOutVertically(
- targetOffsetY = { fullHeight -> fullHeight },
- ),
- modifier = Modifier
- .align(Alignment.BottomCenter)
- .imePadding()
- ) {
- QuickInputBar(
- onInsert = { text -> viewModel.insertTextAtCursor(text) }
- )
- }
-
-
if (state.showGroupDialog) {
ManageGroupDialog(
groups = state.allGroups.filter { it != "默认" },
@@ -338,9 +361,9 @@ fun ReplaceEditScreen(
}
}
}
-
}
+
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun GroupSelector(
diff --git a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditViewModel.kt
index 8e1ee6ee2..11beac5e1 100644
--- a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditViewModel.kt
@@ -71,7 +71,7 @@ class ReplaceEditViewModel(
_uiState.update {
it.copy(
id = id,
- name = TextFieldValue(""),
+ name = TextFieldValue(route.pattern ?: ""),
pattern = TextFieldValue(route.pattern ?: ""),
isRegex = route.isRegex,
scope = TextFieldValue(route.scope ?: ""),
diff --git a/app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt b/app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt
index bc6f5d9bc..6228d812d 100644
--- a/app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt
+++ b/app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt
@@ -42,7 +42,7 @@ fun SplicedColumnGroup(
modifier = Modifier.fillMaxWidth()
) {
Column(
- verticalArrangement = Arrangement.spacedBy(4.dp)
+ verticalArrangement = Arrangement.spacedBy(2.dp)
) {
content()
}