From 5cc126cf5b69fa138a6a0454536957ff54e23ada Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Fri, 15 May 2026 01:54:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 3 +- .../cache/manage/BookCacheManageScreen.kt | 2 +- .../legado/app/ui/book/info/BookInfoSheets.kt | 2 +- .../ui/book/manage/BookshelfManageScreen.kt | 2 +- .../legado/app/ui/book/search/SearchScreen.kt | 11 +++--- .../app/ui/dict/rule/DictRuleEditSheet.kt | 8 ++--- .../app/ui/replace/ReplaceRuleScreen.kt | 11 +++--- .../app/ui/replace/edit/ReplaceEditScreen.kt | 9 ++--- .../app/ui/rss/subscription/RuleSubScreen.kt | 13 ++++--- .../components/AppFloatingActionButton.kt | 32 ++++++++++++++--- .../components/AppLinearProgressIndicator.kt | 34 ------------------- .../widget/components/cover/BookshelfCover.kt | 2 +- .../ui/widget/components/list/ListScaffold.kt | 8 ++--- .../widget/components/rules/RuleEditSheet.kt | 8 ++--- .../components/rules/RuleListScaffold.kt | 8 ++--- 15 files changed, 68 insertions(+), 85 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/ui/widget/components/AppLinearProgressIndicator.kt diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 1e2472279..25a85a582 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -72,7 +72,8 @@ "Bash(Select-Object -Last 20)", "WebFetch(domain:compose-miuix-ui.github.io)", "Bash(Select-Object -Last 60)", - "PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 60)" + "PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 60)", + "Bash(New-Item *)" ] } } diff --git a/app/src/main/java/io/legado/app/ui/book/cache/manage/BookCacheManageScreen.kt b/app/src/main/java/io/legado/app/ui/book/cache/manage/BookCacheManageScreen.kt index aae129527..619bdfcd2 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/manage/BookCacheManageScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/manage/BookCacheManageScreen.kt @@ -46,7 +46,7 @@ import io.legado.app.R import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.theme.adaptiveContentPadding import io.legado.app.ui.theme.adaptiveHorizontalPadding -import io.legado.app.ui.widget.components.AppLinearProgressIndicator +import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator import io.legado.app.ui.widget.components.AppScaffold import io.legado.app.ui.widget.components.alert.AppAlertDialog import io.legado.app.ui.widget.components.button.SmallTonalIconButton diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoSheets.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoSheets.kt index 2e682e9d8..8d28281c3 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoSheets.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoSheets.kt @@ -74,7 +74,7 @@ import io.legado.app.ui.book.search.ScopeSelectSheet import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.manage.BookSourceActivity import io.legado.app.ui.theme.LegadoTheme -import io.legado.app.ui.widget.components.AppLinearProgressIndicator +import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator import io.legado.app.ui.widget.components.AppTextField import io.legado.app.ui.widget.components.EmptyMessage import io.legado.app.ui.widget.components.alert.AppAlertDialog diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt index b35407ed3..79a64cf4e 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookshelfManageScreen.kt @@ -87,7 +87,7 @@ import io.legado.app.ui.book.info.ChangeSourceSheet import io.legado.app.ui.book.info.GroupSelectSheet import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.theme.adaptiveContentPadding -import io.legado.app.ui.widget.components.AppLinearProgressIndicator +import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator import io.legado.app.ui.widget.components.AppTextField import io.legado.app.ui.widget.components.alert.AppAlertDialog import io.legado.app.ui.widget.components.button.SmallTonalIconButton diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchScreen.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchScreen.kt index ec619ca14..065c10d40 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchScreen.kt @@ -331,13 +331,10 @@ fun SearchScreen( } else { viewModel.onIntent(SearchIntent.LoadMore) } - } - ) { - AppIcon( - imageVector = if (state.isSearching) Icons.Default.Stop else Icons.Default.PlayArrow, - contentDescription = if (state.isSearching) stringResource(R.string.stop) else stringResource(R.string.start), - ) - } + }, + icon = if (state.isSearching) Icons.Default.Stop else Icons.Default.PlayArrow, + tooltipText = if (state.isSearching) stringResource(R.string.stop) else stringResource(R.string.start) + ) } } ) { paddingValues -> diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditSheet.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditSheet.kt index e831ab86e..4f9fa9118 100644 --- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditSheet.kt +++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleEditSheet.kt @@ -35,7 +35,6 @@ import androidx.compose.ui.unit.dp import io.legado.app.R import io.legado.app.data.entities.DictRule import io.legado.app.ui.widget.components.AppFloatingActionButton -import io.legado.app.ui.widget.components.icon.AppIcon import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet import io.legado.app.ui.widget.components.text.AppText import kotlinx.coroutines.launch @@ -161,10 +160,9 @@ fun DictRuleEditSheet( }, modifier = Modifier .align(Alignment.BottomEnd) - .padding(16.dp) - ) { - AppIcon(Icons.Default.Save, contentDescription = "Save") - } + .padding(16.dp), + icon = Icons.Default.Save + ) } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt index 969bedb61..858661169 100644 --- a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt +++ b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt @@ -19,8 +19,6 @@ import androidx.compose.material.icons.filled.FileOpen import androidx.compose.material3.AlertDialog import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi -import io.legado.app.ui.widget.components.AppFloatingActionButton -import androidx.compose.material3.Icon import androidx.compose.material3.LoadingIndicator import androidx.compose.material3.OutlinedButton import androidx.compose.material3.SnackbarHostState @@ -52,6 +50,7 @@ import io.legado.app.data.entities.ReplaceRule import io.legado.app.ui.theme.adaptiveContentPadding import io.legado.app.ui.theme.adaptiveHorizontalPadding import io.legado.app.ui.widget.components.ActionItem +import io.legado.app.ui.widget.components.AppFloatingActionButton import io.legado.app.ui.widget.components.DraggableSelectionHandler import io.legado.app.ui.widget.components.GroupManageBottomSheet import io.legado.app.ui.widget.components.alert.AppAlertDialog @@ -335,10 +334,9 @@ fun ReplaceRuleScreen( onClick = { onNavigateToEdit(ReplaceEditRoute(id = -1)) }, - tooltipText = "Localized description" - ) { - AppIcon(Icons.Default.Add, contentDescription = "Add Rule") - } + tooltipText = stringResource(R.string.add), + icon = Icons.Default.Add + ) }, snackbarHostState = snackbarHostState, dropDownMenuContent = { dismiss -> @@ -456,4 +454,3 @@ fun ReplaceRuleScreen( } } } - diff --git a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt index 1f1e595c5..840b4f124 100644 --- a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt +++ b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt @@ -42,6 +42,8 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.ui.res.stringResource +import io.legado.app.R import io.legado.app.ui.widget.components.AppFloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -162,10 +164,9 @@ fun ReplaceEditScreen( alignment = Alignment.BottomEnd, ), onClick = { viewModel.save(onSaveSuccess) }, - tooltipText = "添加" - ) { - AppIcon(Icons.Default.Save, contentDescription = "保存") - } + tooltipText = stringResource(R.string.action_save), + icon = Icons.Default.Save + ) }, contentWindowInsets = WindowInsets(0, 0, 0, 0) ) { innerPadding -> Box( diff --git a/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubScreen.kt b/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubScreen.kt index 60935e1b7..a23a9b89b 100644 --- a/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubScreen.kt +++ b/app/src/main/java/io/legado/app/ui/rss/subscription/RuleSubScreen.kt @@ -45,6 +45,7 @@ import io.legado.app.ui.association.ImportBookSourceDialog import io.legado.app.ui.association.ImportReplaceRuleDialog import io.legado.app.ui.association.ImportRssSourceDialog import io.legado.app.ui.theme.LegadoTheme +import io.legado.app.ui.theme.adaptiveContentPadding import io.legado.app.ui.widget.components.AppTextField import io.legado.app.ui.widget.components.EmptyMessage import io.legado.app.ui.widget.components.alert.AppAlertDialog @@ -107,10 +108,9 @@ fun RuleSubScreen( onClick = { showEditDialog = RuleSub(customOrder = state.items.size + 1) }, - tooltipText = "Localized description" - ) { - Icon(Icons.Default.Add, contentDescription = "Add Rule") - } + tooltipText = stringResource(R.string.add), + icon = Icons.Default.Add + ) } ) { paddingValues -> if (state.items.isEmpty()) { @@ -129,7 +129,10 @@ fun RuleSubScreen( val typeArray = stringArrayResource(R.array.rule_type) LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = paddingValues, + contentPadding = adaptiveContentPadding( + top = paddingValues.calculateTopPadding(), + bottom = paddingValues.calculateBottomPadding() + 120.dp + ), verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(state.items, key = { it.id }) { ruleSub -> diff --git a/app/src/main/java/io/legado/app/ui/widget/components/AppFloatingActionButton.kt b/app/src/main/java/io/legado/app/ui/widget/components/AppFloatingActionButton.kt index a4e9d8440..6b4bb65fd 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/AppFloatingActionButton.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/AppFloatingActionButton.kt @@ -2,6 +2,7 @@ package io.legado.app.ui.widget.components import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon import androidx.compose.material3.PlainTooltip import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox @@ -10,10 +11,13 @@ import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.theme.ThemeResolver +import io.legado.app.ui.widget.components.icon.AppIcon import io.legado.app.ui.widget.components.text.AppText import top.yukonga.miuix.kmp.basic.FloatingActionButton as MiuixFloatingActionButton +import top.yukonga.miuix.kmp.basic.Icon as MiuixIcon @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -21,17 +25,37 @@ fun AppFloatingActionButton( onClick: () -> Unit, modifier: Modifier = Modifier, tooltipText: String? = null, + icon: ImageVector? = null, containerColor: Color = LegadoTheme.colorScheme.primaryContainer, contentColor: Color = LegadoTheme.colorScheme.onPrimaryContainer, - content: @Composable () -> Unit + content: (@Composable () -> Unit)? = null ) { val isMiuix = ThemeResolver.isMiuixEngine(LegadoTheme.composeEngine) + val fabContent: @Composable () -> Unit = { + if (icon != null) { + if (isMiuix){ + MiuixIcon( + imageVector = icon, + contentDescription = tooltipText, + tint = Color.White + ) + } else { + Icon( + imageVector = icon, + contentDescription = tooltipText + ) + } + + } else { + content?.invoke() + } + } if (isMiuix) { MiuixFloatingActionButton( onClick = onClick, modifier = modifier, - content = content + content = fabContent ) } else { if (tooltipText != null) { @@ -47,7 +71,7 @@ fun AppFloatingActionButton( modifier = modifier, containerColor = containerColor, contentColor = contentColor, - content = content + content = fabContent ) } } else { @@ -56,7 +80,7 @@ fun AppFloatingActionButton( modifier = modifier, containerColor = containerColor, contentColor = contentColor, - content = content + content = fabContent ) } } diff --git a/app/src/main/java/io/legado/app/ui/widget/components/AppLinearProgressIndicator.kt b/app/src/main/java/io/legado/app/ui/widget/components/AppLinearProgressIndicator.kt deleted file mode 100644 index c80f0412b..000000000 --- a/app/src/main/java/io/legado/app/ui/widget/components/AppLinearProgressIndicator.kt +++ /dev/null @@ -1,34 +0,0 @@ -package io.legado.app.ui.widget.components - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import io.legado.app.ui.theme.LegadoTheme.composeEngine -import io.legado.app.ui.theme.ThemeResolver -// 这里建议使用 as 关键字为两个库的控件起别名,避免同名冲突 -import androidx.compose.material3.LinearProgressIndicator -// 请替换为实际的 MIUIX 控件包名 -import top.yukonga.miuix.kmp.basic.LinearProgressIndicator as MiuixLinearProgressIndicator - -@Composable -fun AppLinearProgressIndicator( - modifier: Modifier = Modifier, - progress: Float? = null, -) { - if (ThemeResolver.isMiuixEngine(composeEngine)) { - MiuixLinearProgressIndicator( - modifier = modifier, - progress = progress - ) - } else { - if (progress != null) { - LinearProgressIndicator( - progress = { progress }, - modifier = modifier - ) - } else { - LinearProgressIndicator( - modifier = modifier - ) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/components/cover/BookshelfCover.kt b/app/src/main/java/io/legado/app/ui/widget/components/cover/BookshelfCover.kt index 46db58053..8778dde48 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/cover/BookshelfCover.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/cover/BookshelfCover.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.legado.app.ui.theme.LegadoTheme -import io.legado.app.ui.widget.components.AppLinearProgressIndicator +import io.legado.app.ui.widget.components.progressIndicator.AppLinearProgressIndicator import io.legado.app.ui.widget.components.card.TextCard @OptIn(ExperimentalSharedTransitionApi::class) diff --git a/app/src/main/java/io/legado/app/ui/widget/components/list/ListScaffold.kt b/app/src/main/java/io/legado/app/ui/widget/components/list/ListScaffold.kt index 46d95f15e..3fb74f0d9 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/list/ListScaffold.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/list/ListScaffold.kt @@ -16,7 +16,6 @@ import androidx.compose.material.icons.filled.Add import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FloatingToolbarDefaults.ScreenOffset -import androidx.compose.material3.Icon import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.animateFloatingActionButton @@ -64,10 +63,9 @@ fun ListScaffold( visible = state.selectedIds.isEmpty(), alignment = Alignment.BottomEnd, ), - tooltipText = "添加" - ) { - Icon(Icons.Default.Add, contentDescription = "Add") - } + tooltipText = "添加", + icon = Icons.Default.Add + ) } }, snackbarHostState: SnackbarHostState = remember { SnackbarHostState() }, diff --git a/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleEditSheet.kt b/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleEditSheet.kt index 5799f7bad..439fe15a1 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleEditSheet.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleEditSheet.kt @@ -38,7 +38,6 @@ import io.legado.app.ui.theme.LegadoTheme import io.legado.app.ui.widget.components.AppFloatingActionButton import io.legado.app.ui.widget.components.AppTextField import io.legado.app.ui.widget.components.button.MediumIconButton -import io.legado.app.ui.widget.components.icon.AppIcon import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenu import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenuItem import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet @@ -164,10 +163,9 @@ fun RuleEditSheet( onClick = { onSave(getCurrentEntity()) }, modifier = Modifier .align(Alignment.BottomEnd) - .padding(16.dp) - ) { - AppIcon(Icons.Default.Save, contentDescription = "Save") - } + .padding(16.dp), + icon = Icons.Default.Save + ) } } } diff --git a/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleListScaffold.kt b/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleListScaffold.kt index 151457308..8d612b079 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleListScaffold.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/rules/RuleListScaffold.kt @@ -29,6 +29,7 @@ import io.legado.app.ui.widget.components.ActionItem import io.legado.app.ui.widget.components.AppFloatingActionButton import io.legado.app.ui.widget.components.SelectionActions import io.legado.app.ui.widget.components.alert.AppAlertDialog +import io.legado.app.ui.widget.components.icon.AppIcon import io.legado.app.ui.widget.components.list.ListScaffold import io.legado.app.ui.widget.components.list.ListUiState import io.legado.app.ui.widget.components.text.AppText @@ -61,10 +62,9 @@ fun RuleListScaffold( visible = state.selectedIds.isEmpty(), alignment = Alignment.BottomEnd, ), - tooltipText = "添加" - ) { - Icon(Icons.Default.Add, contentDescription = "Add") - } + tooltipText = "添加", + icon = Icons.Default.Add + ) } }, snackbarHostState: SnackbarHostState,