From fd5e2180751b2e5bb0ffd7aa7f36c60dc402143f Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Mon, 13 Oct 2025 22:16:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=8A=E6=B8=B8=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=E6=84=9F=E8=B0=A2=20@821938089?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legato/kazusa/help/book/BookExtensions.kt | 2 +- .../java/io/legato/kazusa/model/AudioPlay.kt | 3 +++ .../io/legato/kazusa/service/WebService.kt | 2 +- .../kazusa/ui/book/info/BookInfoActivity.kt | 4 +++- .../kazusa/ui/book/read/ReadBookActivity.kt | 18 ++++++++++++++---- .../kazusa/ui/book/read/TextActionMenu.kt | 9 +++++++-- .../kazusa/ui/book/read/page/ReadView.kt | 5 +++-- .../kazusa/ui/book/search/SearchActivity.kt | 3 ++- .../books/styleDefalut/BaseBooksAdapter.kt | 2 ++ .../io/legato/kazusa/utils/FlowExtensions.kt | 10 +++++++--- 10 files changed, 43 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legato/kazusa/help/book/BookExtensions.kt b/app/src/main/java/io/legato/kazusa/help/book/BookExtensions.kt index 20723d2bd..c650a6658 100644 --- a/app/src/main/java/io/legato/kazusa/help/book/BookExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/help/book/BookExtensions.kt @@ -273,7 +273,7 @@ fun Book.updateTo(newBook: Book): Book { newBook.hasVariable(it) } newBook.variableMap.putAll(variableMap) - newBook.variable = GSON.toJson(variableMap) + newBook.variable = GSON.toJson(newBook.variableMap) return newBook } diff --git a/app/src/main/java/io/legato/kazusa/model/AudioPlay.kt b/app/src/main/java/io/legato/kazusa/model/AudioPlay.kt index 0d17fb651..632cea6c1 100644 --- a/app/src/main/java/io/legato/kazusa/model/AudioPlay.kt +++ b/app/src/main/java/io/legato/kazusa/model/AudioPlay.kt @@ -78,6 +78,7 @@ object AudioPlay : CoroutineScope by MainScope() { chapterSize } if (durChapterIndex != book.durChapterIndex) { + stopPlay() durChapterIndex = book.durChapterIndex durChapterPos = book.durChapterPos durPlayUrl = "" @@ -152,6 +153,8 @@ object AudioPlay : CoroutineScope by MainScope() { }.onError { AppLog.put("获取资源链接出错\n$it", it, true) upLoading(false) + }.onCancel { + removeLoading(index) }.onFinally { removeLoading(index) } diff --git a/app/src/main/java/io/legato/kazusa/service/WebService.kt b/app/src/main/java/io/legato/kazusa/service/WebService.kt index 57778df53..e191528db 100644 --- a/app/src/main/java/io/legato/kazusa/service/WebService.kt +++ b/app/src/main/java/io/legato/kazusa/service/WebService.kt @@ -61,7 +61,7 @@ class WebService : BaseService() { private val useWakeLock = appCtx.getPrefBoolean(PreferKey.webServiceWakeLock, false) private val wakeLock: PowerManager.WakeLock by lazy { - powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:webService") + powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:WebService") .apply { setReferenceCounted(false) } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt index 06978a16e..073d2ebb6 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/info/BookInfoActivity.kt @@ -853,7 +853,9 @@ class BookInfoActivity : viewModel.bookSource?.getKey() -> viewModel.bookSource?.setVariable(variable) viewModel.bookData.value?.bookUrl -> viewModel.bookData.value?.let { it.putCustomVariable(variable) - viewModel.saveBook(it) + if (viewModel.inBookshelf) { + viewModel.saveBook(it) + } } } } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt index ceaa51e7e..4ed37fdc0 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt @@ -1386,8 +1386,13 @@ class ReadBookActivity : BaseReadBookActivity(), ReadAloud.upReadAloudClass() val scrollPageAnim = ReadBook.pageAnim() == 3 if (scrollPageAnim) { - val startPos = binding.readView.getCurPagePosition() - ReadBook.readAloud(startPos = startPos) + val line = binding.readView.getCurVisibleFirstLine() + if (line != null) { + ReadBook.durChapterPos = line.chapterPosition + ReadBook.readAloud(startPos = line.pagePosition) + } else { + ReadBook.readAloud() + } } else { ReadBook.readAloud() } @@ -1397,8 +1402,13 @@ class ReadBookActivity : BaseReadBookActivity(), val scrollPageAnim = ReadBook.pageAnim() == 3 if (scrollPageAnim && pageChanged) { pageChanged = false - val startPos = binding.readView.getCurPagePosition() - ReadBook.readAloud(startPos = startPos) + val line = binding.readView.getCurVisibleFirstLine() + if (line != null) { + ReadBook.durChapterPos = line.chapterPosition + ReadBook.readAloud(startPos = line.pagePosition) + } else { + ReadBook.readAloud() + } } else { ReadAloud.resume(this) } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt index 18b4b599c..16b8695f5 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/TextActionMenu.kt @@ -31,6 +31,7 @@ import io.legato.kazusa.utils.share import io.legato.kazusa.utils.toastOnUi import io.legato.kazusa.utils.visible import androidx.core.net.toUri +import io.legato.kazusa.constant.AppLog @SuppressLint("RestrictedApi") class TextActionMenu(private val context: Context, private val callBack: CallBack) : @@ -218,8 +219,12 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac } else -> item.intent?.let { - it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) - context.startActivity(it) + kotlin.runCatching { + it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) + context.startActivity(it) + }.onFailure { e -> + AppLog.put("执行文本菜单操作出错\n$e", e, true) + } } } } diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/page/ReadView.kt index 5ac379e76..90719e628 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/page/ReadView.kt @@ -29,6 +29,7 @@ import io.legato.kazusa.ui.book.read.page.delegate.SimulationPageDelegate import io.legato.kazusa.ui.book.read.page.delegate.SlidePageDelegate import io.legato.kazusa.ui.book.read.page.entities.PageDirection import io.legato.kazusa.ui.book.read.page.entities.TextChapter +import io.legato.kazusa.ui.book.read.page.entities.TextLine import io.legato.kazusa.ui.book.read.page.entities.TextPage import io.legato.kazusa.ui.book.read.page.entities.TextPos import io.legato.kazusa.ui.book.read.page.entities.column.TextColumn @@ -672,8 +673,8 @@ class ReadView(context: Context, attrs: AttributeSet) : return curPage.getCurVisiblePage() } - fun getCurPagePosition(): Int { - return curPage.getCurVisibleFirstLine()?.pagePosition ?: 0 + fun getCurVisibleFirstLine(): TextLine? { + return curPage.getCurVisibleFirstLine() } fun invalidateTextPage() { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt index d270f1855..7c4286599 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt @@ -293,7 +293,8 @@ class SearchActivity : VMBaseActivity(context: Context) : DiffRecyclerAdapter(context) { + override val keepScrollPosition = true + override val diffItemCallback: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() { diff --git a/app/src/main/java/io/legato/kazusa/utils/FlowExtensions.kt b/app/src/main/java/io/legato/kazusa/utils/FlowExtensions.kt index b8b1eb71c..723517033 100644 --- a/app/src/main/java/io/legato/kazusa/utils/FlowExtensions.kt +++ b/app/src/main/java/io/legato/kazusa/utils/FlowExtensions.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.filterNotNull -import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flatMapMerge import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map @@ -198,7 +198,9 @@ fun Flow.flowWithLifecycleFirst( minActiveState: Lifecycle.State = Lifecycle.State.STARTED ): Flow = callbackFlow { if (!lifecycle.currentState.isAtLeast(minActiveState)) { - send(first()) + firstOrNull()?.let { + send(it) + } } lifecycle.repeatOnLifecycle(minActiveState) { this@flowWithLifecycleFirst.collect { @@ -244,7 +246,9 @@ fun Flow.flowWithLifecycleAndDatabaseChangeFirst( .onEach { update++ } .produceIn(this) if (!isActive) { - send(first()) + firstOrNull()?.let { + send(it) + } } lifecycle.repeatOnLifecycle(minActiveState) { if (update == 0) {