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