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() }