|
|
@@ -3,10 +3,10 @@ package io.legado.app.data.repository
|
|
|
import androidx.datastore.preferences.core.Preferences
|
|
|
import androidx.datastore.preferences.core.booleanPreferencesKey
|
|
|
import androidx.datastore.preferences.core.floatPreferencesKey
|
|
|
+import androidx.datastore.preferences.core.intPreferencesKey
|
|
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
|
|
import io.legado.app.constant.PreferKey
|
|
|
import io.legado.app.domain.gateway.ReadAloudSettingsGateway
|
|
|
-import io.legado.app.domain.gateway.ReadAloudSettingsUpdate
|
|
|
import io.legado.app.domain.model.PlaybackTimer
|
|
|
import io.legado.app.domain.model.settings.ReadAloudSettings
|
|
|
import io.legado.app.help.config.AppConfigStore
|
|
|
@@ -15,222 +15,120 @@ import io.legado.app.help.config.compatDsValue
|
|
|
import kotlinx.coroutines.flow.Flow
|
|
|
import kotlinx.coroutines.flow.map
|
|
|
|
|
|
-typealias ReadAloudPreferences = ReadAloudSettings
|
|
|
-
|
|
|
-class ReadAloudSettingsRepository(
|
|
|
- private val settingsRepository: SettingsRepository
|
|
|
-) : ReadAloudSettingsGateway {
|
|
|
+class ReadAloudSettingsRepository : ReadAloudSettingsGateway {
|
|
|
|
|
|
override val currentSettings: ReadAloudSettings
|
|
|
- get() = AppConfigStore.preferences.toReadAloudPreferences()
|
|
|
+ get() = AppConfigStore.preferences.toReadAloudSettings()
|
|
|
|
|
|
override val settings: Flow<ReadAloudSettings> = AppConfigStore.preferencesFlow
|
|
|
.map { preferences ->
|
|
|
- preferences.toReadAloudPreferences()
|
|
|
- }
|
|
|
- val preferences: Flow<ReadAloudPreferences> = settings
|
|
|
-
|
|
|
- override suspend fun update(update: ReadAloudSettingsUpdate) {
|
|
|
- when (update) {
|
|
|
- is ReadAloudSettingsUpdate.TtsEngine -> setTtsEngine(update.value)
|
|
|
- is ReadAloudSettingsUpdate.ParagraphInterval -> setTtsParagraphInterval(update.value)
|
|
|
- is ReadAloudSettingsUpdate.AudioCacheCleanTime -> setAudioCacheCleanTime(update.value)
|
|
|
- is ReadAloudSettingsUpdate.IgnoreAudioFocus -> setIgnoreAudioFocus(update.value)
|
|
|
- is ReadAloudSettingsUpdate.MediaButtonOnExit -> setMediaButtonOnExit(update.value)
|
|
|
- is ReadAloudSettingsUpdate.ReadAloudByMediaButton -> setReadAloudByMediaButton(update.value)
|
|
|
- is ReadAloudSettingsUpdate.PauseWhilePhoneCalls -> setPauseReadAloudWhilePhoneCalls(update.value)
|
|
|
- is ReadAloudSettingsUpdate.ReadAloudWakeLock -> setReadAloudWakeLock(update.value)
|
|
|
- is ReadAloudSettingsUpdate.MediaButtonPerNext -> setMediaButtonPerNext(update.value)
|
|
|
- is ReadAloudSettingsUpdate.ReadAloudByPage -> setReadAloudByPage(update.value)
|
|
|
- is ReadAloudSettingsUpdate.SystemMediaControlCompatibility ->
|
|
|
- setSystemMediaControlCompatibilityChange(update.value)
|
|
|
- is ReadAloudSettingsUpdate.StreamAudio -> setStreamReadAloudAudio(update.value)
|
|
|
- is ReadAloudSettingsUpdate.Timer -> setTtsTimer(update.value)
|
|
|
- is ReadAloudSettingsUpdate.FollowSystem -> setTtsFollowSys(update.value)
|
|
|
- is ReadAloudSettingsUpdate.SpeechRate -> setTtsSpeechRate(update.value)
|
|
|
- is ReadAloudSettingsUpdate.ContentSelectSpeakMode ->
|
|
|
- settingsRepository.putInt(PreferKey.contentSelectSpeakMod, update.value)
|
|
|
- is ReadAloudSettingsUpdate.AudioPreDownloadNum ->
|
|
|
- settingsRepository.putInt(PreferKey.audioPreDownloadNum, update.value)
|
|
|
- is ReadAloudSettingsUpdate.PreSynthesisConcurrency ->
|
|
|
- settingsRepository.putInt(PreferKey.ttsPreSynthesisConcurrency, update.value)
|
|
|
-
|
|
|
- is ReadAloudSettingsUpdate.CapsuleAutoCollapse ->
|
|
|
- settingsRepository.putBoolean(PreferKey.capsuleAutoCollapse, update.value)
|
|
|
+ preferences.toReadAloudSettings()
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setTtsEngine(value: String?) {
|
|
|
- AppConfigStore.putString(PreferKey.ttsEngine, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setTtsParagraphInterval(value: Int) {
|
|
|
- settingsRepository.putInt(PreferKey.ttsParagraphInterval, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setAudioCacheCleanTime(value: Int) {
|
|
|
- settingsRepository.putInt(PreferKey.audioCacheCleanTime, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setIgnoreAudioFocus(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.ignoreAudioFocus, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setMediaButtonOnExit(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.mediaButtonOnExit, value)
|
|
|
- }
|
|
|
+ val preferences: Flow<ReadAloudSettings> = settings
|
|
|
|
|
|
- suspend fun setReadAloudByMediaButton(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.readAloudByMediaButton, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setPauseReadAloudWhilePhoneCalls(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.pauseReadAloudWhilePhoneCalls, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setReadAloudWakeLock(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.readAloudWakeLock, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setShowReadAloudCapsule(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.showReadAloudCapsule, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setCapsulePosition(x: Float, y: Float) {
|
|
|
- settingsRepository.putFloat(Keys.CapsuleOffsetX.name, x)
|
|
|
- settingsRepository.putFloat(Keys.CapsuleOffsetY.name, y)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun resetCapsulePosition() = setCapsulePosition(0f, 0f)
|
|
|
-
|
|
|
- suspend fun setMediaButtonPerNext(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(KEY_MEDIA_BUTTON_PER_NEXT, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setReadAloudByPage(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.readAloudByPage, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setSystemMediaControlCompatibilityChange(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.systemMediaControlCompatibilityChange, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setStreamReadAloudAudio(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.streamReadAloudAudio, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setTtsTimer(value: Int) {
|
|
|
- val timer = PlaybackTimer.normalize(value)
|
|
|
- settingsRepository.putInt(PreferKey.ttsTimer, timer)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setTtsFollowSys(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.ttsFollowSys, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setTtsSpeechRate(value: Int) {
|
|
|
- settingsRepository.putInt(PreferKey.ttsSpeechRate, value.coerceIn(0, 80))
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setSpeechAnalysisMode(value: String) {
|
|
|
- settingsRepository.putString(PreferKey.speechAnalysisMode, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setUseMultiSpeaker(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.useMultiSpeaker, value)
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setDefaultInterface(value: String) {
|
|
|
- settingsRepository.putString(
|
|
|
- PreferKey.defaultReadAloudInterface,
|
|
|
- value.takeIf { it in AVAILABLE_INTERFACES } ?: DEFAULT_INTERFACE_CLASSIC,
|
|
|
- )
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setPreSynthesisConcurrency(value: Int) {
|
|
|
- settingsRepository.putInt(PreferKey.ttsPreSynthesisConcurrency, value.coerceIn(1, 8))
|
|
|
- }
|
|
|
-
|
|
|
- suspend fun setCapsuleAutoCollapse(value: Boolean) {
|
|
|
- settingsRepository.putBoolean(PreferKey.capsuleAutoCollapse, value)
|
|
|
- }
|
|
|
-
|
|
|
- private fun Preferences.toReadAloudPreferences(): ReadAloudPreferences {
|
|
|
- return ReadAloudPreferences(
|
|
|
- ttsEngine = compatDsString(PreferKey.ttsEngine),
|
|
|
- ttsParagraphInterval = compatDsValue(Keys.TtsParagraphInterval, 0),
|
|
|
- audioCacheCleanTime = compatDsValue(Keys.AudioCacheCleanTime, 10),
|
|
|
- ignoreAudioFocus = compatDsValue(Keys.IgnoreAudioFocus, false),
|
|
|
- mediaButtonOnExit = compatDsValue(Keys.MediaButtonOnExit, true),
|
|
|
- readAloudByMediaButton = compatDsValue(Keys.ReadAloudByMediaButton, false),
|
|
|
- pauseReadAloudWhilePhoneCalls = compatDsValue(Keys.PauseReadAloudWhilePhoneCalls, false),
|
|
|
- readAloudWakeLock = compatDsValue(Keys.ReadAloudWakeLock, false),
|
|
|
- showReadAloudCapsule = compatDsValue(Keys.ShowReadAloudCapsule, true),
|
|
|
- capsuleAutoCollapse = compatDsValue(Keys.CapsuleAutoCollapse, true),
|
|
|
- capsuleOffsetX = compatDsValue(Keys.CapsuleOffsetX, 0f),
|
|
|
- capsuleOffsetY = compatDsValue(Keys.CapsuleOffsetY, 0f),
|
|
|
- mediaButtonPerNext = compatDsValue(Keys.MediaButtonPerNext, false),
|
|
|
- readAloudByPage = compatDsValue(Keys.ReadAloudByPage, false),
|
|
|
- systemMediaControlCompatibilityChange =
|
|
|
- compatDsValue(Keys.SystemMediaControlCompatibilityChange, true),
|
|
|
- streamReadAloudAudio = compatDsValue(Keys.StreamReadAloudAudio, false),
|
|
|
- ttsTimer = PlaybackTimer.normalize(compatDsValue(Keys.TtsTimer, 0)),
|
|
|
- ttsFollowSys = compatDsValue(Keys.TtsFollowSys, true),
|
|
|
- ttsSpeechRate = compatDsValue(Keys.TtsSpeechRate, 5),
|
|
|
- speechAnalysisMode = compatDsValue(Keys.SpeechAnalysisMode, "rule"),
|
|
|
- useMultiSpeaker = compatDsValue(Keys.UseMultiSpeaker, true),
|
|
|
- defaultInterface = compatDsValue(Keys.DefaultInterface, DEFAULT_INTERFACE_CLASSIC),
|
|
|
- contentSelectSpeakMode = compatDsValue(Keys.ContentSelectSpeakMode, 0),
|
|
|
- audioPreDownloadNum = compatDsValue(Keys.AudioPreDownloadNum, 10),
|
|
|
- ttsPreSynthesisConcurrency = compatDsValue(Keys.PreSynthesisConcurrency, 3),
|
|
|
- )
|
|
|
- }
|
|
|
-
|
|
|
- private object Keys {
|
|
|
- val TtsParagraphInterval = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.ttsParagraphInterval
|
|
|
- )
|
|
|
- val AudioCacheCleanTime = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.audioCacheCleanTime
|
|
|
- )
|
|
|
- val IgnoreAudioFocus = booleanPreferencesKey(PreferKey.ignoreAudioFocus)
|
|
|
- val MediaButtonOnExit = booleanPreferencesKey(PreferKey.mediaButtonOnExit)
|
|
|
- val ReadAloudByMediaButton = booleanPreferencesKey(PreferKey.readAloudByMediaButton)
|
|
|
- val PauseReadAloudWhilePhoneCalls =
|
|
|
- booleanPreferencesKey(PreferKey.pauseReadAloudWhilePhoneCalls)
|
|
|
- val ReadAloudWakeLock = booleanPreferencesKey(PreferKey.readAloudWakeLock)
|
|
|
- val ShowReadAloudCapsule = booleanPreferencesKey(PreferKey.showReadAloudCapsule)
|
|
|
- val CapsuleAutoCollapse = booleanPreferencesKey(PreferKey.capsuleAutoCollapse)
|
|
|
- val CapsuleOffsetX = floatPreferencesKey("read_aloud_capsule_offset_x")
|
|
|
- val CapsuleOffsetY = floatPreferencesKey("read_aloud_capsule_offset_y")
|
|
|
- val MediaButtonPerNext = booleanPreferencesKey(KEY_MEDIA_BUTTON_PER_NEXT)
|
|
|
- val ReadAloudByPage = booleanPreferencesKey(PreferKey.readAloudByPage)
|
|
|
- val SystemMediaControlCompatibilityChange =
|
|
|
- booleanPreferencesKey(PreferKey.systemMediaControlCompatibilityChange)
|
|
|
- val StreamReadAloudAudio = booleanPreferencesKey(PreferKey.streamReadAloudAudio)
|
|
|
- val TtsTimer = androidx.datastore.preferences.core.intPreferencesKey(PreferKey.ttsTimer)
|
|
|
- val TtsFollowSys = booleanPreferencesKey(PreferKey.ttsFollowSys)
|
|
|
- val TtsSpeechRate = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.ttsSpeechRate
|
|
|
- )
|
|
|
- val SpeechAnalysisMode = stringPreferencesKey(PreferKey.speechAnalysisMode)
|
|
|
- val UseMultiSpeaker = booleanPreferencesKey(PreferKey.useMultiSpeaker)
|
|
|
- val DefaultInterface = stringPreferencesKey(PreferKey.defaultReadAloudInterface)
|
|
|
- val ContentSelectSpeakMode = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.contentSelectSpeakMod
|
|
|
- )
|
|
|
- val AudioPreDownloadNum = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.audioPreDownloadNum
|
|
|
- )
|
|
|
- val PreSynthesisConcurrency = androidx.datastore.preferences.core.intPreferencesKey(
|
|
|
- PreferKey.ttsPreSynthesisConcurrency
|
|
|
+ override suspend fun update(transform: (ReadAloudSettings) -> ReadAloudSettings) {
|
|
|
+ AppConfigStore.atomicUpdate(
|
|
|
+ read = Preferences::toReadAloudSettings,
|
|
|
+ toPrefMap = ReadAloudSettings::toPrefMap,
|
|
|
+ transform = transform,
|
|
|
)
|
|
|
}
|
|
|
|
|
|
companion object {
|
|
|
- const val KEY_MEDIA_BUTTON_PER_NEXT = "mediaButtonPerNext"
|
|
|
const val DEFAULT_INTERFACE_CLASSIC = "classic"
|
|
|
const val DEFAULT_INTERFACE_PLAYER = "player"
|
|
|
val AVAILABLE_INTERFACES = setOf(DEFAULT_INTERFACE_CLASSIC, DEFAULT_INTERFACE_PLAYER)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+internal fun Preferences.toReadAloudSettings(): ReadAloudSettings = ReadAloudSettings(
|
|
|
+ ttsEngine = compatDsString(PreferKey.ttsEngine),
|
|
|
+ ttsParagraphInterval = compatDsValue(ReadAloudKeys.TtsParagraphInterval, 0),
|
|
|
+ audioCacheCleanTime = compatDsValue(ReadAloudKeys.AudioCacheCleanTime, 10),
|
|
|
+ ignoreAudioFocus = compatDsValue(ReadAloudKeys.IgnoreAudioFocus, false),
|
|
|
+ mediaButtonOnExit = compatDsValue(ReadAloudKeys.MediaButtonOnExit, true),
|
|
|
+ readAloudByMediaButton = compatDsValue(ReadAloudKeys.ReadAloudByMediaButton, false),
|
|
|
+ pauseReadAloudWhilePhoneCalls =
|
|
|
+ compatDsValue(ReadAloudKeys.PauseReadAloudWhilePhoneCalls, false),
|
|
|
+ readAloudWakeLock = compatDsValue(ReadAloudKeys.ReadAloudWakeLock, false),
|
|
|
+ showReadAloudCapsule = compatDsValue(ReadAloudKeys.ShowReadAloudCapsule, true),
|
|
|
+ capsuleAutoCollapse = compatDsValue(ReadAloudKeys.CapsuleAutoCollapse, true),
|
|
|
+ capsuleOffsetX = compatDsValue(ReadAloudKeys.CapsuleOffsetX, 0f),
|
|
|
+ capsuleOffsetY = compatDsValue(ReadAloudKeys.CapsuleOffsetY, 0f),
|
|
|
+ mediaButtonPerNext = compatDsValue(ReadAloudKeys.MediaButtonPerNext, false),
|
|
|
+ readAloudByPage = compatDsValue(ReadAloudKeys.ReadAloudByPage, false),
|
|
|
+ systemMediaControlCompatibilityChange =
|
|
|
+ compatDsValue(ReadAloudKeys.SystemMediaControlCompatibilityChange, true),
|
|
|
+ streamReadAloudAudio = compatDsValue(ReadAloudKeys.StreamReadAloudAudio, false),
|
|
|
+ ttsTimer = PlaybackTimer.normalize(compatDsValue(ReadAloudKeys.TtsTimer, 0)),
|
|
|
+ ttsFollowSys = compatDsValue(ReadAloudKeys.TtsFollowSys, true),
|
|
|
+ ttsSpeechRate = compatDsValue(ReadAloudKeys.TtsSpeechRate, 5),
|
|
|
+ speechAnalysisMode = compatDsValue(ReadAloudKeys.SpeechAnalysisMode, "rule"),
|
|
|
+ useMultiSpeaker = compatDsValue(ReadAloudKeys.UseMultiSpeaker, true),
|
|
|
+ defaultInterface = compatDsValue(
|
|
|
+ ReadAloudKeys.DefaultInterface,
|
|
|
+ ReadAloudSettingsRepository.DEFAULT_INTERFACE_CLASSIC,
|
|
|
+ ),
|
|
|
+ contentSelectSpeakMode = compatDsValue(ReadAloudKeys.ContentSelectSpeakMode, 0),
|
|
|
+ audioPreDownloadNum = compatDsValue(ReadAloudKeys.AudioPreDownloadNum, 10),
|
|
|
+ ttsPreSynthesisConcurrency = compatDsValue(ReadAloudKeys.PreSynthesisConcurrency, 3),
|
|
|
+)
|
|
|
+
|
|
|
+internal fun ReadAloudSettings.toPrefMap(): Map<String, Any?> = mapOf(
|
|
|
+ PreferKey.ttsEngine to ttsEngine,
|
|
|
+ PreferKey.ttsParagraphInterval to ttsParagraphInterval,
|
|
|
+ PreferKey.audioCacheCleanTime to audioCacheCleanTime,
|
|
|
+ PreferKey.ignoreAudioFocus to ignoreAudioFocus,
|
|
|
+ PreferKey.mediaButtonOnExit to mediaButtonOnExit,
|
|
|
+ PreferKey.readAloudByMediaButton to readAloudByMediaButton,
|
|
|
+ PreferKey.pauseReadAloudWhilePhoneCalls to pauseReadAloudWhilePhoneCalls,
|
|
|
+ PreferKey.readAloudWakeLock to readAloudWakeLock,
|
|
|
+ PreferKey.showReadAloudCapsule to showReadAloudCapsule,
|
|
|
+ PreferKey.capsuleAutoCollapse to capsuleAutoCollapse,
|
|
|
+ ReadAloudKeys.CapsuleOffsetX.name to capsuleOffsetX,
|
|
|
+ ReadAloudKeys.CapsuleOffsetY.name to capsuleOffsetY,
|
|
|
+ MEDIA_BUTTON_PER_NEXT to mediaButtonPerNext,
|
|
|
+ PreferKey.readAloudByPage to readAloudByPage,
|
|
|
+ PreferKey.systemMediaControlCompatibilityChange to systemMediaControlCompatibilityChange,
|
|
|
+ PreferKey.streamReadAloudAudio to streamReadAloudAudio,
|
|
|
+ PreferKey.ttsTimer to ttsTimer,
|
|
|
+ PreferKey.ttsFollowSys to ttsFollowSys,
|
|
|
+ PreferKey.ttsSpeechRate to ttsSpeechRate,
|
|
|
+ PreferKey.speechAnalysisMode to speechAnalysisMode,
|
|
|
+ PreferKey.useMultiSpeaker to useMultiSpeaker,
|
|
|
+ PreferKey.defaultReadAloudInterface to defaultInterface,
|
|
|
+ PreferKey.contentSelectSpeakMod to contentSelectSpeakMode,
|
|
|
+ PreferKey.audioPreDownloadNum to audioPreDownloadNum,
|
|
|
+ PreferKey.ttsPreSynthesisConcurrency to ttsPreSynthesisConcurrency,
|
|
|
+)
|
|
|
+
|
|
|
+private const val MEDIA_BUTTON_PER_NEXT = "mediaButtonPerNext"
|
|
|
+
|
|
|
+private object ReadAloudKeys {
|
|
|
+ val TtsParagraphInterval = intPreferencesKey(PreferKey.ttsParagraphInterval)
|
|
|
+ val AudioCacheCleanTime = intPreferencesKey(PreferKey.audioCacheCleanTime)
|
|
|
+ val IgnoreAudioFocus = booleanPreferencesKey(PreferKey.ignoreAudioFocus)
|
|
|
+ val MediaButtonOnExit = booleanPreferencesKey(PreferKey.mediaButtonOnExit)
|
|
|
+ val ReadAloudByMediaButton = booleanPreferencesKey(PreferKey.readAloudByMediaButton)
|
|
|
+ val PauseReadAloudWhilePhoneCalls =
|
|
|
+ booleanPreferencesKey(PreferKey.pauseReadAloudWhilePhoneCalls)
|
|
|
+ val ReadAloudWakeLock = booleanPreferencesKey(PreferKey.readAloudWakeLock)
|
|
|
+ val ShowReadAloudCapsule = booleanPreferencesKey(PreferKey.showReadAloudCapsule)
|
|
|
+ val CapsuleAutoCollapse = booleanPreferencesKey(PreferKey.capsuleAutoCollapse)
|
|
|
+ val CapsuleOffsetX = floatPreferencesKey("read_aloud_capsule_offset_x")
|
|
|
+ val CapsuleOffsetY = floatPreferencesKey("read_aloud_capsule_offset_y")
|
|
|
+ val MediaButtonPerNext = booleanPreferencesKey(MEDIA_BUTTON_PER_NEXT)
|
|
|
+ val ReadAloudByPage = booleanPreferencesKey(PreferKey.readAloudByPage)
|
|
|
+ val SystemMediaControlCompatibilityChange =
|
|
|
+ booleanPreferencesKey(PreferKey.systemMediaControlCompatibilityChange)
|
|
|
+ val StreamReadAloudAudio = booleanPreferencesKey(PreferKey.streamReadAloudAudio)
|
|
|
+ val TtsTimer = intPreferencesKey(PreferKey.ttsTimer)
|
|
|
+ val TtsFollowSys = booleanPreferencesKey(PreferKey.ttsFollowSys)
|
|
|
+ val TtsSpeechRate = intPreferencesKey(PreferKey.ttsSpeechRate)
|
|
|
+ val SpeechAnalysisMode = stringPreferencesKey(PreferKey.speechAnalysisMode)
|
|
|
+ val UseMultiSpeaker = booleanPreferencesKey(PreferKey.useMultiSpeaker)
|
|
|
+ val DefaultInterface = stringPreferencesKey(PreferKey.defaultReadAloudInterface)
|
|
|
+ val ContentSelectSpeakMode = intPreferencesKey(PreferKey.contentSelectSpeakMod)
|
|
|
+ val AudioPreDownloadNum = intPreferencesKey(PreferKey.audioPreDownloadNum)
|
|
|
+ val PreSynthesisConcurrency = intPreferencesKey(PreferKey.ttsPreSynthesisConcurrency)
|
|
|
+}
|