mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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? {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user