Procházet zdrojové kódy

fix: 漫画偏好设置问题

HapeLee před 5 měsíci
rodič
revize
43d5f6d5e2
19 změnil soubory, kde provedl 312 přidání a 540 odebrání
  1. 0 182
      app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt
  2. 0 2
      app/src/main/java/io/legado/app/di/appModule.kt
  3. 66 117
      app/src/main/java/io/legado/app/help/config/AppConfig.kt
  4. 2 1
      app/src/main/java/io/legado/app/model/BookCover.kt
  5. 3 2
      app/src/main/java/io/legado/app/model/ReadManga.kt
  6. 2 1
      app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt
  7. 34 33
      app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt
  8. 4 90
      app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt
  9. 2 2
      app/src/main/java/io/legado/app/ui/book/manga/config/MangaAutoReadDialog.kt
  10. 25 34
      app/src/main/java/io/legado/app/ui/book/manga/config/MangaClickActionConfigDialog.kt
  11. 8 16
      app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt
  12. 14 21
      app/src/main/java/io/legado/app/ui/book/manga/config/MangaFooterSettingDialog.kt
  13. 3 3
      app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt
  14. 11 11
      app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonFrame.kt
  15. 3 3
      app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigScreen.kt
  16. 1 16
      app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigViewModel.kt
  17. 126 0
      app/src/main/java/io/legado/app/ui/config/readMangaConfig/ReadMangaConfig.kt
  18. 5 4
      app/src/main/java/io/legado/app/utils/ContextExtensions.kt
  19. 3 2
      app/src/main/java/io/legado/app/utils/FragmentExtensions.kt

+ 0 - 182
app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt

@@ -1,182 +0,0 @@
-package io.legado.app.data.repository
-
-import android.content.Context
-import androidx.datastore.preferences.core.Preferences
-import androidx.datastore.preferences.core.booleanPreferencesKey
-import androidx.datastore.preferences.core.emptyPreferences
-import androidx.datastore.preferences.core.intPreferencesKey
-import androidx.datastore.preferences.core.stringPreferencesKey
-import io.legado.app.constant.PreferKey
-import io.legado.app.ui.book.manga.config.MangaScrollMode
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.catch
-import kotlinx.coroutines.flow.map
-import java.io.IOException
-
-data class MangaPreferences(
-    val showMangaUi: Boolean = true,
-    val disableMangaScale: Boolean = true,
-    val disableMangaScrollAnimation: Boolean = false,
-    val disableMangaCrossFade: Boolean = false,
-    val disableClickScroll: Boolean = false,
-    val mangaPreDownloadNum: Int = 10,
-    val mangaAutoPageSpeed: Int = 3,
-    val mangaFooterConfig: String = "",
-    val mangaScrollMode: Int = MangaScrollMode.WEBTOON,
-    val mangaLongClick: Boolean = true,
-    val mangaBackground: Int = 0xFF000000.toInt(),
-    val mangaColorFilter: String = "",
-    val hideMangaTitle: Boolean = false,
-    val enableMangaEInk: Boolean = false,
-    val mangaEInkThreshold: Int = 150,
-    val enableMangaGray: Boolean = false,
-    val webtoonSidePaddingDp: Int = 0,
-    val mangaVolumeKeyPage: Boolean = false,
-    val reverseVolumeKeyPage: Boolean = false,
-    val clickActionTL: Int = -1,
-    val clickActionTC: Int = -1,
-    val clickActionTR: Int = 1,
-    val clickActionML: Int = 2,
-    val clickActionMC: Int = 0,
-    val clickActionMR: Int = 1,
-    val clickActionBL: Int = 2,
-    val clickActionBC: Int = 1,
-    val clickActionBR: Int = 1
-)
-
-class MangaSettingsRepository(
-    private val context: Context,
-    private val settingsRepository: SettingsRepository
-) {
-
-    val preferences: Flow<MangaPreferences> = context.dataStore.data
-        .catch { exception ->
-            if (exception is IOException) {
-                emit(emptyPreferences())
-            } else {
-                throw exception
-            }
-        }
-        .map { preferences ->
-            preferences.toMangaPreferences()
-        }
-
-    suspend fun setShowMangaUi(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.showMangaUi, value)
-
-    suspend fun setMangaPreDownloadNum(value: Int) =
-        settingsRepository.putInt(PreferKey.mangaPreDownloadNum, value)
-
-    suspend fun setMangaAutoPageSpeed(value: Int) =
-        settingsRepository.putInt(PreferKey.mangaAutoPageSpeed, value)
-
-    suspend fun setDisableClickScroll(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.disableClickScroll, value)
-
-    suspend fun setDisableMangaScrollAnimation(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.disableMangaScrollAnimation, value)
-
-    suspend fun setDisableMangaCrossFade(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.disableMangaCrossFade, value)
-
-    suspend fun setDisableMangaScale(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.disableMangaScale, value)
-
-    suspend fun setEnableMangaEInk(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.enableMangaEInk, value)
-
-    suspend fun setMangaEInkThreshold(value: Int) =
-        settingsRepository.putInt(PreferKey.mangaEInkThreshold, value)
-
-    suspend fun setEnableMangaGray(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.enableMangaGray, value)
-
-    suspend fun setMangaAutoColorFilter(value: String) =
-        settingsRepository.putString(PreferKey.mangaColorFilter, value)
-
-    suspend fun setMangaBackground(value: Int) =
-        settingsRepository.putInt(PreferKey.mangaBackground, value)
-
-    suspend fun setMangaLongClick(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.mangaLongClick, value)
-
-    suspend fun setMangaVolumeKeyPage(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.mangaVolumeKeyPage, value)
-
-    suspend fun setReverseVolumeKeyPage(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.reverseVolumeKeyPage, value)
-
-    suspend fun setHideMangaTitle(value: Boolean) =
-        settingsRepository.putBoolean(PreferKey.hideMangaTitle, value)
-
-    suspend fun setMangaFooterConfig(value: String) =
-        settingsRepository.putString(PreferKey.mangaFooterConfig, value)
-
-    suspend fun setMangaClickAction(key: String, value: Int) =
-        settingsRepository.putInt(key, value)
-
-    private fun Preferences.toMangaPreferences(): MangaPreferences {
-        return MangaPreferences(
-            showMangaUi = this[Keys.ShowMangaUi] ?: true,
-            disableMangaScale = this[Keys.DisableMangaScale] ?: true,
-            disableMangaScrollAnimation = this[Keys.DisableMangaScrollAnimation] ?: false,
-            disableMangaCrossFade = this[Keys.DisableMangaCrossFade] ?: false,
-            disableClickScroll = this[Keys.DisableClickScroll] ?: false,
-            mangaPreDownloadNum = this[Keys.MangaPreDownloadNum] ?: 10,
-            mangaAutoPageSpeed = this[Keys.MangaAutoPageSpeed] ?: 3,
-            mangaFooterConfig = this[Keys.MangaFooterConfig] ?: "",
-            mangaScrollMode = this[Keys.MangaScrollMode] ?: MangaScrollMode.WEBTOON,
-            mangaLongClick = this[Keys.MangaLongClick] ?: true,
-            mangaBackground = this[Keys.MangaBackground] ?: 0xFF000000.toInt(),
-            mangaColorFilter = this[Keys.MangaColorFilter] ?: "",
-            hideMangaTitle = this[Keys.HideMangaTitle] ?: false,
-            enableMangaEInk = this[Keys.EnableMangaEInk] ?: false,
-            mangaEInkThreshold = this[Keys.MangaEInkThreshold] ?: 150,
-            enableMangaGray = this[Keys.EnableMangaGray] ?: false,
-            webtoonSidePaddingDp = this[Keys.WebtoonSidePaddingDp] ?: 0,
-            mangaVolumeKeyPage = this[Keys.MangaVolumeKeyPage] ?: false,
-            reverseVolumeKeyPage = this[Keys.ReverseVolumeKeyPage] ?: false,
-            clickActionTL = this[Keys.ClickActionTL] ?: -1,
-            clickActionTC = this[Keys.ClickActionTC] ?: -1,
-            clickActionTR = this[Keys.ClickActionTR] ?: 1,
-            clickActionML = this[Keys.ClickActionML] ?: 2,
-            clickActionMC = this[Keys.ClickActionMC] ?: 0,
-            clickActionMR = this[Keys.ClickActionMR] ?: 1,
-            clickActionBL = this[Keys.ClickActionBL] ?: 2,
-            clickActionBC = this[Keys.ClickActionBC] ?: 1,
-            clickActionBR = this[Keys.ClickActionBR] ?: 1
-        )
-    }
-
-    private object Keys {
-        val ShowMangaUi = booleanPreferencesKey(PreferKey.showMangaUi)
-        val DisableMangaScale = booleanPreferencesKey(PreferKey.disableMangaScale)
-        val DisableMangaScrollAnimation =
-            booleanPreferencesKey(PreferKey.disableMangaScrollAnimation)
-        val DisableMangaCrossFade = booleanPreferencesKey(PreferKey.disableMangaCrossFade)
-        val DisableClickScroll = booleanPreferencesKey(PreferKey.disableClickScroll)
-        val MangaPreDownloadNum = intPreferencesKey(PreferKey.mangaPreDownloadNum)
-        val MangaAutoPageSpeed = intPreferencesKey(PreferKey.mangaAutoPageSpeed)
-        val MangaFooterConfig = stringPreferencesKey(PreferKey.mangaFooterConfig)
-        val MangaScrollMode = intPreferencesKey(PreferKey.mangaScrollMode)
-        val MangaLongClick = booleanPreferencesKey(PreferKey.mangaLongClick)
-        val MangaBackground = intPreferencesKey(PreferKey.mangaBackground)
-        val MangaColorFilter = stringPreferencesKey(PreferKey.mangaColorFilter)
-        val HideMangaTitle = booleanPreferencesKey(PreferKey.hideMangaTitle)
-        val EnableMangaEInk = booleanPreferencesKey(PreferKey.enableMangaEInk)
-        val MangaEInkThreshold = intPreferencesKey(PreferKey.mangaEInkThreshold)
-        val EnableMangaGray = booleanPreferencesKey(PreferKey.enableMangaGray)
-        val WebtoonSidePaddingDp = intPreferencesKey(PreferKey.webtoonSidePaddingDp)
-        val MangaVolumeKeyPage = booleanPreferencesKey(PreferKey.mangaVolumeKeyPage)
-        val ReverseVolumeKeyPage = booleanPreferencesKey(PreferKey.reverseVolumeKeyPage)
-        val ClickActionTL = intPreferencesKey(PreferKey.mangaClickActionTL)
-        val ClickActionTC = intPreferencesKey(PreferKey.mangaClickActionTC)
-        val ClickActionTR = intPreferencesKey(PreferKey.mangaClickActionTR)
-        val ClickActionML = intPreferencesKey(PreferKey.mangaClickActionML)
-        val ClickActionMC = intPreferencesKey(PreferKey.mangaClickActionMC)
-        val ClickActionMR = intPreferencesKey(PreferKey.mangaClickActionMR)
-        val ClickActionBL = intPreferencesKey(PreferKey.mangaClickActionBL)
-        val ClickActionBC = intPreferencesKey(PreferKey.mangaClickActionBC)
-        val ClickActionBR = intPreferencesKey(PreferKey.mangaClickActionBR)
-    }
-}

+ 0 - 2
app/src/main/java/io/legado/app/di/appModule.kt

@@ -25,7 +25,6 @@ import io.legado.app.data.repository.ExploreRepositoryImpl
 import io.legado.app.data.repository.HomepageModulesRepository
 import io.legado.app.data.repository.LlmTranslateRepositoryImpl
 import io.legado.app.data.repository.LocalBookRepository
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.data.repository.ReadBookStyleConfigRepository
 import io.legado.app.data.repository.ReadAloudSettingsRepository
 import io.legado.app.data.repository.ReadRecordRepository
@@ -157,7 +156,6 @@ val appModule = module {
     singleOf(::ReadSettingsRepository)
     singleOf(::ReadAloudSettingsRepository)
     singleOf(::ReadBookStyleConfigRepository)
-    singleOf(::MangaSettingsRepository)
     singleOf(::LocalPreferencesRepository)
     singleOf(::ExploreBooksUseCase)
     singleOf(::ExploreKindUiUseCase)

+ 66 - 117
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -5,7 +5,6 @@ import io.legado.app.BuildConfig
 import io.legado.app.constant.PreferKey
 import io.legado.app.data.appDb
 import io.legado.app.data.repository.ReadPreferences
-import io.legado.app.ui.book.manga.config.MangaScrollMode
 import io.legado.app.ui.config.backupConfig.BackupConfig
 import io.legado.app.ui.config.bookshelfConfig.BookshelfConfig
 import io.legado.app.ui.config.coverConfig.CoverConfig
@@ -13,6 +12,7 @@ import io.legado.app.ui.config.downloadCacheConfig.DownloadCacheConfig
 import io.legado.app.ui.config.importBookConfig.ImportBookConfig
 import io.legado.app.ui.config.otherConfig.OtherConfig
 import io.legado.app.ui.config.readConfig.ReadConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.ui.config.themeConfig.ThemeConfig
 import io.legado.app.utils.canvasrecorder.CanvasRecorderFactory
 import io.legado.app.utils.getPrefBoolean
@@ -46,15 +46,33 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     var clickActionBR = appCtx.getPrefInt(PreferKey.clickActionBR, 1)
 
     //    -1无操作 1下一页 2上一页 0显示菜单
-    var mangaClickActionTL = appCtx.getPrefInt(PreferKey.mangaClickActionTL, -1)
-    var mangaClickActionTC = appCtx.getPrefInt(PreferKey.mangaClickActionTC, -1)
-    var mangaClickActionTR = appCtx.getPrefInt(PreferKey.mangaClickActionTR, 1)
-    var mangaClickActionML = appCtx.getPrefInt(PreferKey.mangaClickActionML, 2)
-    var mangaClickActionMC = appCtx.getPrefInt(PreferKey.mangaClickActionMC, 0)
-    var mangaClickActionMR = appCtx.getPrefInt(PreferKey.mangaClickActionMR, 1)
-    var mangaClickActionBL = appCtx.getPrefInt(PreferKey.mangaClickActionBL, 2)
-    var mangaClickActionBC = appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
-    var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
+    var mangaClickActionTL
+        get() = ReadMangaConfig.mangaClickActionTL
+        set(value) { ReadMangaConfig.mangaClickActionTL = value }
+    var mangaClickActionTC
+        get() = ReadMangaConfig.mangaClickActionTC
+        set(value) { ReadMangaConfig.mangaClickActionTC = value }
+    var mangaClickActionTR
+        get() = ReadMangaConfig.mangaClickActionTR
+        set(value) { ReadMangaConfig.mangaClickActionTR = value }
+    var mangaClickActionML
+        get() = ReadMangaConfig.mangaClickActionML
+        set(value) { ReadMangaConfig.mangaClickActionML = value }
+    var mangaClickActionMC
+        get() = ReadMangaConfig.mangaClickActionMC
+        set(value) { ReadMangaConfig.mangaClickActionMC = value }
+    var mangaClickActionMR
+        get() = ReadMangaConfig.mangaClickActionMR
+        set(value) { ReadMangaConfig.mangaClickActionMR = value }
+    var mangaClickActionBL
+        get() = ReadMangaConfig.mangaClickActionBL
+        set(value) { ReadMangaConfig.mangaClickActionBL = value }
+    var mangaClickActionBC
+        get() = ReadMangaConfig.mangaClickActionBC
+        set(value) { ReadMangaConfig.mangaClickActionBC = value }
+    var mangaClickActionBR
+        get() = ReadMangaConfig.mangaClickActionBR
+        set(value) { ReadMangaConfig.mangaClickActionBR = value }
 
     val AppTheme get() = ThemeConfig.appTheme
 
@@ -160,33 +178,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
             PreferKey.clickActionBR -> clickActionBR =
                 appCtx.getPrefInt(PreferKey.clickActionBR, 1)
 
-            PreferKey.mangaClickActionTL -> mangaClickActionTL =
-                appCtx.getPrefInt(PreferKey.mangaClickActionTL, -1)
-
-            PreferKey.mangaClickActionTC -> mangaClickActionTC =
-                appCtx.getPrefInt(PreferKey.mangaClickActionTC, -1)
-
-            PreferKey.mangaClickActionTR -> mangaClickActionTR =
-                appCtx.getPrefInt(PreferKey.mangaClickActionTR, 1)
-
-            PreferKey.mangaClickActionML -> mangaClickActionML =
-                appCtx.getPrefInt(PreferKey.mangaClickActionML, 2)
-
-            PreferKey.mangaClickActionMC -> mangaClickActionMC =
-                appCtx.getPrefInt(PreferKey.mangaClickActionMC, 0)
-
-            PreferKey.mangaClickActionMR -> mangaClickActionMR =
-                appCtx.getPrefInt(PreferKey.mangaClickActionMR, 1)
-
-            PreferKey.mangaClickActionBL -> mangaClickActionBL =
-                appCtx.getPrefInt(PreferKey.mangaClickActionBL, 2)
-
-            PreferKey.mangaClickActionBC -> mangaClickActionBC =
-                appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
-
-            PreferKey.mangaClickActionBR -> mangaClickActionBR =
-                appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
-
             PreferKey.readBodyToLh -> ReadBookConfig.readBodyToLh =
                 appCtx.getPrefBoolean(PreferKey.readBodyToLh, true)
 
@@ -745,13 +736,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
     }
 
     fun detectMangaClickArea() {
-        if (mangaClickActionTL * mangaClickActionTC * mangaClickActionTR
-            * mangaClickActionML * mangaClickActionMC * mangaClickActionMR
-            * mangaClickActionBL * mangaClickActionBC * mangaClickActionBR != 0
-        ) {
-            appCtx.putPrefInt(PreferKey.mangaClickActionMC, 0)
-            appCtx.toastOnUi("当前没有配置菜单区域,自动恢复中间区域为菜单.")
-        }
+        ReadMangaConfig.detectMangaClickArea()
     }
 
     var firebaseEnable: Boolean
@@ -762,26 +747,20 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
 
     //跳转到漫画界面不使用富文本模式
     val showMangaUi: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.showMangaUi, true)
+        get() = ReadMangaConfig.showMangaUi
 
     //禁用漫画缩放
     var disableMangaScale: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.disableMangaScale, true)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.disableMangaScale, value)
-        }
+        get() = ReadMangaConfig.disableMangaScale
+        set(value) { ReadMangaConfig.disableMangaScale = value }
 
     var disableMangaScrollAnimation: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.disableMangaScrollAnimation, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.disableMangaScrollAnimation, value)
-        }
+        get() = ReadMangaConfig.disableMangaScrollAnimation
+        set(value) { ReadMangaConfig.disableMangaScrollAnimation = value }
 
     var disableMangaCrossFade: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.disableMangaCrossFade, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.disableMangaCrossFade, value)
-        }
+        get() = ReadMangaConfig.disableMangaCrossFade
+        set(value) { ReadMangaConfig.disableMangaCrossFade = value }
 
     var titleBarMode
         get() = ReadConfig.titleBarMode
@@ -791,105 +770,75 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
 
     //漫画预加载数量
     var mangaPreDownloadNum
-        get() = appCtx.getPrefInt(PreferKey.mangaPreDownloadNum, 10)
-        set(value) {
-            appCtx.putPrefInt(PreferKey.mangaPreDownloadNum, value)
-        }
+        get() = ReadMangaConfig.mangaPreDownloadNum
+        set(value) { ReadMangaConfig.mangaPreDownloadNum = value }
 
     //点击翻页
     var disableClickScroll
-        get() = appCtx.getPrefBoolean(PreferKey.disableClickScroll, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.disableClickScroll, value)
-        }
+        get() = ReadMangaConfig.disableClickScroll
+        set(value) { ReadMangaConfig.disableClickScroll = value }
 
     //漫画滚动速度
     var mangaAutoPageSpeed
-        get() = appCtx.getPrefInt(PreferKey.mangaAutoPageSpeed, 3)
-        set(value) {
-            appCtx.putPrefInt(PreferKey.mangaAutoPageSpeed, value)
-        }
+        get() = ReadMangaConfig.mangaAutoPageSpeed
+        set(value) { ReadMangaConfig.mangaAutoPageSpeed = value }
 
     //漫画页脚配置
     var mangaFooterConfig
-        get() = appCtx.getPrefString(PreferKey.mangaFooterConfig, "")
-        set(value) {
-            appCtx.putPrefString(PreferKey.mangaFooterConfig, value)
-        }
+        get() = ReadMangaConfig.mangaFooterConfig
+        set(value) { ReadMangaConfig.mangaFooterConfig = value }
 
     //漫画滚动方式
     var mangaScrollMode: Int
-        get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.WEBTOON)
-        set(value) {
-            appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
-        }
+        get() = ReadMangaConfig.mangaScrollMode
+        set(value) { ReadMangaConfig.mangaScrollMode = value }
 
     var mangaLongClick
-        get() = appCtx.getPrefBoolean(PreferKey.mangaLongClick, true)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.mangaLongClick, value)
-        }
+        get() = ReadMangaConfig.mangaLongClick
+        set(value) { ReadMangaConfig.mangaLongClick = value }
 
     var mangaBackground: Int
-        get() = appCtx.getPrefInt(PreferKey.mangaBackground, 0xFF000000.toInt())
-        set(value) {
-            appCtx.putPrefInt(PreferKey.mangaBackground, value)
-        }
+        get() = ReadMangaConfig.mangaBackground
+        set(value) { ReadMangaConfig.mangaBackground = value }
 
     //漫画滤镜
     var mangaColorFilter
-        get() = appCtx.getPrefString(PreferKey.mangaColorFilter, "")
-        set(value) {
-            appCtx.putPrefString(PreferKey.mangaColorFilter, value)
-        }
+        get() = ReadMangaConfig.mangaColorFilter
+        set(value) { ReadMangaConfig.mangaColorFilter = value }
 
     //禁用漫画内标题
     var hideMangaTitle
-        get() = appCtx.getPrefBoolean(PreferKey.hideMangaTitle, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.hideMangaTitle, value)
-        }
+        get() = ReadMangaConfig.hideMangaTitle
+        set(value) { ReadMangaConfig.hideMangaTitle = value }
 
     //开启墨水屏模式
     var enableMangaEInk
-        get() = appCtx.getPrefBoolean(PreferKey.enableMangaEInk, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.enableMangaEInk, value)
-        }
+        get() = ReadMangaConfig.enableMangaEInk
+        set(value) { ReadMangaConfig.enableMangaEInk = value }
 
     //墨水屏阈值
     var mangaEInkThreshold
-        get() = appCtx.getPrefInt(PreferKey.mangaEInkThreshold, 150)
-        set(value) {
-            appCtx.putPrefInt(PreferKey.mangaEInkThreshold, value)
-        }
+        get() = ReadMangaConfig.mangaEInkThreshold
+        set(value) { ReadMangaConfig.mangaEInkThreshold = value }
 
     //漫画灰度
     var enableMangaGray
-        get() = appCtx.getPrefBoolean(PreferKey.enableMangaGray, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.enableMangaGray, value)
-        }
+        get() = ReadMangaConfig.enableMangaGray
+        set(value) { ReadMangaConfig.enableMangaGray = value }
 
     //条漫侧边距
     var webtoonSidePaddingDp: Int
-        get() = appCtx.getPrefInt(PreferKey.webtoonSidePaddingDp, 0)
-        set(value) {
-            appCtx.putPrefInt(PreferKey.webtoonSidePaddingDp, value)
-        }
+        get() = ReadMangaConfig.webtoonSidePaddingDp
+        set(value) { ReadMangaConfig.webtoonSidePaddingDp = value }
 
     //漫画音量键翻页
     var MangaVolumeKeyPage: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.mangaVolumeKeyPage, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.mangaVolumeKeyPage, value)
-        }
+        get() = ReadMangaConfig.mangaVolumeKeyPage
+        set(value) { ReadMangaConfig.mangaVolumeKeyPage = value }
 
     var reverseVolumeKeyPage: Boolean
-        get() = appCtx.getPrefBoolean(PreferKey.reverseVolumeKeyPage, false)
-        set(value) {
-            appCtx.putPrefBoolean(PreferKey.reverseVolumeKeyPage, value)
-        }
+        get() = ReadMangaConfig.reverseVolumeKeyPage
+        set(value) { ReadMangaConfig.reverseVolumeKeyPage = value }
 
     var tabletInterface
         get() = ThemeConfig.tabletInterface

+ 2 - 1
app/src/main/java/io/legado/app/model/BookCover.kt

@@ -25,6 +25,7 @@ import io.legado.app.data.entities.Book
 import io.legado.app.help.CacheManager
 import io.legado.app.help.DefaultData
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.help.glide.BlurTransformation
 import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.OkHttpModelLoader
@@ -172,7 +173,7 @@ object BookCover {
         if (transformation != null) {
             builder = builder.transform(transformation)
         }
-        builder = if (AppConfig.disableMangaCrossFade) {
+        builder = if (ReadMangaConfig.disableMangaCrossFade) {
             builder
         } else {
             builder.transition(DrawableTransitionOptions.withCrossFade())

+ 3 - 2
app/src/main/java/io/legado/app/model/ReadManga.kt

@@ -19,6 +19,7 @@ import io.legado.app.help.book.readSimulating
 import io.legado.app.help.book.simulatedTotalChapterNum
 import io.legado.app.help.book.update
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.globalExecutor
 import io.legado.app.model.webBook.WebBook
@@ -349,7 +350,7 @@ object ReadManga : CoroutineScope by MainScope() , KoinComponent{
                 0
             }
             pos += durChapterPos
-            if (!AppConfig.hideMangaTitle && it.imageCount > 0) {
+            if (!ReadMangaConfig.hideMangaTitle && it.imageCount > 0) {
                 pos++
             }
         }
@@ -696,7 +697,7 @@ object ReadManga : CoroutineScope by MainScope() , KoinComponent{
             it.imageCount = imageCount
         }
 
-        if (AppConfig.hideMangaTitle && imageCount > 0) {
+        if (ReadMangaConfig.hideMangaTitle && imageCount > 0) {
             return MangaChapter(chapter, list, imageCount)
         }
 

+ 2 - 1
app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt

@@ -18,6 +18,7 @@ import io.legado.app.help.book.isAudio
 import io.legado.app.help.book.isImage
 import io.legado.app.help.book.isLocal
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.model.SourceCallBack
 import io.legado.app.ui.book.audio.AudioPlayActivity
 import io.legado.app.ui.book.info.edit.BookInfoEditActivity
@@ -119,7 +120,7 @@ fun BookInfoRouteScreen(
                 is BookInfoEffect.OpenReader -> {
                     val cls = when {
                         effect.book.isAudio -> AudioPlayActivity::class.java
-                        !effect.book.isLocal && effect.book.isImage && AppConfig.showMangaUi -> {
+                        !effect.book.isLocal && effect.book.isImage && ReadMangaConfig.showMangaUi -> {
                             ReadMangaActivity::class.java
                         }
 

+ 34 - 33
app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt

@@ -43,6 +43,7 @@ import io.legado.app.help.book.BookHelp
 import io.legado.app.help.book.isImage
 import io.legado.app.help.book.isLocal
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.help.coroutine.Coroutine
 import io.legado.app.help.source.getSourceType
 import io.legado.app.help.storage.Backup
@@ -147,7 +148,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
     private val mScrollTimer by lazy {
         ScrollTimer(this, binding.recyclerView, lifecycleScope).apply {
-            setSpeed(AppConfig.mangaAutoPageSpeed)
+            setSpeed(ReadMangaConfig.mangaAutoPageSpeed)
         }
     }
     private var enableAutoScrollPage = false
@@ -232,7 +233,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         loadMoreView.gone()
         mMangaFooterConfig =
-            GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
+            GSON.fromJsonObject<MangaFooterConfig>(ReadMangaConfig.mangaFooterConfig).getOrNull()
                 ?: MangaFooterConfig()
 
         onBackPressedDispatcher.addCallback(this){
@@ -258,12 +259,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 
     private fun initRecyclerView() {
         val mangaColorFilter =
-            GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
+            GSON.fromJsonObject<MangaColorFilterConfig>(ReadMangaConfig.mangaColorFilter).getOrNull()
                 ?: MangaColorFilterConfig()
         mAdapter.run {
             setMangaImageColorFilter(mangaColorFilter)
-            enableMangaEInk(AppConfig.enableMangaEInk, AppConfig.mangaEInkThreshold)
-            enableGray(AppConfig.enableMangaGray)
+            enableMangaEInk(ReadMangaConfig.enableMangaEInk, ReadMangaConfig.mangaEInkThreshold)
+            enableGray(ReadMangaConfig.enableMangaGray)
         }
 
         viewModel.initData(intent) {
@@ -276,8 +277,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
             itemAnimator = null
             layoutManager = mLayoutManager
             setHasFixedSize(true)
-            setDisableMangaScale(AppConfig.disableMangaScale)
-            setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
+            setDisableMangaScale(ReadMangaConfig.disableMangaScale)
+            setRecyclerViewPreloader(ReadMangaConfig.mangaPreDownloadNum)
             setPreScrollListener { _, _, _, position ->
                 if (mAdapter.isNotEmpty()) {
                     val item = mAdapter.getItem(position)
@@ -498,7 +499,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     override fun onColorSelected(dialogId: Int, color: Int){
         if (dialogId == MANGA_B)
         {
-            viewModel.setMangaBackground(color)
+            ReadMangaConfig.mangaBackground = color
             setBackground()
         }
     }
@@ -701,9 +702,9 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
                 showNumberPickerDialog(
                     0,
                     getString(R.string.pre_download),
-                    AppConfig.mangaPreDownloadNum
+                    ReadMangaConfig.mangaPreDownloadNum
                 ) {
-                    viewModel.setMangaPreDownloadNum(it)
+                    ReadMangaConfig.mangaPreDownloadNum = it
                     item.title = getString(R.string.pre_download_m, it)
                     setRecyclerViewPreloader(it)
                 }
@@ -751,26 +752,26 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
             mangaScrollMode = mode
         }
         setScrollMode(mode)
-        updateWebtoonSidePadding(AppConfig.webtoonSidePaddingDp)
+        updateWebtoonSidePadding(ReadMangaConfig.webtoonSidePaddingDp)
         setAutoReadEnabled(false)
     }
 
     //点击滑动
     override fun onClickScrollDisabledChanged(disabled: Boolean) {
-        viewModel.setDisableClickScroll(disabled)
+        ReadMangaConfig.disableClickScroll = disabled
     }
 
     override fun onScrollAniDisabledChanged(disabled: Boolean) {
-        viewModel.setDisableMangaScrollAnimation(disabled)
+        ReadMangaConfig.disableMangaScrollAnimation = disabled
     }
 
     override fun onCrossFadeDisabledChanged(disabled: Boolean) {
-        viewModel.setDisableMangaCrossFade(disabled)
+        ReadMangaConfig.disableMangaCrossFade = disabled
     }
 
     //双击缩放
     override fun onMangaScaleDisabledChanged(disabled: Boolean) {
-        viewModel.setDisableMangaScale(disabled)
+        ReadMangaConfig.disableMangaScale = disabled
         setDisableMangaScale(disabled)
     }
 
@@ -784,13 +785,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 
     //墨水屏
     override fun updateEpaperMode(enabled: Boolean, threshold: Int) {
-        viewModel.setEInkMode(enabled, threshold)
+        ReadMangaConfig.enableMangaEInk = enabled
+        ReadMangaConfig.enableMangaGray = false
+        ReadMangaConfig.mangaEInkThreshold = threshold
         mAdapter.enableMangaEInk(enabled, threshold)
     }
 
     //灰度
     override fun updateGrayMode(enabled: Boolean) {
-        viewModel.setGrayMode(enabled)
+        ReadMangaConfig.enableMangaGray = enabled
+        ReadMangaConfig.enableMangaEInk = false
         mAdapter.enableGray(enabled)
     }
 
@@ -808,28 +812,25 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     //自动翻页速度
     override fun onAutoPageSpeedChanged(speed: Int) {
         setAutoReadEnabled(false)
-        viewModel.setMangaAutoPageSpeed(speed)
+        ReadMangaConfig.mangaAutoPageSpeed = speed
         mScrollTimer.setSpeed(speed)
         setAutoReadEnabled(enableScroll)
-//        if (enableAutoScrollPage) {
-//            mScrollTimer.isEnabledPage = true
-//        }
     }
 
     override fun onMangaLongClickChanged(checked: Boolean) {
-        viewModel.setMangaLongClick(checked)
+        ReadMangaConfig.mangaLongClick = checked
     }
 
     override fun onVolumeKeyPageChanged(enable: Boolean) {
-        viewModel.setMangaVolumeKeyPage(enable)
+        ReadMangaConfig.mangaVolumeKeyPage = enable
     }
 
     override fun onReverseVolumeKeyPageChanged(enable: Boolean) {
-        viewModel.setReverseVolumeKeyPage(enable)
+        ReadMangaConfig.reverseVolumeKeyPage = enable
     }
 
     override fun onHideMangaTitleChanged(hide: Boolean) {
-        viewModel.setHideMangaTitle(hide)
+        ReadMangaConfig.hideMangaTitle = hide
         ReadManga.loadContent()
     }
 
@@ -946,8 +947,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
 
     private fun setBackground() {
-        binding.webtoonFrame.setBackgroundColor(AppConfig.mangaBackground)
-        binding.recyclerView.setBackgroundColor(AppConfig.mangaBackground)
+        binding.webtoonFrame.setBackgroundColor(ReadMangaConfig.mangaBackground)
+        binding.recyclerView.setBackgroundColor(ReadMangaConfig.mangaBackground)
         mAdapter.notifyItemRangeChanged(0, mAdapter.itemCount)
     }
 
@@ -966,7 +967,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     private fun upMenu(menu: Menu) {
         this.mMenu = menu
         menu.findItem(R.id.menu_pre_manga_number).title =
-            getString(R.string.pre_download_m, AppConfig.mangaPreDownloadNum)
+            getString(R.string.pre_download_m, ReadMangaConfig.mangaPreDownloadNum)
     }
 
     private fun setDisableMangaScale(disable: Boolean) {
@@ -987,12 +988,12 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
 
     private fun scrollToNext() {
-        if (!AppConfig.disableClickScroll)
+        if (!ReadMangaConfig.disableClickScroll)
             scrollPageTo(1)
     }
 
     private fun scrollToPrev() {
-        if (!AppConfig.disableClickScroll)
+        if (!ReadMangaConfig.disableClickScroll)
             scrollPageTo(-1)
     }
 
@@ -1018,7 +1019,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         dx *= direction
         dy *= direction
-        if (!AppConfig.disableMangaScrollAnimation)
+        if (!ReadMangaConfig.disableMangaScrollAnimation)
             binding.recyclerView.smoothScrollBy(dx, dy)
         else
             binding.recyclerView.scrollBy(dx, dy)
@@ -1082,11 +1083,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
 
     override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
-        if (!AppConfig.MangaVolumeKeyPage) {
+        if (!ReadMangaConfig.mangaVolumeKeyPage) {
             return super.onKeyDown(keyCode, event)
         }
 
-        val isReverse = AppConfig.reverseVolumeKeyPage
+        val isReverse = ReadMangaConfig.reverseVolumeKeyPage
 
         when (keyCode) {
             KeyEvent.KEYCODE_VOLUME_UP -> {

+ 4 - 90
app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt

@@ -15,7 +15,6 @@ import io.legado.app.data.entities.Book
 import io.legado.app.data.entities.Book.ReadConfig
 import io.legado.app.data.entities.BookChapter
 import io.legado.app.data.entities.BookProgress
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.domain.model.ReadingProgress
 import io.legado.app.domain.usecase.GetReadingProgressUseCase
 import io.legado.app.exception.NoStackTraceException
@@ -31,6 +30,7 @@ import io.legado.app.model.ReadManga
 import io.legado.app.model.localBook.LocalBook
 import io.legado.app.model.webBook.WebBook
 import io.legado.app.ui.config.otherConfig.OtherConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.utils.ImageSaveUtils
 import io.legado.app.utils.mapParallelSafe
 import io.legado.app.utils.postEvent
@@ -51,8 +51,7 @@ import java.io.ByteArrayOutputStream
 
 class ReadMangaViewModel(
     application: Application,
-    private val getReadingProgressUseCase: GetReadingProgressUseCase,
-    private val mangaSettingsRepository: MangaSettingsRepository
+    private val getReadingProgressUseCase: GetReadingProgressUseCase
 ) : BaseViewModel(application) {
 
     private var changeSourceCoroutine: Coroutine<*>? = null
@@ -326,11 +325,11 @@ class ReadMangaViewModel(
 
 
     fun getEffectiveScrollMode(): Int {
-        return ReadManga.book?.readConfig?.mangaScrollMode ?: AppConfig.mangaScrollMode
+        return ReadManga.book?.readConfig?.mangaScrollMode ?: ReadMangaConfig.mangaScrollMode
     }
 
     fun getEffectiveWebtoonSidePadding(): Int {
-        return ReadManga.book?.readConfig?.webtoonSidePaddingDp ?: AppConfig.webtoonSidePaddingDp
+        return ReadManga.book?.readConfig?.webtoonSidePaddingDp ?: ReadMangaConfig.webtoonSidePaddingDp
     }
 
     fun saveImageToGallery(url: String, folderName: String = "Legado") {
@@ -380,91 +379,6 @@ class ReadMangaViewModel(
         }
     }
 
-    fun setMangaPreDownloadNum(value: Int) {
-        AppConfig.mangaPreDownloadNum = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaPreDownloadNum(value) }
-    }
-
-    fun setMangaBackground(value: Int) {
-        AppConfig.mangaBackground = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaBackground(value) }
-    }
-
-    fun setDisableClickScroll(value: Boolean) {
-        AppConfig.disableClickScroll = value
-        viewModelScope.launch { mangaSettingsRepository.setDisableClickScroll(value) }
-    }
-
-    fun setDisableMangaScrollAnimation(value: Boolean) {
-        AppConfig.disableMangaScrollAnimation = value
-        viewModelScope.launch { mangaSettingsRepository.setDisableMangaScrollAnimation(value) }
-    }
-
-    fun setDisableMangaCrossFade(value: Boolean) {
-        AppConfig.disableMangaCrossFade = value
-        viewModelScope.launch { mangaSettingsRepository.setDisableMangaCrossFade(value) }
-    }
-
-    fun setDisableMangaScale(value: Boolean) {
-        AppConfig.disableMangaScale = value
-        viewModelScope.launch { mangaSettingsRepository.setDisableMangaScale(value) }
-    }
-
-    fun setEInkMode(enabled: Boolean, threshold: Int) {
-        AppConfig.enableMangaEInk = enabled
-        AppConfig.enableMangaGray = false
-        AppConfig.mangaEInkThreshold = threshold
-        viewModelScope.launch {
-            mangaSettingsRepository.setEnableMangaEInk(enabled)
-            mangaSettingsRepository.setEnableMangaGray(false)
-            mangaSettingsRepository.setMangaEInkThreshold(threshold)
-        }
-    }
-
-    fun setGrayMode(enabled: Boolean) {
-        AppConfig.enableMangaGray = enabled
-        AppConfig.enableMangaEInk = false
-        viewModelScope.launch {
-            mangaSettingsRepository.setEnableMangaGray(enabled)
-            mangaSettingsRepository.setEnableMangaEInk(false)
-        }
-    }
-
-    fun setMangaAutoPageSpeed(value: Int) {
-        AppConfig.mangaAutoPageSpeed = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaAutoPageSpeed(value) }
-    }
-
-    fun setMangaLongClick(value: Boolean) {
-        AppConfig.mangaLongClick = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaLongClick(value) }
-    }
-
-    fun setMangaVolumeKeyPage(value: Boolean) {
-        AppConfig.MangaVolumeKeyPage = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaVolumeKeyPage(value) }
-    }
-
-    fun setReverseVolumeKeyPage(value: Boolean) {
-        AppConfig.reverseVolumeKeyPage = value
-        viewModelScope.launch { mangaSettingsRepository.setReverseVolumeKeyPage(value) }
-    }
-
-    fun setHideMangaTitle(value: Boolean) {
-        AppConfig.hideMangaTitle = value
-        viewModelScope.launch { mangaSettingsRepository.setHideMangaTitle(value) }
-    }
-
-    fun setMangaColorFilter(value: String) {
-        AppConfig.mangaColorFilter = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaAutoColorFilter(value) }
-    }
-
-    fun setMangaFooterConfig(value: String) {
-        AppConfig.mangaFooterConfig = value
-        viewModelScope.launch { mangaSettingsRepository.setMangaFooterConfig(value) }
-    }
-
     override fun onCleared() {
         super.onCleared()
         changeSourceCoroutine?.cancel()

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/manga/config/MangaAutoReadDialog.kt

@@ -5,7 +5,7 @@ import android.view.View
 import io.legado.app.R
 import io.legado.app.base.BaseBottomSheetDialogFragment
 import io.legado.app.databinding.DialogMangaAutoReadBinding
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
 class MangaAutoReadDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_auto_read) {
@@ -37,7 +37,7 @@ class MangaAutoReadDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_
         binding.scvAutoPageSpeed.run {
             isEnabled = boolean
             valueFormat = { "$it 秒" }
-            progress = AppConfig.mangaAutoPageSpeed
+            progress = ReadMangaConfig.mangaAutoPageSpeed
 
             onChanged = { newValue ->
                 callback?.onAutoPageSpeedChanged(newValue)

+ 25 - 34
app/src/main/java/io/legado/app/ui/book/manga/config/MangaClickActionConfigDialog.kt

@@ -8,17 +8,14 @@ import android.widget.TextView
 import io.legado.app.R
 import io.legado.app.base.BaseOverlayDialogFragment
 import io.legado.app.constant.PreferKey
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.databinding.DialogClickActionConfigBinding
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.lib.dialogs.selector
 import io.legado.app.utils.getCompatColor
 import io.legado.app.utils.viewbindingdelegate.viewBinding
-import org.koin.android.ext.android.inject
 
 class MangaClickActionConfigDialog : BaseOverlayDialogFragment(R.layout.dialog_click_action_config) {
     private val binding by viewBinding(DialogClickActionConfigBinding::bind)
-    private val mangaSettingsRepository by inject<MangaSettingsRepository>()
 
     private val actions by lazy {
         linkedMapOf(
@@ -50,15 +47,15 @@ class MangaClickActionConfigDialog : BaseOverlayDialogFragment(R.layout.dialog_c
     }
 
     private fun initData() = binding.run {
-        tvTopLeft.text = actions[AppConfig.mangaClickActionTL]
-        tvTopCenter.text = actions[AppConfig.mangaClickActionTC]
-        tvTopRight.text = actions[AppConfig.mangaClickActionTR]
-        tvMiddleLeft.text = actions[AppConfig.mangaClickActionML]
-        tvMiddleCenter.text = actions[AppConfig.mangaClickActionMC]
-        tvMiddleRight.text = actions[AppConfig.mangaClickActionMR]
-        tvBottomLeft.text = actions[AppConfig.mangaClickActionBL]
-        tvBottomCenter.text = actions[AppConfig.mangaClickActionBC]
-        tvBottomRight.text = actions[AppConfig.mangaClickActionBR]
+        tvTopLeft.text = actions[ReadMangaConfig.mangaClickActionTL]
+        tvTopCenter.text = actions[ReadMangaConfig.mangaClickActionTC]
+        tvTopRight.text = actions[ReadMangaConfig.mangaClickActionTR]
+        tvMiddleLeft.text = actions[ReadMangaConfig.mangaClickActionML]
+        tvMiddleCenter.text = actions[ReadMangaConfig.mangaClickActionMC]
+        tvMiddleRight.text = actions[ReadMangaConfig.mangaClickActionMR]
+        tvBottomLeft.text = actions[ReadMangaConfig.mangaClickActionBL]
+        tvBottomCenter.text = actions[ReadMangaConfig.mangaClickActionBC]
+        tvBottomRight.text = actions[ReadMangaConfig.mangaClickActionBR]
     }
 
     private fun initViewEvent() {
@@ -132,18 +129,15 @@ class MangaClickActionConfigDialog : BaseOverlayDialogFragment(R.layout.dialog_c
 
     private fun setClickAction(key: String, action: Int) {
         when (key) {
-            PreferKey.mangaClickActionTL -> AppConfig.mangaClickActionTL = action
-            PreferKey.mangaClickActionTC -> AppConfig.mangaClickActionTC = action
-            PreferKey.mangaClickActionTR -> AppConfig.mangaClickActionTR = action
-            PreferKey.mangaClickActionML -> AppConfig.mangaClickActionML = action
-            PreferKey.mangaClickActionMC -> AppConfig.mangaClickActionMC = action
-            PreferKey.mangaClickActionMR -> AppConfig.mangaClickActionMR = action
-            PreferKey.mangaClickActionBL -> AppConfig.mangaClickActionBL = action
-            PreferKey.mangaClickActionBC -> AppConfig.mangaClickActionBC = action
-            PreferKey.mangaClickActionBR -> AppConfig.mangaClickActionBR = action
-        }
-        execute {
-            mangaSettingsRepository.setMangaClickAction(key, action)
+            PreferKey.mangaClickActionTL -> ReadMangaConfig.mangaClickActionTL = action
+            PreferKey.mangaClickActionTC -> ReadMangaConfig.mangaClickActionTC = action
+            PreferKey.mangaClickActionTR -> ReadMangaConfig.mangaClickActionTR = action
+            PreferKey.mangaClickActionML -> ReadMangaConfig.mangaClickActionML = action
+            PreferKey.mangaClickActionMC -> ReadMangaConfig.mangaClickActionMC = action
+            PreferKey.mangaClickActionMR -> ReadMangaConfig.mangaClickActionMR = action
+            PreferKey.mangaClickActionBL -> ReadMangaConfig.mangaClickActionBL = action
+            PreferKey.mangaClickActionBC -> ReadMangaConfig.mangaClickActionBC = action
+            PreferKey.mangaClickActionBR -> ReadMangaConfig.mangaClickActionBR = action
         }
     }
 
@@ -158,19 +152,16 @@ class MangaClickActionConfigDialog : BaseOverlayDialogFragment(R.layout.dialog_c
 
     override fun onDestroy() {
         if (!hasMenuClickArea()) {
-            AppConfig.detectMangaClickArea()
-            execute {
-                mangaSettingsRepository.setMangaClickAction(PreferKey.mangaClickActionMC, 0)
-            }
+            ReadMangaConfig.detectMangaClickArea()
         }
         super.onDestroy()
     }
 
     private fun hasMenuClickArea(): Boolean {
-        return AppConfig.mangaClickActionTL * AppConfig.mangaClickActionTC *
-                AppConfig.mangaClickActionTR * AppConfig.mangaClickActionML *
-                AppConfig.mangaClickActionMC * AppConfig.mangaClickActionMR *
-                AppConfig.mangaClickActionBL * AppConfig.mangaClickActionBC *
-                AppConfig.mangaClickActionBR == 0
+        return ReadMangaConfig.mangaClickActionTL * ReadMangaConfig.mangaClickActionTC *
+                ReadMangaConfig.mangaClickActionTR * ReadMangaConfig.mangaClickActionML *
+                ReadMangaConfig.mangaClickActionMC * ReadMangaConfig.mangaClickActionMR *
+                ReadMangaConfig.mangaClickActionBL * ReadMangaConfig.mangaClickActionBC *
+                ReadMangaConfig.mangaClickActionBR == 0
     }
 }

+ 8 - 16
app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt

@@ -7,25 +7,22 @@ import android.view.WindowManager
 import androidx.core.view.isVisible
 import io.legado.app.R
 import io.legado.app.base.BaseBottomSheetDialogFragment
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.databinding.DialogMangaColorFilterBinding
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.utils.GSON
 import io.legado.app.utils.fromJsonObject
 import io.legado.app.utils.invisible
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import io.legado.app.utils.visible
-import org.koin.android.ext.android.inject
 
 class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_color_filter) {
     private val binding by viewBinding(DialogMangaColorFilterBinding::bind)
-    private val mangaSettingsRepository by inject<MangaSettingsRepository>()
     private val mConfig =
-        GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
+        GSON.fromJsonObject<MangaColorFilterConfig>(ReadMangaConfig.mangaColorFilter).getOrNull()
             ?: MangaColorFilterConfig()
     private val callback: Callback? get() = activity as? Callback
 
-    private var mMangaEInkThreshold = AppConfig.mangaEInkThreshold
+    private var mMangaEInkThreshold = ReadMangaConfig.mangaEInkThreshold
 
 
     override fun onStart() {
@@ -42,13 +39,13 @@ class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_man
         binding.run {
             chipAutoBrightness.isChecked = mConfig.autoBrightness
 
-            if (AppConfig.enableMangaEInk) dsbEpaper.visible()
+            if (ReadMangaConfig.enableMangaEInk) dsbEpaper.visible()
             else dsbEpaper.invisible()
 
             dsbEpaper.progress = mMangaEInkThreshold
 
-            cpEpaper.isChecked = AppConfig.enableMangaEInk
-            cpEnableGray.isChecked = AppConfig.enableMangaGray
+            cpEpaper.isChecked = ReadMangaConfig.enableMangaEInk
+            cpEnableGray.isChecked = ReadMangaConfig.enableMangaGray
 
             dsbBrightness.isEnabled = !mConfig.autoBrightness
             dsbBrightness.progress = mConfig.l
@@ -117,13 +114,8 @@ class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_man
 
     override fun onDismiss(dialog: DialogInterface) {
         super.onDismiss(dialog)
-        val colorFilter = mConfig.toJson()
-        AppConfig.mangaColorFilter = colorFilter
-        AppConfig.mangaEInkThreshold = mMangaEInkThreshold
-        execute {
-            mangaSettingsRepository.setMangaAutoColorFilter(colorFilter)
-            mangaSettingsRepository.setMangaEInkThreshold(mMangaEInkThreshold)
-        }
+        ReadMangaConfig.mangaColorFilter = mConfig.toJson()
+        ReadMangaConfig.mangaEInkThreshold = mMangaEInkThreshold
     }
 
     interface Callback {

+ 14 - 21
app/src/main/java/io/legado/app/ui/book/manga/config/MangaFooterSettingDialog.kt

@@ -11,9 +11,8 @@ import com.jaredrummler.android.colorpicker.ColorPickerDialog
 import io.legado.app.R
 import io.legado.app.base.BaseBottomSheetDialogFragment
 import io.legado.app.constant.EventBus
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.databinding.DialogMangaFooterSettingBinding
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.ui.book.manga.entities.MangaFooterConfig
 import io.legado.app.ui.widget.ReaderInfoBarView
 import io.legado.app.utils.GSON
@@ -21,7 +20,6 @@ import io.legado.app.utils.fromJsonObject
 import io.legado.app.utils.postEvent
 import io.legado.app.utils.toastOnUi
 import io.legado.app.utils.viewbindingdelegate.viewBinding
-import org.koin.android.ext.android.inject
 
 class MangaFooterSettingDialog :
     BaseBottomSheetDialogFragment(R.layout.dialog_manga_footer_setting) {
@@ -30,7 +28,7 @@ class MangaFooterSettingDialog :
         const val MANGA_B = 1919
     }
 
-    val config = GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
+    val config = GSON.fromJsonObject<MangaFooterConfig>(ReadMangaConfig.mangaFooterConfig).getOrNull()
         ?: MangaFooterConfig()
 
     var initialWebtoonSidePadding: Int = 0
@@ -39,7 +37,6 @@ class MangaFooterSettingDialog :
     var callback: Callback? = null
 
     private val binding by viewBinding(DialogMangaFooterSettingBinding::bind)
-    private val mangaSettingsRepository by inject<MangaSettingsRepository>()
 
     override fun onStart() {
         super.onStart()
@@ -63,18 +60,18 @@ class MangaFooterSettingDialog :
                             mode == MangaScrollMode.WEBTOON_WITH_GAP
                 }
                 setOnLongClickListener {
-                    AppConfig.mangaScrollMode = mode
+                    ReadMangaConfig.mangaScrollMode = mode
                     toastOnUi("已设置为全局默认模式")
                     true
                 }
             })
         }
 
-        binding.btnBackgroundColor.color = AppConfig.mangaBackground
+        binding.btnBackgroundColor.color = ReadMangaConfig.mangaBackground
         binding.btnBackgroundColor.setOnClickListener {
             dismiss()
             ColorPickerDialog.newBuilder()
-                .setColor(AppConfig.mangaBackground)
+                .setColor(ReadMangaConfig.mangaBackground)
                 .setShowAlphaSlider(false)
                 .setDialogType(ColorPickerDialog.TYPE_CUSTOM)
                 .setDialogId(MANGA_B)
@@ -93,56 +90,56 @@ class MangaFooterSettingDialog :
         }
 
         binding.checkboxDisableClickScroll.apply {
-            isChecked = AppConfig.disableClickScroll
+            isChecked = ReadMangaConfig.disableClickScroll
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onClickScrollDisabledChanged(isChecked)
             }
         }
 
         binding.checkboxScrollAnimation.apply {
-            isChecked = AppConfig.disableMangaScrollAnimation
+            isChecked = ReadMangaConfig.disableMangaScrollAnimation
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onScrollAniDisabledChanged(isChecked)
             }
         }
 
         binding.checkboxMangaCrossFade.apply {
-            isChecked = AppConfig.disableMangaCrossFade
+            isChecked = ReadMangaConfig.disableMangaCrossFade
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onCrossFadeDisabledChanged(isChecked)
             }
         }
 
         binding.checkboxDisableMangaScale.apply {
-            isChecked = AppConfig.disableMangaScale
+            isChecked = ReadMangaConfig.disableMangaScale
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onMangaScaleDisabledChanged(isChecked)
             }
         }
 
         binding.checkboxHideMangaTitle.apply {
-            isChecked = AppConfig.hideMangaTitle
+            isChecked = ReadMangaConfig.hideMangaTitle
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onHideMangaTitleChanged(isChecked)
             }
         }
 
         binding.checkboxVolumeKeyPage.apply {
-            isChecked = AppConfig.MangaVolumeKeyPage
+            isChecked = ReadMangaConfig.mangaVolumeKeyPage
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onVolumeKeyPageChanged(isChecked)
             }
         }
 
         binding.reverseVolumeKeyPage.apply {
-            isChecked = AppConfig.reverseVolumeKeyPage
+            isChecked = ReadMangaConfig.reverseVolumeKeyPage
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onReverseVolumeKeyPageChanged(isChecked)
             }
         }
 
         binding.checkboxMangaLongClick.apply {
-            isChecked = AppConfig.mangaLongClick
+            isChecked = ReadMangaConfig.mangaLongClick
             setOnCheckedChangeListener { _, isChecked ->
                 callback?.onMangaLongClickChanged(isChecked)
             }
@@ -258,11 +255,7 @@ class MangaFooterSettingDialog :
 
     override fun onDismiss(dialog: DialogInterface) {
         super.onDismiss(dialog)
-        val footerConfig = GSON.toJson(config)
-        AppConfig.mangaFooterConfig = footerConfig
-        execute {
-            mangaSettingsRepository.setMangaFooterConfig(footerConfig)
-        }
+        ReadMangaConfig.mangaFooterConfig = GSON.toJson(config)
     }
 
     private fun updateChapterText() {

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt

@@ -22,7 +22,7 @@ import io.legado.app.base.adapter.ItemViewHolder
 import io.legado.app.base.adapter.RecyclerAdapter.Companion.TYPE_FOOTER_VIEW
 import io.legado.app.databinding.ItemBookMangaEdgeBinding
 import io.legado.app.databinding.ItemBookMangaPageBinding
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.help.glide.progress.ProgressManager
 import io.legado.app.model.BookCover
 import io.legado.app.model.ReadManga
@@ -135,8 +135,8 @@ class MangaAdapter(private val context: Context) :
         }
 
         fun setBackground() {
-            binding.rootView.setBackgroundColor(AppConfig.mangaBackground)
-            binding.flProgress.setBackgroundColor(AppConfig.mangaBackground)
+            binding.rootView.setBackgroundColor(ReadMangaConfig.mangaBackground)
+            binding.flProgress.setBackgroundColor(ReadMangaConfig.mangaBackground)
         }
     }
 

+ 11 - 11
app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonFrame.kt

@@ -9,7 +9,7 @@ import android.view.MotionEvent
 import android.view.ScaleGestureDetector
 import android.widget.FrameLayout
 import androidx.recyclerview.widget.RecyclerView
-import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.utils.findCenterViewPosition
 
 class WebtoonFrame : FrameLayout {
@@ -46,7 +46,7 @@ class WebtoonFrame : FrameLayout {
     private val gestureDetector =
         GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
             override fun onLongPress(e: MotionEvent) {
-                if (AppConfig.mangaLongClick)
+                if (ReadMangaConfig.mangaLongClick)
                 {
                     recycler?.let {
                         val centerPos = it.findCenterViewPosition()
@@ -69,15 +69,15 @@ class WebtoonFrame : FrameLayout {
                 regionRects.entries.find { it.value.contains(x, y) }?.key ?: return@tapListener
 
             val action = when (key) {
-                "TL" -> AppConfig.mangaClickActionTL
-                "TC" -> AppConfig.mangaClickActionTC
-                "TR" -> AppConfig.mangaClickActionTR
-                "ML" -> AppConfig.mangaClickActionML
-                "MC" -> AppConfig.mangaClickActionMC
-                "MR" -> AppConfig.mangaClickActionMR
-                "BL" -> AppConfig.mangaClickActionBL
-                "BC" -> AppConfig.mangaClickActionBC
-                "BR" -> AppConfig.mangaClickActionBR
+                "TL" -> ReadMangaConfig.mangaClickActionTL
+                "TC" -> ReadMangaConfig.mangaClickActionTC
+                "TR" -> ReadMangaConfig.mangaClickActionTR
+                "ML" -> ReadMangaConfig.mangaClickActionML
+                "MC" -> ReadMangaConfig.mangaClickActionMC
+                "MR" -> ReadMangaConfig.mangaClickActionMR
+                "BL" -> ReadMangaConfig.mangaClickActionBL
+                "BC" -> ReadMangaConfig.mangaClickActionBC
+                "BR" -> ReadMangaConfig.mangaClickActionBR
                 else -> -1
             }
 

+ 3 - 3
app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigScreen.kt

@@ -23,6 +23,7 @@ import androidx.compose.ui.unit.dp
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import io.legado.app.R
 import io.legado.app.service.WebService
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.ui.theme.LegadoTheme
 import io.legado.app.ui.theme.adaptiveContentPadding
 import io.legado.app.ui.widget.components.AppScaffold
@@ -49,7 +50,6 @@ fun OtherConfigScreen(
 ) {
     val context = LocalContext.current
     val readAloudPreferences by viewModel.readAloudPreferences.collectAsStateWithLifecycle()
-    val mangaPreferences by viewModel.mangaPreferences.collectAsStateWithLifecycle()
 
     val notificationPermissionLauncher = rememberLauncherForActivityResult(
         ActivityResultContracts.RequestPermission()
@@ -237,8 +237,8 @@ fun OtherConfigScreen(
 
                 SwitchSettingItem(
                     title = stringResource(R.string.show_manga_ui),
-                    checked = mangaPreferences.showMangaUi,
-                    onCheckedChange = { viewModel.setShowMangaUi(it) }
+                    checked = ReadMangaConfig.showMangaUi,
+                    onCheckedChange = { ReadMangaConfig.showMangaUi = it }
                 )
             }
 

+ 1 - 16
app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigViewModel.kt

@@ -9,8 +9,6 @@ import androidx.compose.runtime.setValue
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import io.legado.app.constant.PreferKey
-import io.legado.app.data.repository.MangaPreferences
-import io.legado.app.data.repository.MangaSettingsRepository
 import io.legado.app.data.repository.ReadAloudPreferences
 import io.legado.app.data.repository.ReadAloudSettingsRepository
 import io.legado.app.help.DirectLinkUpload
@@ -30,8 +28,7 @@ import kotlinx.coroutines.launch
 import splitties.init.appCtx
 
 class OtherConfigViewModel(
-    private val readAloudSettingsRepository: ReadAloudSettingsRepository,
-    private val mangaSettingsRepository: MangaSettingsRepository
+    private val readAloudSettingsRepository: ReadAloudSettingsRepository
 ) : ViewModel() {
 
     private val packageManager = appCtx.packageManager
@@ -52,12 +49,6 @@ class OtherConfigViewModel(
         initialValue = ReadAloudPreferences()
     )
 
-    val mangaPreferences = mangaSettingsRepository.preferences.stateIn(
-        scope = viewModelScope,
-        started = SharingStarted.WhileSubscribed(5_000),
-        initialValue = MangaPreferences()
-    )
-
     fun setMediaButtonOnExit(value: Boolean) {
         viewModelScope.launch {
             readAloudSettingsRepository.setMediaButtonOnExit(value)
@@ -76,12 +67,6 @@ class OtherConfigViewModel(
         }
     }
 
-    fun setShowMangaUi(value: Boolean) {
-        viewModelScope.launch {
-            mangaSettingsRepository.setShowMangaUi(value)
-        }
-    }
-
     fun isProcessTextEnabled(): Boolean {
         return packageManager.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED
     }

+ 126 - 0
app/src/main/java/io/legado/app/ui/config/readMangaConfig/ReadMangaConfig.kt

@@ -0,0 +1,126 @@
+package io.legado.app.ui.config.readMangaConfig
+
+import io.legado.app.constant.PreferKey
+import io.legado.app.ui.book.manga.config.MangaScrollMode
+import io.legado.app.ui.config.prefDelegate
+import io.legado.app.utils.toastOnUi
+import splitties.init.appCtx
+
+object ReadMangaConfig {
+
+    var showMangaUi by prefDelegate(
+        PreferKey.showMangaUi,
+        true
+    )
+
+    var disableMangaScale by prefDelegate(
+        PreferKey.disableMangaScale,
+        true
+    )
+
+    var disableMangaScrollAnimation by prefDelegate(
+        PreferKey.disableMangaScrollAnimation,
+        false
+    )
+
+    var disableMangaCrossFade by prefDelegate(
+        PreferKey.disableMangaCrossFade,
+        false
+    )
+
+    var mangaScrollMode by prefDelegate(
+        PreferKey.mangaScrollMode,
+        MangaScrollMode.WEBTOON
+    )
+
+    var mangaPreDownloadNum by prefDelegate(
+        PreferKey.mangaPreDownloadNum,
+        10
+    )
+
+    var mangaAutoPageSpeed by prefDelegate(
+        PreferKey.mangaAutoPageSpeed,
+        3
+    )
+
+    var mangaFooterConfig by prefDelegate(
+        PreferKey.mangaFooterConfig,
+        ""
+    )
+
+    var disableClickScroll by prefDelegate(
+        PreferKey.disableClickScroll,
+        false
+    )
+
+    var mangaLongClick by prefDelegate(
+        PreferKey.mangaLongClick,
+        true
+    )
+
+    var mangaBackground by prefDelegate(
+        PreferKey.mangaBackground,
+        0xFF000000.toInt()
+    )
+
+    var mangaColorFilter by prefDelegate(
+        PreferKey.mangaColorFilter,
+        ""
+    )
+
+    var hideMangaTitle by prefDelegate(
+        PreferKey.hideMangaTitle,
+        false
+    )
+
+    var enableMangaEInk by prefDelegate(
+        PreferKey.enableMangaEInk,
+        false
+    )
+
+    var mangaEInkThreshold by prefDelegate(
+        PreferKey.mangaEInkThreshold,
+        150
+    )
+
+    var enableMangaGray by prefDelegate(
+        PreferKey.enableMangaGray,
+        false
+    )
+
+    var webtoonSidePaddingDp by prefDelegate(
+        PreferKey.webtoonSidePaddingDp,
+        0
+    )
+
+    var mangaVolumeKeyPage by prefDelegate(
+        PreferKey.mangaVolumeKeyPage,
+        false
+    )
+
+    var reverseVolumeKeyPage by prefDelegate(
+        PreferKey.reverseVolumeKeyPage,
+        false
+    )
+
+    // -1无操作 1下一页 2上一页 0显示菜单 3下一章 4上一章
+    var mangaClickActionTL by prefDelegate(PreferKey.mangaClickActionTL, -1)
+    var mangaClickActionTC by prefDelegate(PreferKey.mangaClickActionTC, -1)
+    var mangaClickActionTR by prefDelegate(PreferKey.mangaClickActionTR, 1)
+    var mangaClickActionML by prefDelegate(PreferKey.mangaClickActionML, 2)
+    var mangaClickActionMC by prefDelegate(PreferKey.mangaClickActionMC, 0)
+    var mangaClickActionMR by prefDelegate(PreferKey.mangaClickActionMR, 1)
+    var mangaClickActionBL by prefDelegate(PreferKey.mangaClickActionBL, 2)
+    var mangaClickActionBC by prefDelegate(PreferKey.mangaClickActionBC, 1)
+    var mangaClickActionBR by prefDelegate(PreferKey.mangaClickActionBR, 1)
+
+    fun detectMangaClickArea() {
+        if (mangaClickActionTL * mangaClickActionTC * mangaClickActionTR
+            * mangaClickActionML * mangaClickActionMC * mangaClickActionMR
+            * mangaClickActionBL * mangaClickActionBC * mangaClickActionBR != 0
+        ) {
+            mangaClickActionMC = 0
+            appCtx.toastOnUi("当前没有配置菜单区域,自动恢复中间区域为菜单.")
+        }
+    }
+}

+ 5 - 4
app/src/main/java/io/legado/app/utils/ContextExtensions.kt

@@ -46,6 +46,7 @@ import io.legado.app.help.book.isAudio
 import io.legado.app.help.book.isImage
 import io.legado.app.help.book.isLocal
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.ui.book.audio.AudioPlayActivity
 import io.legado.app.ui.book.manga.ReadMangaActivity
 import io.legado.app.ui.main.MainActivity
@@ -70,13 +71,13 @@ fun Context.startActivityForBook(
 ) {
     val intent = when {
         book.isAudio -> Intent(this, AudioPlayActivity::class.java)
-        !book.isLocal && book.isImage && AppConfig.showMangaUi ->
+        !book.isLocal && book.isImage && ReadMangaConfig.showMangaUi ->
             Intent(this, ReadMangaActivity::class.java)
 
         else -> MainActivity.createReadBookIntent(this, book.bookUrl)
     }
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-    if (book.isAudio || (!book.isLocal && book.isImage && AppConfig.showMangaUi)) {
+    if (book.isAudio || (!book.isLocal && book.isImage && ReadMangaConfig.showMangaUi)) {
         intent.putExtra("bookUrl", book.bookUrl)
     }
     intent.apply(configIntent)
@@ -89,13 +90,13 @@ fun Context.startActivityForBook(
 ) {
     val intent = when {
         book.isAudio -> Intent(this, AudioPlayActivity::class.java)
-        !book.isLocal && book.isImage && AppConfig.showMangaUi ->
+        !book.isLocal && book.isImage && ReadMangaConfig.showMangaUi ->
             Intent(this, ReadMangaActivity::class.java)
 
         else -> MainActivity.createReadBookIntent(this, book.bookUrl)
     }
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-    if (book.isAudio || (!book.isLocal && book.isImage && AppConfig.showMangaUi)) {
+    if (book.isAudio || (!book.isLocal && book.isImage && ReadMangaConfig.showMangaUi)) {
         intent.putExtra("bookUrl", book.bookUrl)
     }
     intent.apply(configIntent)

+ 3 - 2
app/src/main/java/io/legado/app/utils/FragmentExtensions.kt

@@ -19,6 +19,7 @@ import io.legado.app.help.book.isAudio
 import io.legado.app.help.book.isImage
 import io.legado.app.help.book.isLocal
 import io.legado.app.help.config.AppConfig
+import io.legado.app.ui.config.readMangaConfig.ReadMangaConfig
 import io.legado.app.ui.book.audio.AudioPlayActivity
 import io.legado.app.ui.book.manga.ReadMangaActivity
 import io.legado.app.ui.main.MainActivity
@@ -94,13 +95,13 @@ fun Fragment.startActivityForBook(
 ) {
     val intent = when {
         book.isAudio -> Intent(requireActivity(), AudioPlayActivity::class.java)
-        !book.isLocal && book.isImage && AppConfig.showMangaUi ->
+        !book.isLocal && book.isImage && ReadMangaConfig.showMangaUi ->
             Intent(requireActivity(), ReadMangaActivity::class.java)
 
         else -> MainActivity.createReadBookIntent(requireActivity(), book.bookUrl)
     }
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-    if (book.isAudio || (!book.isLocal && book.isImage && AppConfig.showMangaUi)) {
+    if (book.isAudio || (!book.isLocal && book.isImage && ReadMangaConfig.showMangaUi)) {
         intent.putExtra("bookUrl", book.bookUrl)
     }
     intent.apply(configIntent)