From 2d7e3cfe04aad262731abb87b939d8984dc0f4a0 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Thu, 22 Feb 2024 18:35:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/model/ReadBook.kt | 17 +++++++++++++++-- .../legado/app/ui/book/read/ReadBookActivity.kt | 5 +---- .../app/ui/book/read/ReadBookViewModel.kt | 11 +---------- .../app/ui/book/read/page/entities/TextPage.kt | 14 ++++++++++++++ 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index f0b144b27..796cb9b1a 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -294,14 +294,27 @@ object ReadBook : CoroutineScope by MainScope() { curPageChanged(true) } + fun openChapter(index: Int, durChapterPos: Int = 0, success: (() -> Unit)? = null) { + if (index < chapterSize) { + clearTextChapter() + callBack?.upContent() + durChapterIndex = index + ReadBook.durChapterPos = durChapterPos + saveRead() + loadContent(resetPageOffset = true) { + success?.invoke() + } + } + } + /** * 当前页面变化 */ - private fun curPageChanged(pauseReadAloud: Boolean = false) { + private fun curPageChanged(pageChanged: Boolean = false) { callBack?.pageChanged() if (BaseReadAloudService.isRun) { val scrollPageAnim = pageAnim() == 3 - if (scrollPageAnim && pauseReadAloud) { + if (scrollPageAnim && pageChanged) { ReadAloud.pause(appCtx) } else { readAloud(!BaseReadAloudService.pause) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 33bad1ffa..e84901a42 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -1381,11 +1381,8 @@ class ReadBookActivity : BaseReadBookActivity(), override fun onLayoutPageCompleted(index: Int, page: TextPage) { upSeekBarThrottle.invoke() if (upContent) { - val line = page.lines.first() val durChapterPos = ReadBook.durChapterPos - val startPos = line.chapterPosition - val endPos = startPos + line.charSize - if (durChapterPos in startPos.. Unit)? = null) { - if (index < ReadBook.chapterSize) { - ReadBook.clearTextChapter() - ReadBook.callBack?.upContent() - ReadBook.durChapterIndex = index - ReadBook.durChapterPos = durChapterPos - ReadBook.saveRead() - ReadBook.loadContent(resetPageOffset = true) { - success?.invoke() - } - } + ReadBook.openChapter(index, durChapterPos, success) } fun removeFromBookshelf(success: (() -> Unit)?) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt index 9867dcb5f..a787933a2 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextPage.kt @@ -47,6 +47,7 @@ data class TextPage( var doublePage = false var paddingTop = 0 var isCompleted = false + @JvmField var textChapter = emptyTextChapter val pageSize get() = textChapter.pageSize @@ -256,6 +257,19 @@ data class TextPage( return textChapter } + /** + * 判断章节字符位置是否在这一页中 + * + * @param chapterPos 章节字符位置 + * @return + */ + fun containPos(chapterPos: Int): Boolean { + val line = lines.first() + val startPos = line.chapterPosition + val endPos = startPos + charSize + return chapterPos in startPos..