fix: 屏幕方向和屏幕超时设置切换后不立即生效

MoreConfigSheet 中屏幕方向和屏幕超时的变更只写入 DataStore,需经过
6 步异步传播(DataStore → Flow → ViewModel → Effect → Controller)
才能生效,导致:
- 切换横屏后文字显示不全,仍保持竖屏布局
- 目录不跟随横屏显示
- 屏幕超时设置延迟生效

修复:
- 新增 ReadBookIntent.SetOrientation 意图,直接写入 ReadConfig 并发射 Effect
- 将 ReadBookIntent.KeepLightChanged 改为带值的 data class,同理直接生效
- MoreConfigSheet 在写 DataStore 的同时同步调用 onIntent,立即应用变更
- 新增反向横屏(REVERSE_LANDSCAPE)选项
This commit is contained in:
HapeLee
2026-06-11 01:36:06 +08:00
parent 7d333f8b6c
commit aa16376dae
8 changed files with 19 additions and 2 deletions
@@ -425,7 +425,8 @@ sealed interface ReadBookIntent {
data class TextActionDict(val text: String) : ReadBookIntent
// Screen / selection config
data object KeepLightChanged : ReadBookIntent
data class KeepLightChanged(val value: String) : ReadBookIntent
data class SetOrientation(val value: String) : ReadBookIntent
data class TextSelectAbleChanged(val enabled: Boolean) : ReadBookIntent
// Media / TTS
@@ -35,6 +35,7 @@ import io.legado.app.domain.usecase.GetReadingProgressUseCase
import io.legado.app.domain.usecase.UploadReadingProgressUseCase
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.DefaultData
import io.legado.app.ui.config.readConfig.ReadConfig
import io.legado.app.help.book.BookHelp
import io.legado.app.help.book.ContentProcessor
import io.legado.app.help.book.isEpub
@@ -581,7 +582,15 @@ class ReadBookViewModel(
is ReadBookIntent.SaveMenuButtonConfig -> saveMenuButtonConfig(intent.items)
is ReadBookIntent.SaveTitleBarButtonConfig -> saveTitleBarButtonConfig(intent.items)
is ReadBookIntent.KeepLightChanged -> _effects.tryEmit(ReadBookEffect.UpScreenTimeOut)
is ReadBookIntent.KeepLightChanged -> {
ReadConfig.keepLight = intent.value
_readPreferences.update { it.copy(keepLight = intent.value) }
_effects.tryEmit(ReadBookEffect.UpScreenTimeOut)
}
is ReadBookIntent.SetOrientation -> {
ReadConfig.screenOrientation = intent.value
_effects.tryEmit(ReadBookEffect.SetOrientation)
}
is ReadBookIntent.TextSelectAbleChanged -> _effects.tryEmit(
ReadBookEffect.UpTextSelectAble(
intent.enabled
@@ -56,9 +56,11 @@ fun MoreConfigSheet(
ScreenSettings(
preferences = preferences,
onScreenOrientationChange = {
onIntent(ReadBookIntent.SetOrientation(it))
scope.launch { readSettingsRepository.setScreenOrientation(it) }
},
onKeepLightChange = {
onIntent(ReadBookIntent.KeepLightChanged(it))
scope.launch { readSettingsRepository.setKeepLight(it) }
},
onHideStatusBarChange = {