This commit is contained in:
Horis
2023-03-21 14:30:00 +08:00
parent a4d2f4a0f7
commit c479adf950
6 changed files with 37 additions and 12 deletions

View File

@@ -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)
}
}

View File

@@ -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)
}
}
}
}

View File

@@ -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? {

View File

@@ -126,4 +126,15 @@ data class TextChapter(
}
return pages.lastIndex
}
}
fun clearSearchResult() {
pages.forEach { page ->
page.searchResult.forEach {
it.selected = false
it.isSearchResult = false
}
page.searchResult.clear()
}
}
}

View File

@@ -33,6 +33,7 @@ data class TextPage(
val lines: List<TextLine> get() = textLines
val lineSize: Int get() = textLines.size
val charSize: Int get() = text.length
val searchResult = hashSetOf<TextColumn>()
var isMsgPage: Boolean = false
fun addLine(line: TextLine) {

View File

@@ -52,11 +52,11 @@ class SearchContentActivity :
binding.tvCurrentSearchInfo.setTextColor(btc)
binding.ivSearchContentTop.setColorFilter(btc)
binding.ivSearchContentBottom.setColorFilter(btc)
initSearchView()
val searchResultList = IntentData.get<List<SearchResult>>("searchResultList")
val noSearchResult = searchResultList == null
initSearchView(!noSearchResult)
initRecyclerView()
initView()
val searchResultList = IntentData.get<List<SearchResult>>("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<SearchResult>)
val searchData = Intent()
val key = System.currentTimeMillis()