Просмотр исходного кода

修复 Miuix 主题下字体/边框/圆角设置不生效

- MiuixTheme 传入应用自定义字体的 textStyles,原生 Miuix 组件也生效
- SplicedColumnGroup 的 Miuix 卡片补上边框/圆角覆盖配置
- 字体弹窗按 URI 类型取文件名,本地路径直接用 File.name,避免空 Cursor 警告
- listFileDocs 跳过 tree 根的元数据查询,同样消除空 Cursor 警告
5151561 3 месяцев назад
Родитель
Сommit
7407a3bbea

+ 9 - 1
app/src/main/java/io/legado/app/ui/theme/ThemeComponents.kt

@@ -24,6 +24,7 @@ import kotlinx.coroutines.withContext
 import top.yukonga.miuix.kmp.theme.ColorSchemeMode
 import top.yukonga.miuix.kmp.theme.MiuixTheme
 import top.yukonga.miuix.kmp.theme.ThemeController
+import top.yukonga.miuix.kmp.theme.defaultTextStyles
 
 @Composable
 fun rememberCustomFont(fontPath: String?): FontFamily? {
@@ -124,7 +125,14 @@ fun MiuixThemeWrapper(
         }
     }
 
-    MiuixTheme(controller = controller) {
+    val miuixTextStyles = remember(customFontFamily) {
+        defaultTextStyles().withFont(customFontFamily)
+    }
+
+    MiuixTheme(
+        controller = controller,
+        textStyles = miuixTextStyles,
+    ) {
         val miuixStyles = MiuixTheme.textStyles
         val legadoTypography = remember(miuixStyles, customFontFamily) {
             miuixStylesToM3Typography(miuixStyles)

+ 20 - 0
app/src/main/java/io/legado/app/ui/theme/Typography.kt

@@ -37,6 +37,26 @@ fun miuixStylesToM3Typography(miuixStyles: TextStyles): Typography {
     )
 }
 
+fun TextStyles.withFont(fontFamily: FontFamily?): TextStyles {
+    if (fontFamily == null) return this
+    return copy(
+        main = main.copy(fontFamily = fontFamily),
+        paragraph = paragraph.copy(fontFamily = fontFamily),
+        body1 = body1.copy(fontFamily = fontFamily),
+        body2 = body2.copy(fontFamily = fontFamily),
+        button = button.copy(fontFamily = fontFamily),
+        footnote1 = footnote1.copy(fontFamily = fontFamily),
+        footnote2 = footnote2.copy(fontFamily = fontFamily),
+        headline1 = headline1.copy(fontFamily = fontFamily),
+        headline2 = headline2.copy(fontFamily = fontFamily),
+        subtitle = subtitle.copy(fontFamily = fontFamily),
+        title1 = title1.copy(fontFamily = fontFamily),
+        title2 = title2.copy(fontFamily = fontFamily),
+        title3 = title3.copy(fontFamily = fontFamily),
+        title4 = title4.copy(fontFamily = fontFamily),
+    )
+}
+
 @OptIn(ExperimentalMaterial3ExpressiveApi::class)
 fun Typography.toLegadoTypography(): LegadoTypography {
     return LegadoTypography(

+ 8 - 1
app/src/main/java/io/legado/app/ui/widget/components/FontSelectSheet.kt

@@ -20,6 +20,8 @@ import io.legado.app.R
 import io.legado.app.ui.widget.components.button.series.SmallPlainButton
 import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
 import io.legado.app.utils.FileDoc
+import io.legado.app.utils.isContentScheme
+import java.io.File
 
 @Composable
 fun FontSelectSheet(
@@ -41,7 +43,12 @@ fun FontSelectSheet(
     val selectedFontName = remember(selectedFontPath) {
         selectedFontPath?.let {
             runCatching {
-                DocumentFile.fromSingleUri(context, it.toUri())?.name
+                val uri = it.toUri()
+                if (uri.isContentScheme()) {
+                    DocumentFile.fromSingleUri(context, uri)?.name
+                } else {
+                    File(uri.path ?: it).name
+                }
             }.getOrNull()
         }
     }

+ 29 - 2
app/src/main/java/io/legado/app/ui/widget/components/SplicedColumnGroup.kt

@@ -1,6 +1,8 @@
 package io.legado.app.ui.widget.components
 
 import androidx.compose.animation.animateContentSize
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.border
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
@@ -14,6 +16,7 @@ import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.unit.dp
 import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.theme.LocalAppUiConfiguration
@@ -43,7 +46,25 @@ fun SplicedColumnGroup(
     val composeEngine = LegadoTheme.composeEngine
     val themeSettings = LocalAppUiConfiguration.current.theme
     val enableItemDivider = themeSettings.enableItemDivider
-    val cornerRadius = if (themeSettings.disableSplicedColumnGroupCornerRadius) 0.dp else 16.dp
+    val cornerRadius = when {
+        themeSettings.disableSplicedColumnGroupCornerRadius -> 0.dp
+        themeSettings.overrideBaseCardCornerRadius -> themeSettings.baseCardCornerRadius.dp
+        else -> 16.dp
+    }
+    val border = if (themeSettings.overrideBaseCardBorder) {
+        val configuredColor = if (LegadoTheme.isDark) {
+            themeSettings.baseCardBorderColorNight
+        } else {
+            themeSettings.baseCardBorderColor
+        }
+        BorderStroke(
+            themeSettings.baseCardBorderWidth.dp,
+            configuredColor.takeIf { it != 0 }?.let(::Color)
+                ?: LegadoTheme.colorScheme.outlineVariant
+        )
+    } else {
+        null
+    }
     val currentIndex = remember { mutableIntStateOf(0) }
 
     val groupState = remember(enableItemDivider) {
@@ -64,7 +85,13 @@ fun SplicedColumnGroup(
 
         CompositionLocalProvider(LocalSplicedColumnGroupState provides groupState) {
             if (ThemeResolver.isMiuixEngine(composeEngine)) {
-                MiuixCard(cornerRadius = cornerRadius) {
+                MiuixCard(
+                    modifier = Modifier.then(
+                        border?.let { Modifier.border(it, RoundedCornerShape(cornerRadius)) }
+                            ?: Modifier
+                    ),
+                    cornerRadius = cornerRadius,
+                ) {
                     Column(
                         modifier = Modifier
                             .fillMaxWidth()

+ 7 - 1
app/src/main/java/io/legado/app/utils/FileDocExtensions.kt

@@ -365,7 +365,13 @@ fun FileDoc.checkWrite(): Boolean {
  * DocumentFile 的 listFiles() 非常的慢,尽量不要使用
  */
 fun DocumentFile.listFileDocs(filter: FileDocFilter? = null): ArrayList<FileDoc>? {
-    return FileDoc.fromDocumentFile(this).list(filter)
+    return FileDoc(
+        name = "",
+        isDir = true,
+        size = 0,
+        lastModified = 0,
+        uri = uri,
+    ).list(filter)
 }
 
 @Throws(Exception::class)