fix: 修复朗读退出行为及从选择位置朗读崩溃,CloseReadBook 支持 keepReadAloud
This commit is contained in:
@@ -14,7 +14,9 @@ import io.legado.app.data.entities.HighlightRule
|
||||
import io.legado.app.data.entities.HttpTTS
|
||||
import io.legado.app.ui.book.read.page.entities.TextChapter
|
||||
import io.legado.app.ui.book.read.page.entities.TextPage
|
||||
import io.legado.app.ui.book.read.page.entities.TextPos
|
||||
import io.legado.app.ui.book.searchContent.SearchResult
|
||||
import io.legado.app.ui.widget.components.importComponents.BaseImportUiState
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.ImmutableMap
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
@@ -140,6 +142,7 @@ data class ReadBookUiState(
|
||||
val selectedTtsEngine: String? = null,
|
||||
val speakEngineName: String = "",
|
||||
val editingHttpTts: HttpTTS? = null,
|
||||
val httpTtsImportState: BaseImportUiState<HttpTTS> = BaseImportUiState.Idle,
|
||||
val preDownloadNum: Int = 10,
|
||||
val audioCacheCleanTime: Int = 10,
|
||||
// Read aloud config
|
||||
@@ -430,7 +433,7 @@ sealed interface ReadBookIntent {
|
||||
|
||||
// Default font picker (needs Activity for AlertDialog)
|
||||
// Text action menu (moved from Activity)
|
||||
data class TextActionAloud(val text: String) : ReadBookIntent
|
||||
data class TextActionAloud(val text: String, val selectStartPos: TextPos?) : ReadBookIntent
|
||||
data class TextActionBookmark(val bookmark: Bookmark) : ReadBookIntent
|
||||
data class TextActionReplace(val text: String) : ReadBookIntent
|
||||
data class TextActionSearchContent(val text: String) : ReadBookIntent
|
||||
@@ -467,7 +470,13 @@ sealed interface ReadBookIntent {
|
||||
data class ImportHttpTtsSource(val text: String) : ReadBookIntent
|
||||
data object ImportHttpTtsFile : ReadBookIntent
|
||||
data class ImportHttpTtsFileSelected(val uri: Uri) : ReadBookIntent
|
||||
data object CancelHttpTtsImport : ReadBookIntent
|
||||
data class ToggleHttpTtsImportSelection(val index: Int) : ReadBookIntent
|
||||
data class ToggleHttpTtsImportAll(val isSelected: Boolean) : ReadBookIntent
|
||||
data class UpdateHttpTtsImportItem(val index: Int, val httpTTS: HttpTTS) : ReadBookIntent
|
||||
data object SaveImportedHttpTts : ReadBookIntent
|
||||
data object ExportAllHttpTts : ReadBookIntent
|
||||
data object ExportAllHttpTtsAsUrl : ReadBookIntent
|
||||
data class ExportHttpTtsToFile(val uri: Uri) : ReadBookIntent
|
||||
data class SetReadAloudIgnoreAudioFocus(val value: Boolean) : ReadBookIntent
|
||||
data class SetReadAloudPauseOnPhoneCall(val value: Boolean) : ReadBookIntent
|
||||
@@ -510,7 +519,7 @@ sealed interface ReadBookIntent {
|
||||
data object OnResume : ReadBookIntent
|
||||
data object OnPause : ReadBookIntent
|
||||
data object OnDispose : ReadBookIntent
|
||||
data object CloseReadBook : ReadBookIntent
|
||||
data class CloseReadBook(val keepReadAloud: Boolean = false) : ReadBookIntent
|
||||
data object OpenBooksDirPicker : ReadBookIntent
|
||||
data class BooksDirSelected(val uri: Uri) : ReadBookIntent
|
||||
}
|
||||
@@ -593,7 +602,7 @@ sealed interface ReadBookEffect {
|
||||
data class SyncBookProgress(val book: Book) : ReadBookEffect
|
||||
|
||||
// Text action menu (needs Activity for View operations)
|
||||
data object TextActionAloudSelect : ReadBookEffect
|
||||
data class TextActionAloudSelect(val selectStartPos: TextPos) : ReadBookEffect
|
||||
data class TextActionSpeak(val text: String) : ReadBookEffect
|
||||
data class TextActionReplace(val text: String, val bookName: String?, val bookSourceUrl: String?) : ReadBookEffect
|
||||
|
||||
|
||||
@@ -535,7 +535,12 @@ class ReadBookController(
|
||||
override fun onMenuItemSelected(itemId: Int): Boolean {
|
||||
when (itemId) {
|
||||
R.id.menu_aloud -> {
|
||||
viewModel.onIntent(ReadBookIntent.TextActionAloud(selectedText))
|
||||
viewModel.onIntent(
|
||||
ReadBookIntent.TextActionAloud(
|
||||
selectedText,
|
||||
refs?.readView?.curPage?.selectStartPos?.copy(),
|
||||
)
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -715,7 +720,9 @@ class ReadBookController(
|
||||
is ReadBookEffect.ToggleAutoPage -> onToggleAutoPage?.invoke() ?: toggleAutoPage()
|
||||
is ReadBookEffect.StopAutoPage -> onStopAutoPage?.invoke() ?: stopAutoPage()
|
||||
is ReadBookEffect.TextActionAloudSelect -> {
|
||||
activity.lifecycleScope.launch { refs?.readView?.aloudStartSelect() }
|
||||
activity.lifecycleScope.launch {
|
||||
refs?.readView?.aloudStartSelect(effect.selectStartPos.copy())
|
||||
}
|
||||
}
|
||||
|
||||
is ReadBookEffect.TextActionSpeak -> speak(effect.text)
|
||||
|
||||
@@ -59,7 +59,7 @@ fun ReadBookScreen(
|
||||
state.isShowingSearchResult -> onIntent(ReadBookIntent.ExitSearch)
|
||||
state.menuVisible -> onIntent(ReadBookIntent.ReadMenuBack)
|
||||
state.isAutoPage -> onIntent(ReadBookIntent.StopAutoPage)
|
||||
else -> onIntent(ReadBookIntent.CloseReadBook)
|
||||
else -> onIntent(ReadBookIntent.CloseReadBook())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -658,8 +658,7 @@ class ReadView(
|
||||
/**
|
||||
* 从选择位置开始朗读
|
||||
*/
|
||||
suspend fun aloudStartSelect() {
|
||||
val selectStartPos = curPage.selectStartPos
|
||||
suspend fun aloudStartSelect(selectStartPos: TextPos) {
|
||||
var pagePos = selectStartPos.relativePagePos
|
||||
val line = selectStartPos.lineIndex
|
||||
val column = selectStartPos.columnIndex
|
||||
|
||||
Reference in New Issue
Block a user