From 43d5f6d5e2fe52eff64f16b8bd094bc24db7879d Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Wed, 10 Jun 2026 01:20:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=BC=AB=E7=94=BB=E5=81=8F=E5=A5=BD?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/MangaSettingsRepository.kt | 182 ----------------- .../main/java/io/legado/app/di/appModule.kt | 2 - .../io/legado/app/help/config/AppConfig.kt | 183 +++++++----------- .../java/io/legado/app/model/BookCover.kt | 3 +- .../java/io/legado/app/model/ReadManga.kt | 5 +- .../app/ui/book/info/BookInfoRouteScreen.kt | 3 +- .../app/ui/book/manga/ReadMangaActivity.kt | 67 +++---- .../app/ui/book/manga/ReadMangaViewModel.kt | 94 +-------- .../book/manga/config/MangaAutoReadDialog.kt | 4 +- .../config/MangaClickActionConfigDialog.kt | 59 +++--- .../manga/config/MangaColorFilterDialog.kt | 24 +-- .../manga/config/MangaFooterSettingDialog.kt | 35 ++-- .../book/manga/recyclerview/MangaAdapter.kt | 6 +- .../book/manga/recyclerview/WebtoonFrame.kt | 22 +-- .../config/otherConfig/OtherConfigScreen.kt | 6 +- .../otherConfig/OtherConfigViewModel.kt | 17 +- .../config/readMangaConfig/ReadMangaConfig.kt | 126 ++++++++++++ .../io/legado/app/utils/ContextExtensions.kt | 9 +- .../io/legado/app/utils/FragmentExtensions.kt | 5 +- 19 files changed, 312 insertions(+), 540 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt create mode 100644 app/src/main/java/io/legado/app/ui/config/readMangaConfig/ReadMangaConfig.kt diff --git a/app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt b/app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt deleted file mode 100644 index a7008ca32..000000000 --- a/app/src/main/java/io/legado/app/data/repository/MangaSettingsRepository.kt +++ /dev/null @@ -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 = 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) - } -} diff --git a/app/src/main/java/io/legado/app/di/appModule.kt b/app/src/main/java/io/legado/app/di/appModule.kt index 06e110038..5fdf8fac7 100644 --- a/app/src/main/java/io/legado/app/di/appModule.kt +++ b/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) diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index b9fba4983..c1c468d88 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/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 diff --git a/app/src/main/java/io/legado/app/model/BookCover.kt b/app/src/main/java/io/legado/app/model/BookCover.kt index 730c80ef6..7bed5e820 100644 --- a/app/src/main/java/io/legado/app/model/BookCover.kt +++ b/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()) diff --git a/app/src/main/java/io/legado/app/model/ReadManga.kt b/app/src/main/java/io/legado/app/model/ReadManga.kt index 52ab652af..1520ff0cd 100644 --- a/app/src/main/java/io/legado/app/model/ReadManga.kt +++ b/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) } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt index 1a3fb5fc2..f8fbe1fb4 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt +++ b/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 } diff --git a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt index e3199940a..b6795d1c1 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt +++ b/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(AppConfig.mangaFooterConfig).getOrNull() + GSON.fromJsonObject(ReadMangaConfig.mangaFooterConfig).getOrNull() ?: MangaFooterConfig() onBackPressedDispatcher.addCallback(this){ @@ -258,12 +259,12 @@ class ReadMangaActivity : VMBaseActivity(AppConfig.mangaColorFilter).getOrNull() + GSON.fromJsonObject(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 if (mAdapter.isNotEmpty()) { val item = mAdapter.getItem(position) @@ -498,7 +499,7 @@ class ReadMangaActivity : VMBaseActivity { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt index 2d84ab5d6..05bd4fa0a 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaViewModel.kt +++ b/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() diff --git a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaAutoReadDialog.kt b/app/src/main/java/io/legado/app/ui/book/manga/config/MangaAutoReadDialog.kt index a38b2ffc7..5c5afcad7 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaAutoReadDialog.kt +++ b/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) diff --git a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaClickActionConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/manga/config/MangaClickActionConfigDialog.kt index ba4cba78e..fa95c229e 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaClickActionConfigDialog.kt +++ b/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() 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 } } diff --git a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt b/app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt index 331bc97fd..045b83883 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaColorFilterDialog.kt +++ b/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() private val mConfig = - GSON.fromJsonObject(AppConfig.mangaColorFilter).getOrNull() + GSON.fromJsonObject(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 { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaFooterSettingDialog.kt b/app/src/main/java/io/legado/app/ui/book/manga/config/MangaFooterSettingDialog.kt index 1f234ea2d..b50a103ac 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/config/MangaFooterSettingDialog.kt +++ b/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(AppConfig.mangaFooterConfig).getOrNull() + val config = GSON.fromJsonObject(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() 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() { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt index eab1b3656..42ca3f8ba 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/MangaAdapter.kt +++ b/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) } } diff --git a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonFrame.kt b/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonFrame.kt index d17ad98bd..519ee438b 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/recyclerview/WebtoonFrame.kt +++ b/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 } diff --git a/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigScreen.kt b/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigScreen.kt index 1c8c3e67f..f7a1f391d 100644 --- a/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigScreen.kt +++ b/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 } ) } diff --git a/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigViewModel.kt b/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigViewModel.kt index 39da7da8d..cf826f2fc 100644 --- a/app/src/main/java/io/legado/app/ui/config/otherConfig/OtherConfigViewModel.kt +++ b/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 } diff --git a/app/src/main/java/io/legado/app/ui/config/readMangaConfig/ReadMangaConfig.kt b/app/src/main/java/io/legado/app/ui/config/readMangaConfig/ReadMangaConfig.kt new file mode 100644 index 000000000..1abbebc65 --- /dev/null +++ b/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("当前没有配置菜单区域,自动恢复中间区域为菜单.") + } + } +} diff --git a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt index 161c7fe8d..90652ba7e 100644 --- a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt +++ b/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) diff --git a/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt b/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt index 21da365ce..ddc46c9da 100644 --- a/app/src/main/java/io/legado/app/utils/FragmentExtensions.kt +++ b/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)