From 9494f9143088238f7e8c5c727e3c2ba1af623512 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 14 Aug 2022 20:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8E=E6=96=87=E5=AD=97=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=A4=84=E5=BC=80=E5=A7=8B=E6=9C=97=E8=AF=BB,=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/BaseReadAloudService.kt | 16 +++++--------- .../legado/app/ui/book/read/page/ReadView.kt | 10 +++++++-- .../ui/book/read/page/entities/TextChapter.kt | 21 +++++++++++++++++++ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt index fda71a8ce..17eef2848 100644 --- a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt @@ -123,19 +123,13 @@ abstract class BaseReadAloudService : BaseService(), nowSpeak = 0 readAloudNumber = textChapter.getReadLength(pageIndex) + startPos contentList.clear() - if (getPrefBoolean(PreferKey.readAloudByPage)) { - for (index in pageIndex..textChapter.lastIndex) { - textChapter.getPage(index)?.text?.split("\n")?.let { - contentList.addAll(it) + val readAloudByPage = getPrefBoolean(PreferKey.readAloudByPage) + textChapter.getNeedReadAloud(pageIndex, readAloudByPage, startPos) + .split("\n").forEach { text -> + if (text.isNotEmpty()) { + contentList.add(text) } } - } else { - textChapter.getUnRead(pageIndex).split("\n").forEach { - if (it.isNotEmpty()) { - contentList.add(it) - } - } - } if (play) play() } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 55ced3e0a..bd5e700fe 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -562,11 +562,17 @@ class ReadView(context: Context, attrs: AttributeSet) : * 从选择位置开始朗读 */ fun aloudStartSelect() { + //todo 未完成 val selectStartPos = curPage.selectStartPos + curPage.textPage.textLines.forEach { + + } if (selectStartPos.relativePagePos > 0) { - ReadBook.moveToNextPage() + if (!ReadBook.moveToNextPage()) { + ReadBook.moveToNextChapter(false) + } } - //TODO 未完成 + ReadAloud.play(context) } /** diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextChapter.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextChapter.kt index 0f7996bb7..3f21f8263 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextChapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextChapter.kt @@ -2,6 +2,7 @@ package io.legado.app.ui.book.read.page.entities import kotlin.math.min +@Suppress("unused") data class TextChapter( val position: Int, val title: String, @@ -85,6 +86,26 @@ data class TextChapter( return stringBuilder.toString() } + /** + * @return 需要朗读的文本列表 + * @param pageIndex 起始页 + * @param pageSplit 是否分页 + * @param startPos 从当前页什么地方开始朗读 + */ + fun getNeedReadAloud(pageIndex: Int, pageSplit: Boolean, startPos: Int): String { + //todo 未完成 + val stringBuilder = StringBuilder() + if (pages.isNotEmpty()) { + for (index in pageIndex..pages.lastIndex) { + stringBuilder.append(pages[index].text) + if (pageSplit && !stringBuilder.endsWith("\n")) { + stringBuilder.append("\n") + } + } + } + return stringBuilder.toString() + } + /** * @return 根据索引位置获取所在页 */