From 1ed159b016c843dc198e51efcf5de4817f092a79 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Thu, 13 Nov 2025 19:14:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E6=96=87=E6=90=9C=E7=B4=A2=E7=99=BE?= =?UTF-8?q?=E5=88=86=E6=AF=94=20#300?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../searchContent/SearchContentActivity.kt | 12 ++- .../searchContent/SearchContentAdapter.kt | 8 ++ .../app/ui/book/searchContent/SearchResult.kt | 3 +- app/src/main/res/layout/item_search_list.xml | 81 ++++++++++++------- 4 files changed, 73 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt index 0b954fdf6..2a8790843 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentActivity.kt @@ -211,13 +211,23 @@ class SearchContentActivity : kotlin.runCatching { appDb.bookChapterDao.getChapterList(viewModel.bookUrl).forEach { bookChapter -> ensureActive() + val totalChapters = viewModel.book?.totalChapterNum + ?: appDb.bookChapterDao.getChapterCount(viewModel.bookUrl) + val searchResults = if (isLocalBook || viewModel.cacheChapterNames.contains(bookChapter.getFileName()) ) { - viewModel.searchChapter(query, bookChapter) + viewModel.searchChapter(query, bookChapter).map { result -> + if (totalChapters > 0) { + result.copy(progressPercent = (bookChapter.index + 1).toFloat() / totalChapters * 100f) + } else { + result + } + } } else { return@forEach } + ensureActive() if (searchResults.isNotEmpty()) { viewModel.searchResultList.addAll(searchResults) diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt index c1440ab42..1e37b9996 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentAdapter.kt @@ -2,6 +2,7 @@ package io.legado.app.ui.book.searchContent import android.content.Context import android.view.ViewGroup +import androidx.core.view.isVisible import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.databinding.ItemSearchListBinding @@ -31,6 +32,13 @@ class SearchContentAdapter(context: Context, val callback: Callback) : tvTitle.text = item.getTitleSpannable(textColorInt) tvContent.text = item.getContentSpannable(textColorInt, accentColorInt, bgColorInt) + if (item.progressPercent > 0) { + cdCount.isVisible = true + tvCount.text = String.format("%.1f%%", item.progressPercent) + } else { + tvCount.isVisible = false + } + cdRoot.setCardBackgroundColor( if (isDur) context.themeColor(com.google.android.material.R.attr.colorSurfaceContainer) else context.themeColor(com.google.android.material.R.attr.colorSurface) diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt index efbfbfd7a..25f35bc7e 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt @@ -20,7 +20,8 @@ data class SearchResult( val chapterIndex: Int = 0, val pageIndex: Int = 0, val queryIndexInResult: Int = 0, - val queryIndexInChapter: Int = 0 + val queryIndexInChapter: Int = 0, + val progressPercent: Float = 0f ) { fun getTitleSpannable(accentColor: Int): SpannableString { diff --git a/app/src/main/res/layout/item_search_list.xml b/app/src/main/res/layout/item_search_list.xml index b7ff6d2bf..8c18684c9 100644 --- a/app/src/main/res/layout/item_search_list.xml +++ b/app/src/main/res/layout/item_search_list.xml @@ -1,45 +1,68 @@ - - - + android:layout_height="wrap_content"> - + + + + android:includeFontPadding="false" + tools:text="5" + tools:ignore="SmallSp" /> - + - + - + + + - - \ No newline at end of file