From c479adf950534656a623ae8682cb8d41a3947772 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Tue, 21 Mar 2023 14:30:00 +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 --- .../legado/app/ui/book/read/ReadBookActivity.kt | 3 +++ .../app/ui/book/read/page/ContentTextView.kt | 16 ++++++++++++---- .../io/legado/app/ui/book/read/page/PageView.kt | 4 ++-- .../ui/book/read/page/entities/TextChapter.kt | 13 ++++++++++++- .../app/ui/book/read/page/entities/TextPage.kt | 1 + .../book/searchContent/SearchContentActivity.kt | 12 +++++++----- 6 files changed, 37 insertions(+), 12 deletions(-) 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 11a59ae8c..6de0e7037 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 @@ -1014,6 +1014,9 @@ class ReadBookActivity : BaseReadBookActivity(), binding.searchMenu.invalidate() binding.searchMenu.invisible() binding.readView.isTextSelected = false + ReadBook.curTextChapter?.clearSearchResult() + ReadBook.prevTextChapter?.clearSearchResult() + ReadBook.nextTextChapter?.clearSearchResult() binding.readView.curPage.cancelSelect(true) } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt index 46dc2dacd..745eede7a 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt @@ -530,7 +530,8 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at val textPos = TextPos(0, 0, 0) for (relativePos in 0..last) { textPos.relativePagePos = relativePos - for ((lineIndex, textLine) in relativePage(relativePos).lines.withIndex()) { + val textPage = relativePage(relativePos) + for ((lineIndex, textLine) in textPage.lines.withIndex()) { textPos.lineIndex = lineIndex for ((charIndex, column) in textLine.columns.withIndex()) { textPos.columnIndex = charIndex @@ -539,6 +540,9 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at textPos.compare(selectStart) >= 0 && textPos.compare(selectEnd) <= 0 column.isSearchResult = column.selected && callBack.isSelectingSearchResult + if (column.isSearchResult) { + textPage.searchResult.add(column) + } } } } @@ -558,14 +562,18 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at } } - fun cancelSelect(fromSearchExit: Boolean = false) { + fun cancelSelect(clearSearchResult: Boolean = false) { val last = if (callBack.isScroll) 2 else 0 for (relativePos in 0..last) { - relativePage(relativePos).lines.forEach { textLine -> + val textPage = relativePage(relativePos) + textPage.lines.forEach { textLine -> textLine.columns.forEach { if (it is TextColumn) { it.selected = false - if (fromSearchExit) it.isSearchResult = false + if (clearSearchResult) { + it.isSearchResult = false + textPage.searchResult.remove(it) + } } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 7b549fc7a..67049d704 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -372,8 +372,8 @@ class PageView(context: Context) : FrameLayout(context) { binding.contentTextView.selectEndMoveIndex(relativePagePos, lineIndex, charIndex) } - fun cancelSelect(fromSearchExit: Boolean = false) { - binding.contentTextView.cancelSelect(fromSearchExit) + fun cancelSelect(clearSearchResult: Boolean = false) { + binding.contentTextView.cancelSelect(clearSearchResult) } fun createBookmark(): Bookmark? { 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 4bed6cd61..a44daeae0 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 @@ -126,4 +126,15 @@ data class TextChapter( } return pages.lastIndex } -} \ No newline at end of file + + fun clearSearchResult() { + pages.forEach { page -> + page.searchResult.forEach { + it.selected = false + it.isSearchResult = false + } + page.searchResult.clear() + } + } + +} 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 ea6e84a2d..f28bcc4ec 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 @@ -33,6 +33,7 @@ data class TextPage( val lines: List get() = textLines val lineSize: Int get() = textLines.size val charSize: Int get() = text.length + val searchResult = hashSetOf() var isMsgPage: Boolean = false fun addLine(line: TextLine) { 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 2d3f9cd70..7c8724232 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 @@ -52,11 +52,11 @@ class SearchContentActivity : binding.tvCurrentSearchInfo.setTextColor(btc) binding.ivSearchContentTop.setColorFilter(btc) binding.ivSearchContentBottom.setColorFilter(btc) - initSearchView() + val searchResultList = IntentData.get>("searchResultList") + val noSearchResult = searchResultList == null + initSearchView(!noSearchResult) initRecyclerView() initView() - val searchResultList = IntentData.get>("searchResultList") - val submit = searchResultList == null intent.getStringExtra("bookUrl")?.let { bookUrl -> viewModel.initBook(bookUrl) { searchResultList?.let { @@ -66,16 +66,17 @@ class SearchContentActivity : val position = intent.getIntExtra("searchResultIndex", 0) binding.recyclerView.scrollToPosition(position) } - initBook(submit) + initBook(noSearchResult) } } } - private fun initSearchView() { + private fun initSearchView(clearFocus: Boolean) { searchView.applyTint(primaryTextColor) searchView.onActionViewExpanded() searchView.isSubmitButtonEnabled = true searchView.queryHint = getString(R.string.search) + if (clearFocus) searchView.clearFocus() searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { startContentSearch(query.trim()) @@ -197,6 +198,7 @@ class SearchContentActivity : get() = viewModel.book?.isLocal == true override fun openSearchResult(searchResult: SearchResult, index: Int) { + searchJob?.cancel() postEvent(EventBus.SEARCH_RESULT, viewModel.searchResultList as List) val searchData = Intent() val key = System.currentTimeMillis()