fix: 漫画偏好设置问题
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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("当前没有配置菜单区域,自动恢复中间区域为菜单.")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user