HapeLee 5 месяцев назад
Родитель
Сommit
5cc126cf5b

+ 2 - 1
.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 *)"
     ]
   }
 }

+ 1 - 1
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

+ 1 - 1
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

+ 1 - 1
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

+ 4 - 7
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 ->

+ 3 - 5
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
+            )
         }
     }
 }

+ 4 - 7
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(
         }
     }
 }
-

+ 5 - 4
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(

+ 8 - 5
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 ->

+ 28 - 4
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
             )
         }
     }

+ 0 - 34
app/src/main/java/io/legado/app/ui/widget/components/AppLinearProgressIndicator.kt

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

+ 1 - 1
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)

+ 3 - 5
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 <T> ListScaffold(
                     visible = state.selectedIds.isEmpty(),
                     alignment = Alignment.BottomEnd,
                 ),
-                tooltipText = "添加"
-            ) {
-                Icon(Icons.Default.Add, contentDescription = "Add")
-            }
+                tooltipText = "添加",
+                icon = Icons.Default.Add
+            )
         }
     },
     snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },

+ 3 - 5
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 <T> 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
+            )
         }
     }
 }

+ 4 - 4
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 <T> RuleListScaffold(
                     visible = state.selectedIds.isEmpty(),
                     alignment = Alignment.BottomEnd,
                 ),
-                tooltipText = "添加"
-            ) {
-                Icon(Icons.Default.Add, contentDescription = "Add")
-            }
+                tooltipText = "添加",
+                icon = Icons.Default.Add
+            )
         }
     },
     snackbarHostState: SnackbarHostState,