Преглед изворни кода

refactor(Track E·E4): UP_CONFIG 整数码退役,改用 typed ReadConfigUpdateBus

R1.3。新建 ReadConfigUpdateBus(SharedFlow<Set<ConfigUpdateAction>>),
6 个生产端全部改发 typed action(映射与 VM 旧翻译表逐码核对一致,
含 5→ReloadContent+RebuildWholeBookPageIndex 魔数特判的忠实展开):
- ThemeConfigStore.applyDayNight/applyDayNightLive: (2)→UpdateStyle
- ReadBook 换书样式跟随: (1,2,5)→Background+Style+Reload+RebuildWholeBookPageIndex
- ChapterProvider.upViewSize: (12)→RelayoutContent
- ApplyReadSettingUseCase: (0,2)→SystemUi+Style;(4)→UpdatePageSlopSquare
- ReadAloudPlayerCoordinator: EVENT_KEYS 移除 UP_CONFIG,改并流订阅总线
删 EventBus.UP_CONFIG 常量与 VM 里 0..12 翻译表。全仓 UP_CONFIG 引用=0。
验证:compileAppDebugKotlin + 410 单测全绿。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
5151561 пре 3 месеци
родитељ
комит
0cad47feb1

+ 0 - 1
app/src/main/java/io/legado/app/constant/EventBus.kt

@@ -10,7 +10,6 @@ object EventBus {
     const val READ_ALOUD_DS = "readAloudDs"
     const val BATTERY_CHANGED = "batteryChanged"
     const val TIME_CHANGED = "timeChanged"
-    const val UP_CONFIG = "upConfig"
     const val AUDIO_SUB_TITLE = "audioSubTitle"
     const val AUDIO_STATE = "audioState"
     const val AUDIO_PROGRESS = "audioProgress"

+ 4 - 4
app/src/main/java/io/legado/app/help/config/ThemeConfigStore.kt

@@ -5,9 +5,10 @@ import android.graphics.Bitmap
 import android.util.DisplayMetrics
 import androidx.annotation.Keep
 import androidx.core.graphics.toColorInt
+import io.legado.app.ui.book.read.ConfigUpdateAction
+import io.legado.app.ui.book.read.ReadConfigUpdateBus
 import io.legado.app.ui.config.themeConfig.ThemeConfig
 import io.legado.app.R
-import io.legado.app.constant.EventBus
 import io.legado.app.constant.PreferKey
 import io.legado.app.constant.Theme
 import io.legado.app.help.DefaultData
@@ -22,7 +23,6 @@ import io.legado.app.utils.getFile
 import io.legado.app.utils.getPrefInt
 import io.legado.app.utils.getPrefString
 import io.legado.app.utils.hexString
-import io.legado.app.utils.postEvent
 import io.legado.app.utils.printOnDebug
 import io.legado.app.utils.stackBlur
 import splitties.init.appCtx
@@ -45,7 +45,7 @@ object ThemeConfigStore {
 
     fun applyDayNight(context: Context) {
         initNightMode()
-        postEvent(EventBus.UP_CONFIG, arrayListOf(2))
+        ReadConfigUpdateBus.post(setOf(ConfigUpdateAction.UpdateStyle))
     }
 
     /**
@@ -54,7 +54,7 @@ object ThemeConfigStore {
      */
     fun applyDayNightLive() {
         initNightMode()
-        postEvent(EventBus.UP_CONFIG, arrayListOf(2))
+        ReadConfigUpdateBus.post(setOf(ConfigUpdateAction.UpdateStyle))
     }
 
     fun applyDayNightInit(context: Context) {

+ 10 - 1
app/src/main/java/io/legado/app/model/ReadBook.kt

@@ -35,6 +35,8 @@ import io.legado.app.model.translation.TranslationManager
 import io.legado.app.model.webBook.WebBook
 import io.legado.app.service.BaseReadAloudService
 import io.legado.app.service.CacheBookService
+import io.legado.app.ui.book.read.ConfigUpdateAction
+import io.legado.app.ui.book.read.ReadConfigUpdateBus
 import io.legado.app.ui.book.read.page.entities.TextChapter
 import io.legado.app.ui.book.read.page.entities.TextPage
 import io.legado.app.ui.book.read.page.provider.ChapterProvider
@@ -557,7 +559,14 @@ object ReadBook : CoroutineScope by MainScope(), KoinComponent {
         val oldIndex = ReadBookConfig.styleSelect
         ReadSessionState.isComic = book.isImage
         if (oldIndex != ReadBookConfig.styleSelect) {
-            postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
+            ReadConfigUpdateBus.post(
+                setOf(
+                    ConfigUpdateAction.UpdateBackground,
+                    ConfigUpdateAction.UpdateStyle,
+                    ConfigUpdateAction.ReloadContent,
+                    ConfigUpdateAction.RebuildWholeBookPageIndex,
+                )
+            )
             if (ReadConfig.readBarStyleFollowPage) {
                 postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
             }

+ 2 - 29
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -2181,41 +2181,14 @@ class ReadBookViewModel(
             }
         }
         viewModelScope.launch {
-            eventFlow<ArrayList<Int>>(EventBus.UP_CONFIG).collect { values ->
+            ReadConfigUpdateBus.events.collect { actions ->
                 _uiState.update {
                     it.copy(
                         styleConfig = buildStyleConfig(),
                         sheetConfig = buildSheetConfig(),
                     )
                 }
-                // Convert legacy integer codes to ConfigUpdateAction set
-                val actions = values.mapNotNull { code ->
-                    when (code) {
-                        0 -> ConfigUpdateAction.UpdateSystemUi
-                        1 -> ConfigUpdateAction.UpdateBackground
-                        2 -> ConfigUpdateAction.UpdateStyle
-                        3 -> ConfigUpdateAction.UpdateBackgroundAlpha
-                        4 -> ConfigUpdateAction.UpdatePageSlopSquare
-                        5 -> ConfigUpdateAction.ReloadContent
-                        6 -> ConfigUpdateAction.UpdateContent
-                        8 -> ConfigUpdateAction.UpdateChapterStyle
-                        9 -> ConfigUpdateAction.InvalidateTextPage
-                        10 -> ConfigUpdateAction.UpdateLayout
-                        11 -> ConfigUpdateAction.SubmitRenderTask
-                        12 -> ConfigUpdateAction.RelayoutContent
-                        else -> null
-                    }
-                }.toSet()
-                    .let { actions ->
-                        if (5 in values) {
-                            setOf(ConfigUpdateAction.RebuildWholeBookPageIndex) + actions
-                        } else {
-                            actions
-                        }
-                    }
-                if (actions.isNotEmpty()) {
-                    emitEffectWhenSubscribed(ReadBookEffect.UpdateReadViewConfig(actions))
-                }
+                emitEffectWhenSubscribed(ReadBookEffect.UpdateReadViewConfig(actions))
             }
         }
         viewModelScope.launch {

+ 21 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadConfigUpdateBus.kt

@@ -0,0 +1,21 @@
+package io.legado.app.ui.book.read
+
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.SharedFlow
+
+/**
+ * Typed replacement for the legacy `EventBus.UP_CONFIG` integer-code channel.
+ * Producers post [ConfigUpdateAction] sets; [ReadBookViewModel] collects and
+ * forwards them to the ReadView as [ReadBookEffect.UpdateReadViewConfig].
+ */
+object ReadConfigUpdateBus {
+
+    private val _events = MutableSharedFlow<Set<ConfigUpdateAction>>(extraBufferCapacity = 64)
+    val events: SharedFlow<Set<ConfigUpdateAction>> = _events
+
+    fun post(actions: Set<ConfigUpdateAction>) {
+        if (actions.isNotEmpty()) {
+            _events.tryEmit(actions)
+        }
+    }
+}

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt

@@ -11,7 +11,6 @@ import android.text.StaticLayout
 import android.text.TextPaint
 import androidx.core.net.toUri
 import androidx.core.os.postDelayed
-import io.legado.app.constant.EventBus
 import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.BookChapter
 import io.legado.app.help.book.BookContent
@@ -19,13 +18,14 @@ import io.legado.app.help.config.ReadBookConfig
 import io.legado.app.help.config.ReadBookConfig.dottedBase
 import io.legado.app.help.config.ReadBookConfig.dottedRatio
 import io.legado.app.model.ReadBook
+import io.legado.app.ui.book.read.ConfigUpdateAction
+import io.legado.app.ui.book.read.ReadConfigUpdateBus
 import io.legado.app.ui.book.read.page.entities.TextChapter
 import io.legado.app.ui.config.readConfig.ReadConfig
 import io.legado.app.utils.buildMainHandler
 import io.legado.app.utils.dpToPx
 import io.legado.app.utils.isContentScheme
 import io.legado.app.utils.isPad
-import io.legado.app.utils.postEvent
 import io.legado.app.utils.spToPx
 import io.legado.app.utils.textHeight
 import kotlinx.coroutines.CoroutineScope
@@ -1109,7 +1109,7 @@ object ChapterProvider {
         viewHeight = height
         upLayout()
         ReadBook.requestWholeBookPageEstimate()
-        postEvent(EventBus.UP_CONFIG, arrayListOf(12))
+        ReadConfigUpdateBus.post(setOf(ConfigUpdateAction.RelayoutContent))
     }
 
     /**

+ 4 - 2
app/src/main/java/io/legado/app/ui/book/readaloud/player/ReadAloudPlayerCoordinator.kt

@@ -10,6 +10,7 @@ import io.legado.app.model.ReadAloud
 import io.legado.app.model.ReadAloudSessionStore
 import io.legado.app.model.ReadBook
 import io.legado.app.service.BaseReadAloudService
+import io.legado.app.ui.book.read.ReadConfigUpdateBus
 import io.legado.app.ui.config.readConfig.ReadConfig
 import kotlinx.collections.immutable.ImmutableList
 import kotlinx.collections.immutable.toImmutableList
@@ -36,7 +37,9 @@ class ReadAloudPlayerCoordinator(
             EVENT_KEYS.forEach { LiveEventBus.get<Any>(it).removeObserver(observer) }
         }
     }
-    private val bookState = merge(bookChanges, refreshRequests).map { snapshotBook() }
+    private val configChanges = ReadConfigUpdateBus.events.map { }
+    private val bookState =
+        merge(bookChanges, refreshRequests, configChanges).map { snapshotBook() }
 
     val state: Flow<ReadAloudPlayerSourceState> = combine(
         sessionStore.state,
@@ -144,7 +147,6 @@ class ReadAloudPlayerCoordinator(
 
     private companion object {
         val EVENT_KEYS = listOf(
-            EventBus.UP_CONFIG,
             EventBus.UPDATE_READ_ACTION_BAR,
             EventBus.SOURCE_CHANGED,
             EventBus.ALOUD_STATE,

+ 6 - 2
app/src/main/java/io/legado/app/ui/config/readConfig/ApplyReadSettingUseCase.kt

@@ -2,6 +2,8 @@ package io.legado.app.ui.config.readConfig
 
 import io.legado.app.constant.EventBus
 import io.legado.app.model.ReadBook
+import io.legado.app.ui.book.read.ConfigUpdateAction
+import io.legado.app.ui.book.read.ReadConfigUpdateBus
 import io.legado.app.ui.book.read.page.provider.ChapterProvider
 import io.legado.app.utils.postEvent
 
@@ -12,7 +14,9 @@ class ApplyReadSettingUseCase {
         when (intent) {
             is ReadConfigIntent.HideStatusBarChanged,
             is ReadConfigIntent.HideNavigationBarChanged -> {
-                postEvent(EventBus.UP_CONFIG, arrayListOf(0, 2))
+                ReadConfigUpdateBus.post(
+                    setOf(ConfigUpdateAction.UpdateSystemUi, ConfigUpdateAction.UpdateStyle)
+                )
             }
 
             is ReadConfigIntent.ReadMenuBlurAlphaChanged,
@@ -32,7 +36,7 @@ class ApplyReadSettingUseCase {
             }
 
             is ReadConfigIntent.PageTouchSlopChanged -> {
-                postEvent(EventBus.UP_CONFIG, arrayListOf(4))
+                ReadConfigUpdateBus.post(setOf(ConfigUpdateAction.UpdatePageSlopSquare))
             }
 
             is ReadConfigIntent.NoAnimScrollPageChanged -> ReadBook.renderCallBack?.upPageAnim()