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

+ 8 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt

@@ -772,6 +772,9 @@ sealed interface ConfigUpdate {
     data class TipFooterRight(val value: Int) : ConfigUpdate {
         override val actions = setOf(ConfigUpdateAction.UpdateStyle, ConfigUpdateAction.UpdateContent)
     }
+    data class HeaderFont(val path: String) : ConfigUpdate {
+        override val actions = setOf(ConfigUpdateAction.UpdateStyle)
+    }
     data class HeaderFontSize(val value: Int) : ConfigUpdate {
         override val actions = setOf(ConfigUpdateAction.UpdateStyle)
     }
@@ -1063,4 +1066,9 @@ sealed interface ConfigUpdate {
     data class AutoReadSpeed(val value: Int) : ConfigUpdate {
         override val actions = emptySet<ConfigUpdateAction>()
     }
+
+    // --- Chinese converter ---
+    data class ChineseConverterType(val value: Int) : ConfigUpdate {
+        override val actions = setOf(ConfigUpdateAction.ReloadContent)
+    }
 }

+ 17 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -2349,6 +2349,7 @@ class ReadBookViewModel(
             is ConfigUpdate.TipFooterLeft -> ReadBookConfig.tipFooterLeft = update.value
             is ConfigUpdate.TipFooterMiddle -> ReadBookConfig.tipFooterMiddle = update.value
             is ConfigUpdate.TipFooterRight -> ReadBookConfig.tipFooterRight = update.value
+            is ConfigUpdate.HeaderFont -> ReadBookConfig.headerFont = update.path
             is ConfigUpdate.HeaderFontSize -> ReadBookConfig.headerFontSize = update.value
             is ConfigUpdate.TipHeaderColor -> ReadBookConfig.tipHeaderColor = update.color
             is ConfigUpdate.TipFooterColor -> ReadBookConfig.tipFooterColor = update.color
@@ -2722,27 +2723,32 @@ class ReadBookViewModel(
 
             // --- Display toggles ---
             is ConfigUpdate.PaddingDisplayCutouts -> {
+                ReadConfig.paddingDisplayCutouts = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setPaddingDisplayCutouts(update.value)
                 }
             }
             is ConfigUpdate.TitleBarMode -> {
+                ReadConfig.titleBarMode = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setTitleBarMode(update.value)
                 }
                 postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
             }
             is ConfigUpdate.TextFullJustify -> {
+                ReadBookConfig.textFullJustify = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setTextFullJustify(update.value)
                 }
             }
             is ConfigUpdate.TextBottomJustify -> {
+                ReadBookConfig.textBottomJustify = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setTextBottomJustify(update.value)
                 }
             }
             is ConfigUpdate.AdaptSpecialStyle -> {
+                ReadConfig.adaptSpecialStyle = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setAdaptSpecialStyle(update.value)
                 }
@@ -2760,6 +2766,7 @@ class ReadBookViewModel(
                 postEvent(PreferKey.showBrightnessView, "")
             }
             is ConfigUpdate.UseUnderlineGlobal -> {
+                ReadConfig.useUnderline = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setUseUnderline(update.value)
                 }
@@ -2782,12 +2789,14 @@ class ReadBookViewModel(
                 ReadBook.loadContent(false)
             }
             is ConfigUpdate.ProgressBarBehavior -> {
+                ReadConfig.progressBarBehavior = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setProgressBarBehavior(update.value)
                 }
                 _uiState.update { it.copy(styleConfig = buildStyleConfig()) }
             }
             is ConfigUpdate.NoAnimScrollPage -> {
+                ReadConfig.noAnimScrollPage = update.value
                 viewModelScope.launch {
                     readSettingsRepository.setNoAnimScrollPage(update.value)
                 }
@@ -2807,6 +2816,14 @@ class ReadBookViewModel(
                     readSettingsRepository.setAutoReadSpeed(update.value)
                 }
             }
+
+            // --- Chinese converter ---
+            is ConfigUpdate.ChineseConverterType -> {
+                ReadConfig.chineseConverterType = update.value
+                viewModelScope.launch {
+                    readSettingsRepository.setChineseConverterType(update.value)
+                }
+            }
         }
 
         // Notify rendering layer

+ 21 - 2
app/src/main/java/io/legado/app/ui/book/read/sheet/HeaderFooterPage.kt

@@ -49,7 +49,6 @@ private const val COLOR_DIVIDER = 9
 
 @Composable
 internal fun HeaderFooterPage(
-    onOpenFontSelect: () -> Unit,
     modifier: Modifier = Modifier,
     onIntent: (ReadBookIntent) -> Unit,
 ) {
@@ -86,6 +85,7 @@ internal fun HeaderFooterPage(
     var showColorPicker by remember { mutableStateOf(false) }
     var colorPickerId by remember { mutableIntStateOf(0) }
     var colorPickerInitial by remember { mutableIntStateOf(0) }
+    var showFontSelect by remember { mutableStateOf(false) }
 
     val tipNames = remember { ReadBookConfig.tipNames }
     val tipValues = remember { ReadBookConfig.tipValues }
@@ -348,7 +348,7 @@ internal fun HeaderFooterPage(
                             title = stringResource(R.string.header_font),
                             description = stringResource(R.string.select_font),
                             imageVector = Icons.Default.TextFields,
-                            onClick = onOpenFontSelect,
+                            onClick = { showFontSelect = true },
                         )
                         TinySliderSettingItem(
                             title = stringResource(R.string.header_font_size),
@@ -390,6 +390,25 @@ internal fun HeaderFooterPage(
             },
         )
     }
+
+    // Font selector for header/footer
+    if (showFontSelect) {
+        FontSelectSheet(
+            show = true,
+            onDismissRequest = { showFontSelect = false },
+            onSelectFont = {
+                onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.HeaderFont(it)))
+                onIntent(ReadBookIntent.SaveReadStyleConfig)
+                showFontSelect = false
+            },
+            onSelectSystemTypeface = {
+                onIntent(ReadBookIntent.UpdateConfig(ConfigUpdate.HeaderFont("")))
+                onIntent(ReadBookIntent.SaveReadStyleConfig)
+                showFontSelect = false
+            },
+            onOpenFolderPicker = { /* handled by FontSelectSheet internally */ },
+        )
+    }
 }
 
 @Composable

+ 0 - 1
app/src/main/java/io/legado/app/ui/book/read/sheet/ReadStyleSheet.kt

@@ -136,7 +136,6 @@ fun ReadStyleContent(
                     onIntent = onIntent,
                 )
                 2 -> HeaderFooterPage(
-                    onOpenFontSelect = onOpenFontSelect,
                     onIntent = onIntent,
                 )
             }