refactor: 拆分ReadConfig为5个职责单一的配置对象
将ReadConfig拆分为ReadDataConfig、ReadInteractionConfig、ReadMenuConfig、 ReadRenderConfig、ReadTtsConfig,各司其职。 menuAlpha迁移至ReadBookConfig.readMenuBlurAlpha。
This commit is contained in:
@@ -125,15 +125,15 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
ReadConfig.pageTouchSlop = preferences.pageTouchSlop
|
ReadConfig.pageTouchSlop = preferences.pageTouchSlop
|
||||||
ReadConfig.showReadTitleAddition = preferences.showReadTitleAddition
|
ReadConfig.showReadTitleAddition = preferences.showReadTitleAddition
|
||||||
ReadConfig.titleBarMode = preferences.titleBarMode
|
ReadConfig.titleBarMode = preferences.titleBarMode
|
||||||
ReadConfig.menuAlpha = preferences.menuAlpha
|
ReadBookConfig.readMenuBlurAlpha = preferences.readMenuBlurAlpha
|
||||||
ReadConfig.readSliderMode = preferences.readSliderMode
|
ReadBookConfig.readSliderMode = preferences.readSliderMode
|
||||||
readBarStyleFollowPageValue = preferences.readBarStyleFollowPage
|
readBarStyleFollowPageValue = preferences.readBarStyleFollowPage
|
||||||
readBarStyleValue = preferences.readBarStyle
|
readBarStyleValue = preferences.readBarStyle
|
||||||
ReadConfig.defaultSourceChangeAll = preferences.defaultSourceChangeAll
|
ReadConfig.defaultSourceChangeAll = preferences.defaultSourceChangeAll
|
||||||
ReadConfig.sliderVibrator = preferences.sliderVibrator
|
ReadConfig.sliderVibrator = preferences.sliderVibrator
|
||||||
ReadConfig.selectVibrator = preferences.selectVibrator
|
ReadConfig.selectVibrator = preferences.selectVibrator
|
||||||
ReadConfig.brightnessVwPos = preferences.brightnessVwPos
|
ReadBookConfig.brightnessVwPos = preferences.brightnessVwPos
|
||||||
ReadConfig.readBrightness = preferences.readBrightness
|
ReadBookConfig.readBrightness = preferences.readBrightness
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateReadBarStyleCache(value: Int) {
|
fun updateReadBarStyleCache(value: Int) {
|
||||||
@@ -836,16 +836,18 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
set(value) {
|
set(value) {
|
||||||
ThemeConfig.enableBlur = value
|
ThemeConfig.enableBlur = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated("Use ReadBookConfig.readMenuBlurAlpha instead", ReplaceWith("ReadBookConfig.readMenuBlurAlpha"))
|
||||||
var menuAlpha: Int
|
var menuAlpha: Int
|
||||||
get() = ReadConfig.menuAlpha
|
get() = ReadBookConfig.readMenuBlurAlpha
|
||||||
set(value) {
|
set(value) {
|
||||||
ReadConfig.menuAlpha = value
|
ReadBookConfig.readMenuBlurAlpha = value
|
||||||
}
|
}
|
||||||
|
|
||||||
var readSliderMode
|
var readSliderMode
|
||||||
get() = ReadConfig.readSliderMode
|
get() = ReadBookConfig.readSliderMode
|
||||||
set(value) {
|
set(value) {
|
||||||
ReadConfig.readSliderMode = value
|
ReadBookConfig.readSliderMode = value
|
||||||
}
|
}
|
||||||
|
|
||||||
var bookshelfRefreshingLimit: Int
|
var bookshelfRefreshingLimit: Int
|
||||||
|
|||||||
@@ -2944,7 +2944,6 @@ class ReadBookViewModel(
|
|||||||
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
||||||
}
|
}
|
||||||
is ConfigUpdate.ReadBodyToLh -> {
|
is ConfigUpdate.ReadBodyToLh -> {
|
||||||
ReadConfig.readBodyToLh = update.value
|
|
||||||
ReadBookConfig.readBodyToLh = update.value
|
ReadBookConfig.readBodyToLh = update.value
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
readSettingsRepository.setReadBodyToLh(update.value)
|
readSettingsRepository.setReadBodyToLh(update.value)
|
||||||
|
|||||||
@@ -1,470 +1,295 @@
|
|||||||
package io.legado.app.ui.config.readConfig
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
import io.legado.app.BuildConfig
|
|
||||||
import io.legado.app.constant.PreferKey
|
|
||||||
import io.legado.app.data.repository.ReadPreferences
|
import io.legado.app.data.repository.ReadPreferences
|
||||||
import io.legado.app.ui.config.prefDelegate
|
|
||||||
import io.legado.app.ui.config.themeConfig.ThemeConfig
|
|
||||||
import io.legado.app.utils.isNightMode
|
|
||||||
import io.legado.app.utils.sysConfiguration
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阅读配置门面
|
||||||
|
*
|
||||||
|
* 代理到子配置对象,保持向后兼容。
|
||||||
|
* 子配置按职责拆分为:
|
||||||
|
* - [ReadRenderConfig] 渲染/布局
|
||||||
|
* - [ReadMenuConfig] 菜单/标题栏/进度条/点击区域
|
||||||
|
* - [ReadInteractionConfig] 按键/触控交互
|
||||||
|
* - [ReadTtsConfig] TTS/朗读/音频
|
||||||
|
* - [ReadDataConfig] 数据同步/缓存/屏幕
|
||||||
|
*
|
||||||
|
* 注意:textFullJustify、textBottomJustify、useZhLayout、readBodyToLh、
|
||||||
|
* hideStatusBar、hideNavigationBar、showBrightnessView、brightnessVwPos、
|
||||||
|
* readBrightness、brightnessAuto、readSliderMode、readMenuBlurAlpha
|
||||||
|
* 已在 [ReadBookConfig] 中定义,此处不重复。
|
||||||
|
*/
|
||||||
object ReadConfig {
|
object ReadConfig {
|
||||||
|
|
||||||
val isEInkMode: Boolean
|
// ── 渲染 ──
|
||||||
get() = ThemeConfig.appTheme == "4"
|
|
||||||
|
|
||||||
var isNightTheme: Boolean
|
val isEInkMode get() = ReadRenderConfig.isEInkMode
|
||||||
get() = when (ThemeConfig.themeMode) {
|
var isNightTheme
|
||||||
"1" -> false
|
get() = ReadRenderConfig.isNightTheme
|
||||||
"2" -> true
|
set(value) { ReadRenderConfig.isNightTheme = value }
|
||||||
else -> sysConfiguration.isNightMode
|
val enableReview get() = ReadRenderConfig.enableReview
|
||||||
}
|
var useAntiAlias
|
||||||
set(value) {
|
get() = ReadRenderConfig.useAntiAlias
|
||||||
val newMode = if (value) "2" else "1"
|
set(value) { ReadRenderConfig.useAntiAlias = value }
|
||||||
if (ThemeConfig.themeMode != newMode) {
|
var systemTypefaces
|
||||||
ThemeConfig.themeMode = newMode
|
get() = ReadRenderConfig.systemTypefaces
|
||||||
}
|
set(value) { ReadRenderConfig.systemTypefaces = value }
|
||||||
}
|
var doubleHorizontalPage
|
||||||
|
get() = ReadRenderConfig.doubleHorizontalPage
|
||||||
|
set(value) { ReadRenderConfig.doubleHorizontalPage = value }
|
||||||
|
var adaptSpecialStyle
|
||||||
|
get() = ReadRenderConfig.adaptSpecialStyle
|
||||||
|
set(value) { ReadRenderConfig.adaptSpecialStyle = value }
|
||||||
|
var useUnderline
|
||||||
|
get() = ReadRenderConfig.useUnderline
|
||||||
|
set(value) { ReadRenderConfig.useUnderline = value }
|
||||||
|
var optimizeRender
|
||||||
|
get() = ReadRenderConfig.optimizeRender
|
||||||
|
set(value) { ReadRenderConfig.optimizeRender = value }
|
||||||
|
var noAnimScrollPage
|
||||||
|
get() = ReadRenderConfig.noAnimScrollPage
|
||||||
|
set(value) { ReadRenderConfig.noAnimScrollPage = value }
|
||||||
|
var paddingDisplayCutouts
|
||||||
|
get() = ReadRenderConfig.paddingDisplayCutouts
|
||||||
|
set(value) { ReadRenderConfig.paddingDisplayCutouts = value }
|
||||||
|
var pageTouchSlop
|
||||||
|
get() = ReadRenderConfig.pageTouchSlop
|
||||||
|
set(value) { ReadRenderConfig.pageTouchSlop = value }
|
||||||
|
var selectText
|
||||||
|
get() = ReadRenderConfig.selectText
|
||||||
|
set(value) { ReadRenderConfig.selectText = value }
|
||||||
|
var clickImgWay
|
||||||
|
get() = ReadRenderConfig.clickImgWay
|
||||||
|
set(value) { ReadRenderConfig.clickImgWay = value }
|
||||||
|
var chineseConverterType
|
||||||
|
get() = ReadRenderConfig.chineseConverterType
|
||||||
|
set(value) { ReadRenderConfig.chineseConverterType = value }
|
||||||
|
|
||||||
var useAntiAlias by prefDelegate(
|
// ── 菜单 ──
|
||||||
PreferKey.antiAlias,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
val enableReview: Boolean
|
var titleBarMode
|
||||||
get() = BuildConfig.DEBUG && enableReviewPref
|
get() = ReadMenuConfig.titleBarMode
|
||||||
|
set(value) { ReadMenuConfig.titleBarMode = value }
|
||||||
|
var menuAlpha
|
||||||
|
get() = ReadMenuConfig.menuAlpha
|
||||||
|
set(value) { ReadMenuConfig.menuAlpha = value }
|
||||||
|
var readBarStyleFollowPage
|
||||||
|
get() = ReadMenuConfig.readBarStyleFollowPage
|
||||||
|
set(value) { ReadMenuConfig.readBarStyleFollowPage = value }
|
||||||
|
var readBarStyle
|
||||||
|
get() = ReadMenuConfig.readBarStyle
|
||||||
|
set(value) { ReadMenuConfig.readBarStyle = value }
|
||||||
|
var progressBarBehavior
|
||||||
|
get() = ReadMenuConfig.progressBarBehavior
|
||||||
|
set(value) { ReadMenuConfig.progressBarBehavior = value }
|
||||||
|
var expandTextMenu
|
||||||
|
get() = ReadMenuConfig.expandTextMenu
|
||||||
|
set(value) { ReadMenuConfig.expandTextMenu = value }
|
||||||
|
var showReadTitleAddition
|
||||||
|
get() = ReadMenuConfig.showReadTitleAddition
|
||||||
|
set(value) { ReadMenuConfig.showReadTitleAddition = value }
|
||||||
|
var clickActionTL
|
||||||
|
get() = ReadMenuConfig.clickActionTL
|
||||||
|
set(value) { ReadMenuConfig.clickActionTL = value }
|
||||||
|
var clickActionTC
|
||||||
|
get() = ReadMenuConfig.clickActionTC
|
||||||
|
set(value) { ReadMenuConfig.clickActionTC = value }
|
||||||
|
var clickActionTR
|
||||||
|
get() = ReadMenuConfig.clickActionTR
|
||||||
|
set(value) { ReadMenuConfig.clickActionTR = value }
|
||||||
|
var clickActionML
|
||||||
|
get() = ReadMenuConfig.clickActionML
|
||||||
|
set(value) { ReadMenuConfig.clickActionML = value }
|
||||||
|
var clickActionMC
|
||||||
|
get() = ReadMenuConfig.clickActionMC
|
||||||
|
set(value) { ReadMenuConfig.clickActionMC = value }
|
||||||
|
var clickActionMR
|
||||||
|
get() = ReadMenuConfig.clickActionMR
|
||||||
|
set(value) { ReadMenuConfig.clickActionMR = value }
|
||||||
|
var clickActionBL
|
||||||
|
get() = ReadMenuConfig.clickActionBL
|
||||||
|
set(value) { ReadMenuConfig.clickActionBL = value }
|
||||||
|
var clickActionBC
|
||||||
|
get() = ReadMenuConfig.clickActionBC
|
||||||
|
set(value) { ReadMenuConfig.clickActionBC = value }
|
||||||
|
var clickActionBR
|
||||||
|
get() = ReadMenuConfig.clickActionBR
|
||||||
|
set(value) { ReadMenuConfig.clickActionBR = value }
|
||||||
|
fun hasMenuClickArea() = ReadMenuConfig.hasMenuClickArea()
|
||||||
|
fun detectClickArea() = ReadMenuConfig.detectClickArea()
|
||||||
|
|
||||||
private var enableReviewPref by prefDelegate(
|
// ── 交互 ──
|
||||||
PreferKey.enableReview,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var systemTypefaces by prefDelegate(
|
var mouseWheelPage
|
||||||
PreferKey.systemTypefaces,
|
get() = ReadInteractionConfig.mouseWheelPage
|
||||||
0
|
set(value) { ReadInteractionConfig.mouseWheelPage = value }
|
||||||
)
|
var volumeKeyPage
|
||||||
|
get() = ReadInteractionConfig.volumeKeyPage
|
||||||
|
set(value) { ReadInteractionConfig.volumeKeyPage = value }
|
||||||
|
var volumeKeyPageOnPlay
|
||||||
|
get() = ReadInteractionConfig.volumeKeyPageOnPlay
|
||||||
|
set(value) { ReadInteractionConfig.volumeKeyPageOnPlay = value }
|
||||||
|
var keyPageOnLongPress
|
||||||
|
get() = ReadInteractionConfig.keyPageOnLongPress
|
||||||
|
set(value) { ReadInteractionConfig.keyPageOnLongPress = value }
|
||||||
|
var sliderVibrator
|
||||||
|
get() = ReadInteractionConfig.sliderVibrator
|
||||||
|
set(value) { ReadInteractionConfig.sliderVibrator = value }
|
||||||
|
var selectVibrator
|
||||||
|
get() = ReadInteractionConfig.selectVibrator
|
||||||
|
set(value) { ReadInteractionConfig.selectVibrator = value }
|
||||||
|
var disableReturnKey
|
||||||
|
get() = ReadInteractionConfig.disableReturnKey
|
||||||
|
set(value) { ReadInteractionConfig.disableReturnKey = value }
|
||||||
|
var prevKeys
|
||||||
|
get() = ReadInteractionConfig.prevKeys
|
||||||
|
set(value) { ReadInteractionConfig.prevKeys = value }
|
||||||
|
var nextKeys
|
||||||
|
get() = ReadInteractionConfig.nextKeys
|
||||||
|
set(value) { ReadInteractionConfig.nextKeys = value }
|
||||||
|
|
||||||
var readUrlInBrowser by prefDelegate(
|
// ── TTS ──
|
||||||
PreferKey.readUrlOpenInBrowser,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var contentSelectSpeakMod by prefDelegate(
|
val speechRatePlay get() = ReadTtsConfig.speechRatePlay
|
||||||
PreferKey.contentSelectSpeakMod,
|
var ttsEngine
|
||||||
0
|
get() = ReadTtsConfig.ttsEngine
|
||||||
)
|
set(value) { ReadTtsConfig.ttsEngine = value }
|
||||||
|
var ttsFollowSys
|
||||||
|
get() = ReadTtsConfig.ttsFollowSys
|
||||||
|
set(value) { ReadTtsConfig.ttsFollowSys = value }
|
||||||
|
var ttsSpeechRate
|
||||||
|
get() = ReadTtsConfig.ttsSpeechRate
|
||||||
|
set(value) { ReadTtsConfig.ttsSpeechRate = value }
|
||||||
|
var ttsTimer
|
||||||
|
get() = ReadTtsConfig.ttsTimer
|
||||||
|
set(value) { ReadTtsConfig.ttsTimer = value }
|
||||||
|
var ignoreAudioFocus
|
||||||
|
get() = ReadTtsConfig.ignoreAudioFocus
|
||||||
|
set(value) { ReadTtsConfig.ignoreAudioFocus = value }
|
||||||
|
var pauseReadAloudWhilePhoneCalls
|
||||||
|
get() = ReadTtsConfig.pauseReadAloudWhilePhoneCalls
|
||||||
|
set(value) { ReadTtsConfig.pauseReadAloudWhilePhoneCalls = value }
|
||||||
|
var readAloudWakeLock
|
||||||
|
get() = ReadTtsConfig.readAloudWakeLock
|
||||||
|
set(value) { ReadTtsConfig.readAloudWakeLock = value }
|
||||||
|
var mediaButtonPerNext
|
||||||
|
get() = ReadTtsConfig.mediaButtonPerNext
|
||||||
|
set(value) { ReadTtsConfig.mediaButtonPerNext = value }
|
||||||
|
var readAloudByPage
|
||||||
|
get() = ReadTtsConfig.readAloudByPage
|
||||||
|
set(value) { ReadTtsConfig.readAloudByPage = value }
|
||||||
|
var systemMediaControlCompatibilityChange
|
||||||
|
get() = ReadTtsConfig.systemMediaControlCompatibilityChange
|
||||||
|
set(value) { ReadTtsConfig.systemMediaControlCompatibilityChange = value }
|
||||||
|
var streamReadAloudAudio
|
||||||
|
get() = ReadTtsConfig.streamReadAloudAudio
|
||||||
|
set(value) { ReadTtsConfig.streamReadAloudAudio = value }
|
||||||
|
var contentSelectSpeakMod
|
||||||
|
get() = ReadTtsConfig.contentSelectSpeakMod
|
||||||
|
set(value) { ReadTtsConfig.contentSelectSpeakMod = value }
|
||||||
|
var audioPreDownloadNum
|
||||||
|
get() = ReadTtsConfig.audioPreDownloadNum
|
||||||
|
set(value) { ReadTtsConfig.audioPreDownloadNum = value }
|
||||||
|
var audioCacheCleanTimeOrgin
|
||||||
|
get() = ReadTtsConfig.audioCacheCleanTimeOrgin
|
||||||
|
set(value) { ReadTtsConfig.audioCacheCleanTimeOrgin = value }
|
||||||
|
val audioCacheCleanTime get() = ReadTtsConfig.audioCacheCleanTime
|
||||||
|
|
||||||
var syncBookProgress by prefDelegate(
|
// ── 数据/屏幕 ──
|
||||||
PreferKey.syncBookProgress,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var syncBookProgressPlus by prefDelegate(
|
var syncBookProgress
|
||||||
PreferKey.syncBookProgressPlus,
|
get() = ReadDataConfig.syncBookProgress
|
||||||
false
|
set(value) { ReadDataConfig.syncBookProgress = value }
|
||||||
)
|
var syncBookProgressPlus
|
||||||
|
get() = ReadDataConfig.syncBookProgressPlus
|
||||||
|
set(value) { ReadDataConfig.syncBookProgressPlus = value }
|
||||||
|
var autoChangeSource
|
||||||
|
get() = ReadDataConfig.autoChangeSource
|
||||||
|
set(value) { ReadDataConfig.autoChangeSource = value }
|
||||||
|
var defaultSourceChangeAll
|
||||||
|
get() = ReadDataConfig.defaultSourceChangeAll
|
||||||
|
set(value) { ReadDataConfig.defaultSourceChangeAll = value }
|
||||||
|
var readUrlInBrowser
|
||||||
|
get() = ReadDataConfig.readUrlInBrowser
|
||||||
|
set(value) { ReadDataConfig.readUrlInBrowser = value }
|
||||||
|
var tocUiUseReplace
|
||||||
|
get() = ReadDataConfig.tocUiUseReplace
|
||||||
|
set(value) { ReadDataConfig.tocUiUseReplace = value }
|
||||||
|
var tocCountWords
|
||||||
|
get() = ReadDataConfig.tocCountWords
|
||||||
|
set(value) { ReadDataConfig.tocCountWords = value }
|
||||||
|
var preDownloadNum
|
||||||
|
get() = ReadDataConfig.preDownloadNum
|
||||||
|
set(value) { ReadDataConfig.preDownloadNum = value }
|
||||||
|
var imageRetainNum
|
||||||
|
get() = ReadDataConfig.imageRetainNum
|
||||||
|
set(value) { ReadDataConfig.imageRetainNum = value }
|
||||||
|
var keepLight
|
||||||
|
get() = ReadDataConfig.keepLight
|
||||||
|
set(value) { ReadDataConfig.keepLight = value }
|
||||||
|
var screenOrientation
|
||||||
|
get() = ReadDataConfig.screenOrientation
|
||||||
|
set(value) { ReadDataConfig.screenOrientation = value }
|
||||||
|
|
||||||
var preDownloadNum by prefDelegate(
|
// ── 同步 ──
|
||||||
PreferKey.preDownloadNum,
|
|
||||||
10
|
|
||||||
)
|
|
||||||
|
|
||||||
var imageRetainNum by prefDelegate(
|
|
||||||
PreferKey.imageRetainNum,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
var audioCacheCleanTimeOrgin by prefDelegate(
|
|
||||||
PreferKey.audioCacheCleanTime,
|
|
||||||
10
|
|
||||||
)
|
|
||||||
|
|
||||||
val audioCacheCleanTime: Long
|
|
||||||
get() = audioCacheCleanTimeOrgin * 60 * 1000L
|
|
||||||
|
|
||||||
var audioPreDownloadNum by prefDelegate(
|
|
||||||
PreferKey.audioPreDownloadNum,
|
|
||||||
10
|
|
||||||
)
|
|
||||||
|
|
||||||
private const val defaultSpeechRate = 5
|
|
||||||
|
|
||||||
val speechRatePlay: Int
|
|
||||||
get() = if (ttsFollowSys) defaultSpeechRate else ttsSpeechRate
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从 [ReadPreferences] 批量同步到各子配置。
|
||||||
|
*
|
||||||
|
* 注意:textFullJustify、textBottomJustify、useZhLayout、readBodyToLh、
|
||||||
|
* hideStatusBar、hideNavigationBar、showBrightnessView、brightnessVwPos、
|
||||||
|
* readBrightness、brightnessAuto、readSliderMode、readMenuBlurAlpha
|
||||||
|
* 由 [ReadBookConfig] 的 prefDelegate 自动同步,此处不处理。
|
||||||
|
*/
|
||||||
fun syncReadPreferences(preferences: ReadPreferences) {
|
fun syncReadPreferences(preferences: ReadPreferences) {
|
||||||
optimizeRender = preferences.optimizeRender
|
// 渲染
|
||||||
adaptSpecialStyle = preferences.adaptSpecialStyle
|
ReadRenderConfig.apply {
|
||||||
useUnderline = preferences.useUnderline
|
optimizeRender = preferences.optimizeRender
|
||||||
keepLight = preferences.keepLight
|
adaptSpecialStyle = preferences.adaptSpecialStyle
|
||||||
brightnessVwPos = preferences.brightnessVwPos
|
useUnderline = preferences.useUnderline
|
||||||
readBrightness = preferences.readBrightness
|
chineseConverterType = preferences.chineseConverterType
|
||||||
brightnessAuto = preferences.brightnessAuto
|
doubleHorizontalPage = preferences.doubleHorizontalPage
|
||||||
chineseConverterType = preferences.chineseConverterType
|
noAnimScrollPage = preferences.noAnimScrollPage
|
||||||
clickActionTL = preferences.clickActionTL
|
paddingDisplayCutouts = preferences.paddingDisplayCutouts
|
||||||
clickActionTC = preferences.clickActionTC
|
pageTouchSlop = preferences.pageTouchSlop
|
||||||
clickActionTR = preferences.clickActionTR
|
selectText = preferences.selectText
|
||||||
clickActionML = preferences.clickActionML
|
clickImgWay = preferences.clickImgWay
|
||||||
clickActionMC = preferences.clickActionMC
|
}
|
||||||
clickActionMR = preferences.clickActionMR
|
// 菜单
|
||||||
clickActionBL = preferences.clickActionBL
|
ReadMenuConfig.apply {
|
||||||
clickActionBC = preferences.clickActionBC
|
titleBarMode = preferences.titleBarMode
|
||||||
clickActionBR = preferences.clickActionBR
|
readBarStyleFollowPage = preferences.readBarStyleFollowPage
|
||||||
screenOrientation = preferences.screenOrientation
|
readBarStyle = preferences.readBarStyle
|
||||||
readBodyToLh = preferences.readBodyToLh
|
progressBarBehavior = preferences.progressBarBehavior
|
||||||
noAnimScrollPage = preferences.noAnimScrollPage
|
expandTextMenu = preferences.expandTextMenu
|
||||||
tocUiUseReplace = preferences.tocUiUseReplace
|
showReadTitleAddition = preferences.showReadTitleAddition
|
||||||
tocCountWords = preferences.tocCountWords
|
clickActionTL = preferences.clickActionTL
|
||||||
autoChangeSource = preferences.autoChangeSource
|
clickActionTC = preferences.clickActionTC
|
||||||
clickImgWay = preferences.clickImgWay
|
clickActionTR = preferences.clickActionTR
|
||||||
doubleHorizontalPage = preferences.doubleHorizontalPage
|
clickActionML = preferences.clickActionML
|
||||||
progressBarBehavior = preferences.progressBarBehavior
|
clickActionMC = preferences.clickActionMC
|
||||||
keyPageOnLongPress = preferences.keyPageOnLongPress
|
clickActionMR = preferences.clickActionMR
|
||||||
volumeKeyPage = preferences.volumeKeyPage
|
clickActionBL = preferences.clickActionBL
|
||||||
volumeKeyPageOnPlay = preferences.volumeKeyPageOnPlay
|
clickActionBC = preferences.clickActionBC
|
||||||
mouseWheelPage = preferences.mouseWheelPage
|
clickActionBR = preferences.clickActionBR
|
||||||
paddingDisplayCutouts = preferences.paddingDisplayCutouts
|
}
|
||||||
pageTouchSlop = preferences.pageTouchSlop
|
// 交互
|
||||||
selectText = preferences.selectText
|
ReadInteractionConfig.apply {
|
||||||
disableReturnKey = preferences.disableReturnKey
|
mouseWheelPage = preferences.mouseWheelPage
|
||||||
expandTextMenu = preferences.expandTextMenu
|
volumeKeyPage = preferences.volumeKeyPage
|
||||||
showReadTitleAddition = preferences.showReadTitleAddition
|
volumeKeyPageOnPlay = preferences.volumeKeyPageOnPlay
|
||||||
titleBarMode = preferences.titleBarMode
|
keyPageOnLongPress = preferences.keyPageOnLongPress
|
||||||
menuAlpha = preferences.menuAlpha
|
sliderVibrator = preferences.sliderVibrator
|
||||||
readSliderMode = preferences.readSliderMode
|
selectVibrator = preferences.selectVibrator
|
||||||
readBarStyleFollowPage = preferences.readBarStyleFollowPage
|
disableReturnKey = preferences.disableReturnKey
|
||||||
readBarStyle = preferences.readBarStyle
|
}
|
||||||
defaultSourceChangeAll = preferences.defaultSourceChangeAll
|
// 数据/屏幕
|
||||||
sliderVibrator = preferences.sliderVibrator
|
ReadDataConfig.apply {
|
||||||
selectVibrator = preferences.selectVibrator
|
keepLight = preferences.keepLight
|
||||||
}
|
screenOrientation = preferences.screenOrientation
|
||||||
|
autoChangeSource = preferences.autoChangeSource
|
||||||
var tocUiUseReplace by prefDelegate(
|
defaultSourceChangeAll = preferences.defaultSourceChangeAll
|
||||||
PreferKey.tocUiUseReplace,
|
tocUiUseReplace = preferences.tocUiUseReplace
|
||||||
false
|
tocCountWords = preferences.tocCountWords
|
||||||
)
|
|
||||||
|
|
||||||
var tocCountWords by prefDelegate(
|
|
||||||
PreferKey.tocCountWords,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var screenOrientation by prefDelegate(
|
|
||||||
PreferKey.screenOrientation,
|
|
||||||
"0"
|
|
||||||
)
|
|
||||||
|
|
||||||
var keepLight by prefDelegate(
|
|
||||||
PreferKey.keepLight,
|
|
||||||
"0"
|
|
||||||
)
|
|
||||||
|
|
||||||
var hideStatusBar by prefDelegate(
|
|
||||||
PreferKey.hideStatusBar,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var hideNavigationBar by prefDelegate(
|
|
||||||
PreferKey.hideNavigationBar,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var paddingDisplayCutouts by prefDelegate(
|
|
||||||
PreferKey.paddingDisplayCutouts,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var titleBarMode by prefDelegate(
|
|
||||||
PreferKey.titleBarMode,
|
|
||||||
"1"
|
|
||||||
)
|
|
||||||
|
|
||||||
var menuAlpha by prefDelegate(
|
|
||||||
PreferKey.menuAlpha,
|
|
||||||
100
|
|
||||||
)
|
|
||||||
|
|
||||||
var readBodyToLh by prefDelegate(
|
|
||||||
PreferKey.readBodyToLh,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var defaultSourceChangeAll by prefDelegate(
|
|
||||||
PreferKey.defaultSourceChangeAll,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var textFullJustify by prefDelegate(
|
|
||||||
PreferKey.textFullJustify,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var textBottomJustify by prefDelegate(
|
|
||||||
PreferKey.textBottomJustify,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var adaptSpecialStyle by prefDelegate(
|
|
||||||
PreferKey.adaptSpecialStyle,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var useZhLayout by prefDelegate(
|
|
||||||
PreferKey.useZhLayout,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var showBrightnessView by prefDelegate(
|
|
||||||
PreferKey.showBrightnessView,
|
|
||||||
"1"
|
|
||||||
)
|
|
||||||
|
|
||||||
var brightnessVwPos by prefDelegate(
|
|
||||||
PreferKey.brightnessVwPos,
|
|
||||||
"1"
|
|
||||||
)
|
|
||||||
|
|
||||||
var readBrightness by prefDelegate(
|
|
||||||
PreferKey.brightness,
|
|
||||||
100
|
|
||||||
)
|
|
||||||
|
|
||||||
var brightnessAuto by prefDelegate(
|
|
||||||
PreferKey.brightnessAuto,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var useUnderline by prefDelegate(
|
|
||||||
PreferKey.useUnderline,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var readSliderMode by prefDelegate(
|
|
||||||
PreferKey.readSliderMode,
|
|
||||||
"0"
|
|
||||||
)
|
|
||||||
|
|
||||||
var doubleHorizontalPage by prefDelegate(
|
|
||||||
PreferKey.doublePageHorizontal,
|
|
||||||
"0"
|
|
||||||
)
|
|
||||||
|
|
||||||
var progressBarBehavior by prefDelegate(
|
|
||||||
PreferKey.progressBarBehavior,
|
|
||||||
"page"
|
|
||||||
)
|
|
||||||
|
|
||||||
var mouseWheelPage by prefDelegate(
|
|
||||||
PreferKey.mouseWheelPage,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var volumeKeyPage by prefDelegate(
|
|
||||||
PreferKey.volumeKeyPage,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var volumeKeyPageOnPlay by prefDelegate(
|
|
||||||
PreferKey.volumeKeyPageOnPlay,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var keyPageOnLongPress by prefDelegate(
|
|
||||||
PreferKey.keyPageOnLongPress,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var pageTouchSlop by prefDelegate(
|
|
||||||
PreferKey.pageTouchSlop,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
var sliderVibrator by prefDelegate(
|
|
||||||
PreferKey.sliderVibrator,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var selectVibrator by prefDelegate(
|
|
||||||
PreferKey.selectVibrator,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var autoChangeSource by prefDelegate(
|
|
||||||
PreferKey.autoChangeSource,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var selectText by prefDelegate(
|
|
||||||
PreferKey.selectText,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var noAnimScrollPage by prefDelegate(
|
|
||||||
PreferKey.noAnimScrollPage,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickImgWay by prefDelegate(
|
|
||||||
PreferKey.clickImgWay,
|
|
||||||
"2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var optimizeRender by prefDelegate(
|
|
||||||
PreferKey.optimizeRender,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var disableReturnKey by prefDelegate(
|
|
||||||
PreferKey.disableReturnKey,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var expandTextMenu by prefDelegate(
|
|
||||||
PreferKey.expandTextMenu,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var showReadTitleAddition by prefDelegate(
|
|
||||||
PreferKey.showReadTitleAddition,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionTL by prefDelegate(
|
|
||||||
PreferKey.clickActionTL,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionTC by prefDelegate(
|
|
||||||
PreferKey.clickActionTC,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionTR by prefDelegate(
|
|
||||||
PreferKey.clickActionTR,
|
|
||||||
1
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionML by prefDelegate(
|
|
||||||
PreferKey.clickActionML,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionMC by prefDelegate(
|
|
||||||
PreferKey.clickActionMC,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionMR by prefDelegate(
|
|
||||||
PreferKey.clickActionMR,
|
|
||||||
1
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionBL by prefDelegate(
|
|
||||||
PreferKey.clickActionBL,
|
|
||||||
2
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionBC by prefDelegate(
|
|
||||||
PreferKey.clickActionBC,
|
|
||||||
1
|
|
||||||
)
|
|
||||||
|
|
||||||
var clickActionBR by prefDelegate(
|
|
||||||
PreferKey.clickActionBR,
|
|
||||||
1
|
|
||||||
)
|
|
||||||
|
|
||||||
fun hasMenuClickArea(): Boolean {
|
|
||||||
return clickActionTL * clickActionTC * clickActionTR *
|
|
||||||
clickActionML * clickActionMC * clickActionMR *
|
|
||||||
clickActionBL * clickActionBC * clickActionBR == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fun detectClickArea() {
|
|
||||||
if (!hasMenuClickArea()) {
|
|
||||||
clickActionMC = 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var readBarStyleFollowPage by prefDelegate(
|
|
||||||
PreferKey.readBarStyleFollowPage,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var readBarStyle by prefDelegate(
|
|
||||||
PreferKey.readBarStyle,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
var prevKeys by prefDelegate(
|
|
||||||
PreferKey.prevKeys,
|
|
||||||
""
|
|
||||||
)
|
|
||||||
|
|
||||||
var nextKeys by prefDelegate(
|
|
||||||
PreferKey.nextKeys,
|
|
||||||
""
|
|
||||||
)
|
|
||||||
|
|
||||||
// --- Read Aloud ---
|
|
||||||
|
|
||||||
var ignoreAudioFocus by prefDelegate(
|
|
||||||
PreferKey.ignoreAudioFocus,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var pauseReadAloudWhilePhoneCalls by prefDelegate(
|
|
||||||
PreferKey.pauseReadAloudWhilePhoneCalls,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var readAloudWakeLock by prefDelegate(
|
|
||||||
PreferKey.readAloudWakeLock,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var mediaButtonPerNext by prefDelegate(
|
|
||||||
"mediaButtonPerNext",
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var readAloudByPage by prefDelegate(
|
|
||||||
PreferKey.readAloudByPage,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var systemMediaControlCompatibilityChange by prefDelegate(
|
|
||||||
PreferKey.systemMediaControlCompatibilityChange,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var streamReadAloudAudio by prefDelegate(
|
|
||||||
PreferKey.streamReadAloudAudio,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
var ttsTimer by prefDelegate(
|
|
||||||
PreferKey.ttsTimer,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
|
|
||||||
var ttsFollowSys by prefDelegate(
|
|
||||||
PreferKey.ttsFollowSys,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
var ttsSpeechRate by prefDelegate(
|
|
||||||
PreferKey.ttsSpeechRate,
|
|
||||||
5
|
|
||||||
)
|
|
||||||
|
|
||||||
var ttsEngine by prefDelegate<String?>(
|
|
||||||
PreferKey.ttsEngine,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
|
|
||||||
var chineseConverterType by prefDelegate(
|
|
||||||
PreferKey.chineseConverterType,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,13 +60,12 @@ class ReadConfigViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is ReadConfigIntent.ReadMenuBlurAlphaChanged -> {
|
is ReadConfigIntent.ReadMenuBlurAlphaChanged -> {
|
||||||
ReadConfig.menuAlpha = intent.value
|
ReadBookConfig.readMenuBlurAlpha = intent.value
|
||||||
readSettingsRepository.setMenuAlpha(intent.value)
|
readSettingsRepository.setReadMenuBlurAlpha(intent.value)
|
||||||
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
is ReadConfigIntent.ReadBodyToLhChanged -> {
|
is ReadConfigIntent.ReadBodyToLhChanged -> {
|
||||||
ReadConfig.readBodyToLh = intent.value
|
|
||||||
ReadBookConfig.readBodyToLh = intent.value
|
ReadBookConfig.readBodyToLh = intent.value
|
||||||
readSettingsRepository.setReadBodyToLh(intent.value)
|
readSettingsRepository.setReadBodyToLh(intent.value)
|
||||||
}
|
}
|
||||||
@@ -110,7 +109,7 @@ class ReadConfigViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is ReadConfigIntent.ReadSliderModeChanged -> {
|
is ReadConfigIntent.ReadSliderModeChanged -> {
|
||||||
ReadConfig.readSliderMode = intent.value
|
ReadBookConfig.readSliderMode = intent.value
|
||||||
readSettingsRepository.setReadSliderMode(intent.value)
|
readSettingsRepository.setReadSliderMode(intent.value)
|
||||||
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.ui.config.prefDelegate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据同步/缓存/屏幕相关配置
|
||||||
|
*
|
||||||
|
* 被 ReadBookViewModel、ReadBook、ReadManga、BookHelp 读取。
|
||||||
|
*/
|
||||||
|
object ReadDataConfig {
|
||||||
|
|
||||||
|
var syncBookProgress by prefDelegate(
|
||||||
|
PreferKey.syncBookProgress,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var syncBookProgressPlus by prefDelegate(
|
||||||
|
PreferKey.syncBookProgressPlus,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var autoChangeSource by prefDelegate(
|
||||||
|
PreferKey.autoChangeSource,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var defaultSourceChangeAll by prefDelegate(
|
||||||
|
PreferKey.defaultSourceChangeAll,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var readUrlInBrowser by prefDelegate(
|
||||||
|
PreferKey.readUrlOpenInBrowser,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var tocUiUseReplace by prefDelegate(
|
||||||
|
PreferKey.tocUiUseReplace,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var tocCountWords by prefDelegate(
|
||||||
|
PreferKey.tocCountWords,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var preDownloadNum by prefDelegate(
|
||||||
|
PreferKey.preDownloadNum,
|
||||||
|
10
|
||||||
|
)
|
||||||
|
|
||||||
|
var imageRetainNum by prefDelegate(
|
||||||
|
PreferKey.imageRetainNum,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var keepLight by prefDelegate(
|
||||||
|
PreferKey.keepLight,
|
||||||
|
"0"
|
||||||
|
)
|
||||||
|
|
||||||
|
var screenOrientation by prefDelegate(
|
||||||
|
PreferKey.screenOrientation,
|
||||||
|
"0"
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.ui.config.prefDelegate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按键/触控交互相关配置
|
||||||
|
*
|
||||||
|
* 被 ReadBookController 在按键/鼠标事件处理中读取。
|
||||||
|
*/
|
||||||
|
object ReadInteractionConfig {
|
||||||
|
|
||||||
|
var mouseWheelPage by prefDelegate(
|
||||||
|
PreferKey.mouseWheelPage,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var volumeKeyPage by prefDelegate(
|
||||||
|
PreferKey.volumeKeyPage,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var volumeKeyPageOnPlay by prefDelegate(
|
||||||
|
PreferKey.volumeKeyPageOnPlay,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var keyPageOnLongPress by prefDelegate(
|
||||||
|
PreferKey.keyPageOnLongPress,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var sliderVibrator by prefDelegate(
|
||||||
|
PreferKey.sliderVibrator,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var selectVibrator by prefDelegate(
|
||||||
|
PreferKey.selectVibrator,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var disableReturnKey by prefDelegate(
|
||||||
|
PreferKey.disableReturnKey,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var prevKeys by prefDelegate(
|
||||||
|
PreferKey.prevKeys,
|
||||||
|
""
|
||||||
|
)
|
||||||
|
|
||||||
|
var nextKeys by prefDelegate(
|
||||||
|
PreferKey.nextKeys,
|
||||||
|
""
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.ui.config.prefDelegate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单/标题栏/进度条相关配置
|
||||||
|
*
|
||||||
|
* 被 ReadBookMenuBar、标题栏、进度条读取。
|
||||||
|
*/
|
||||||
|
object ReadMenuConfig {
|
||||||
|
|
||||||
|
var titleBarMode by prefDelegate(
|
||||||
|
PreferKey.titleBarMode,
|
||||||
|
"1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var menuAlpha by prefDelegate(
|
||||||
|
PreferKey.menuAlpha,
|
||||||
|
100
|
||||||
|
)
|
||||||
|
|
||||||
|
var readBarStyleFollowPage by prefDelegate(
|
||||||
|
PreferKey.readBarStyleFollowPage,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var readBarStyle by prefDelegate(
|
||||||
|
PreferKey.readBarStyle,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var progressBarBehavior by prefDelegate(
|
||||||
|
PreferKey.progressBarBehavior,
|
||||||
|
"page"
|
||||||
|
)
|
||||||
|
|
||||||
|
var expandTextMenu by prefDelegate(
|
||||||
|
PreferKey.expandTextMenu,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var showReadTitleAddition by prefDelegate(
|
||||||
|
PreferKey.showReadTitleAddition,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
// --- 点击区域配置 ---
|
||||||
|
|
||||||
|
var clickActionTL by prefDelegate(
|
||||||
|
PreferKey.clickActionTL,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionTC by prefDelegate(
|
||||||
|
PreferKey.clickActionTC,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionTR by prefDelegate(
|
||||||
|
PreferKey.clickActionTR,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionML by prefDelegate(
|
||||||
|
PreferKey.clickActionML,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionMC by prefDelegate(
|
||||||
|
PreferKey.clickActionMC,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionMR by prefDelegate(
|
||||||
|
PreferKey.clickActionMR,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionBL by prefDelegate(
|
||||||
|
PreferKey.clickActionBL,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionBC by prefDelegate(
|
||||||
|
PreferKey.clickActionBC,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickActionBR by prefDelegate(
|
||||||
|
PreferKey.clickActionBR,
|
||||||
|
1
|
||||||
|
)
|
||||||
|
|
||||||
|
fun hasMenuClickArea(): Boolean {
|
||||||
|
return clickActionTL * clickActionTC * clickActionTR *
|
||||||
|
clickActionML * clickActionMC * clickActionMR *
|
||||||
|
clickActionBL * clickActionBC * clickActionBR == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun detectClickArea() {
|
||||||
|
if (!hasMenuClickArea()) {
|
||||||
|
clickActionMC = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
|
import io.legado.app.BuildConfig
|
||||||
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.ui.config.prefDelegate
|
||||||
|
import io.legado.app.ui.config.themeConfig.ThemeConfig
|
||||||
|
import io.legado.app.utils.isNightMode
|
||||||
|
import io.legado.app.utils.sysConfiguration
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染/布局相关配置
|
||||||
|
*
|
||||||
|
* 被 ChapterProvider、TextLine、ContentTextView、ReadView 在渲染循环中读取。
|
||||||
|
*/
|
||||||
|
object ReadRenderConfig {
|
||||||
|
|
||||||
|
val isEInkMode: Boolean
|
||||||
|
get() = ThemeConfig.appTheme == "4"
|
||||||
|
|
||||||
|
var isNightTheme: Boolean
|
||||||
|
get() = when (ThemeConfig.themeMode) {
|
||||||
|
"1" -> false
|
||||||
|
"2" -> true
|
||||||
|
else -> sysConfiguration.isNightMode
|
||||||
|
}
|
||||||
|
set(value) {
|
||||||
|
val newMode = if (value) "2" else "1"
|
||||||
|
if (ThemeConfig.themeMode != newMode) {
|
||||||
|
ThemeConfig.themeMode = newMode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val enableReview: Boolean
|
||||||
|
get() = BuildConfig.DEBUG && enableReviewPref
|
||||||
|
|
||||||
|
private var enableReviewPref by prefDelegate(
|
||||||
|
PreferKey.enableReview,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var useAntiAlias by prefDelegate(
|
||||||
|
PreferKey.antiAlias,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var systemTypefaces by prefDelegate(
|
||||||
|
PreferKey.systemTypefaces,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var doubleHorizontalPage by prefDelegate(
|
||||||
|
PreferKey.doublePageHorizontal,
|
||||||
|
"0"
|
||||||
|
)
|
||||||
|
|
||||||
|
var adaptSpecialStyle by prefDelegate(
|
||||||
|
PreferKey.adaptSpecialStyle,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var useUnderline by prefDelegate(
|
||||||
|
PreferKey.useUnderline,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var optimizeRender by prefDelegate(
|
||||||
|
PreferKey.optimizeRender,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var noAnimScrollPage by prefDelegate(
|
||||||
|
PreferKey.noAnimScrollPage,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var paddingDisplayCutouts by prefDelegate(
|
||||||
|
PreferKey.paddingDisplayCutouts,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var pageTouchSlop by prefDelegate(
|
||||||
|
PreferKey.pageTouchSlop,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var selectText by prefDelegate(
|
||||||
|
PreferKey.selectText,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var clickImgWay by prefDelegate(
|
||||||
|
PreferKey.clickImgWay,
|
||||||
|
"2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var chineseConverterType by prefDelegate(
|
||||||
|
PreferKey.chineseConverterType,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package io.legado.app.ui.config.readConfig
|
||||||
|
|
||||||
|
import io.legado.app.constant.PreferKey
|
||||||
|
import io.legado.app.ui.config.prefDelegate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TTS/朗读/音频相关配置
|
||||||
|
*
|
||||||
|
* 被 BaseReadAloudService、TTSReadAloudService、HttpReadAloudService 读取。
|
||||||
|
*/
|
||||||
|
object ReadTtsConfig {
|
||||||
|
|
||||||
|
private const val defaultSpeechRate = 5
|
||||||
|
|
||||||
|
val speechRatePlay: Int
|
||||||
|
get() = if (ttsFollowSys) defaultSpeechRate else ttsSpeechRate
|
||||||
|
|
||||||
|
var ttsEngine by prefDelegate<String?>(
|
||||||
|
PreferKey.ttsEngine,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
|
||||||
|
var ttsFollowSys by prefDelegate(
|
||||||
|
PreferKey.ttsFollowSys,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var ttsSpeechRate by prefDelegate(
|
||||||
|
PreferKey.ttsSpeechRate,
|
||||||
|
5
|
||||||
|
)
|
||||||
|
|
||||||
|
var ttsTimer by prefDelegate(
|
||||||
|
PreferKey.ttsTimer,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var ignoreAudioFocus by prefDelegate(
|
||||||
|
PreferKey.ignoreAudioFocus,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var pauseReadAloudWhilePhoneCalls by prefDelegate(
|
||||||
|
PreferKey.pauseReadAloudWhilePhoneCalls,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var readAloudWakeLock by prefDelegate(
|
||||||
|
PreferKey.readAloudWakeLock,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var mediaButtonPerNext by prefDelegate(
|
||||||
|
"mediaButtonPerNext",
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var readAloudByPage by prefDelegate(
|
||||||
|
PreferKey.readAloudByPage,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var systemMediaControlCompatibilityChange by prefDelegate(
|
||||||
|
PreferKey.systemMediaControlCompatibilityChange,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
|
var streamReadAloudAudio by prefDelegate(
|
||||||
|
PreferKey.streamReadAloudAudio,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
var contentSelectSpeakMod by prefDelegate(
|
||||||
|
PreferKey.contentSelectSpeakMod,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
var audioPreDownloadNum by prefDelegate(
|
||||||
|
PreferKey.audioPreDownloadNum,
|
||||||
|
10
|
||||||
|
)
|
||||||
|
|
||||||
|
var audioCacheCleanTimeOrgin by prefDelegate(
|
||||||
|
PreferKey.audioCacheCleanTime,
|
||||||
|
10
|
||||||
|
)
|
||||||
|
|
||||||
|
val audioCacheCleanTime: Long
|
||||||
|
get() = audioCacheCleanTimeOrgin * 60 * 1000L
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user