优化
This commit is contained in:
@@ -1014,6 +1014,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
|||||||
binding.searchMenu.invalidate()
|
binding.searchMenu.invalidate()
|
||||||
binding.searchMenu.invisible()
|
binding.searchMenu.invisible()
|
||||||
binding.readView.isTextSelected = false
|
binding.readView.isTextSelected = false
|
||||||
|
ReadBook.curTextChapter?.clearSearchResult()
|
||||||
|
ReadBook.prevTextChapter?.clearSearchResult()
|
||||||
|
ReadBook.nextTextChapter?.clearSearchResult()
|
||||||
binding.readView.curPage.cancelSelect(true)
|
binding.readView.curPage.cancelSelect(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -530,7 +530,8 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
val textPos = TextPos(0, 0, 0)
|
val textPos = TextPos(0, 0, 0)
|
||||||
for (relativePos in 0..last) {
|
for (relativePos in 0..last) {
|
||||||
textPos.relativePagePos = relativePos
|
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
|
textPos.lineIndex = lineIndex
|
||||||
for ((charIndex, column) in textLine.columns.withIndex()) {
|
for ((charIndex, column) in textLine.columns.withIndex()) {
|
||||||
textPos.columnIndex = charIndex
|
textPos.columnIndex = charIndex
|
||||||
@@ -539,6 +540,9 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
textPos.compare(selectStart) >= 0 && textPos.compare(selectEnd) <= 0
|
textPos.compare(selectStart) >= 0 && textPos.compare(selectEnd) <= 0
|
||||||
column.isSearchResult =
|
column.isSearchResult =
|
||||||
column.selected && callBack.isSelectingSearchResult
|
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
|
val last = if (callBack.isScroll) 2 else 0
|
||||||
for (relativePos in 0..last) {
|
for (relativePos in 0..last) {
|
||||||
relativePage(relativePos).lines.forEach { textLine ->
|
val textPage = relativePage(relativePos)
|
||||||
|
textPage.lines.forEach { textLine ->
|
||||||
textLine.columns.forEach {
|
textLine.columns.forEach {
|
||||||
if (it is TextColumn) {
|
if (it is TextColumn) {
|
||||||
it.selected = false
|
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)
|
binding.contentTextView.selectEndMoveIndex(relativePagePos, lineIndex, charIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cancelSelect(fromSearchExit: Boolean = false) {
|
fun cancelSelect(clearSearchResult: Boolean = false) {
|
||||||
binding.contentTextView.cancelSelect(fromSearchExit)
|
binding.contentTextView.cancelSelect(clearSearchResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createBookmark(): Bookmark? {
|
fun createBookmark(): Bookmark? {
|
||||||
|
|||||||
@@ -126,4 +126,15 @@ data class TextChapter(
|
|||||||
}
|
}
|
||||||
return pages.lastIndex
|
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 lines: List<TextLine> get() = textLines
|
||||||
val lineSize: Int get() = textLines.size
|
val lineSize: Int get() = textLines.size
|
||||||
val charSize: Int get() = text.length
|
val charSize: Int get() = text.length
|
||||||
|
val searchResult = hashSetOf<TextColumn>()
|
||||||
var isMsgPage: Boolean = false
|
var isMsgPage: Boolean = false
|
||||||
|
|
||||||
fun addLine(line: TextLine) {
|
fun addLine(line: TextLine) {
|
||||||
|
|||||||
@@ -52,11 +52,11 @@ class SearchContentActivity :
|
|||||||
binding.tvCurrentSearchInfo.setTextColor(btc)
|
binding.tvCurrentSearchInfo.setTextColor(btc)
|
||||||
binding.ivSearchContentTop.setColorFilter(btc)
|
binding.ivSearchContentTop.setColorFilter(btc)
|
||||||
binding.ivSearchContentBottom.setColorFilter(btc)
|
binding.ivSearchContentBottom.setColorFilter(btc)
|
||||||
initSearchView()
|
val searchResultList = IntentData.get<List<SearchResult>>("searchResultList")
|
||||||
|
val noSearchResult = searchResultList == null
|
||||||
|
initSearchView(!noSearchResult)
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initView()
|
initView()
|
||||||
val searchResultList = IntentData.get<List<SearchResult>>("searchResultList")
|
|
||||||
val submit = searchResultList == null
|
|
||||||
intent.getStringExtra("bookUrl")?.let { bookUrl ->
|
intent.getStringExtra("bookUrl")?.let { bookUrl ->
|
||||||
viewModel.initBook(bookUrl) {
|
viewModel.initBook(bookUrl) {
|
||||||
searchResultList?.let {
|
searchResultList?.let {
|
||||||
@@ -66,16 +66,17 @@ class SearchContentActivity :
|
|||||||
val position = intent.getIntExtra("searchResultIndex", 0)
|
val position = intent.getIntExtra("searchResultIndex", 0)
|
||||||
binding.recyclerView.scrollToPosition(position)
|
binding.recyclerView.scrollToPosition(position)
|
||||||
}
|
}
|
||||||
initBook(submit)
|
initBook(noSearchResult)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initSearchView() {
|
private fun initSearchView(clearFocus: Boolean) {
|
||||||
searchView.applyTint(primaryTextColor)
|
searchView.applyTint(primaryTextColor)
|
||||||
searchView.onActionViewExpanded()
|
searchView.onActionViewExpanded()
|
||||||
searchView.isSubmitButtonEnabled = true
|
searchView.isSubmitButtonEnabled = true
|
||||||
searchView.queryHint = getString(R.string.search)
|
searchView.queryHint = getString(R.string.search)
|
||||||
|
if (clearFocus) searchView.clearFocus()
|
||||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||||
override fun onQueryTextSubmit(query: String): Boolean {
|
override fun onQueryTextSubmit(query: String): Boolean {
|
||||||
startContentSearch(query.trim())
|
startContentSearch(query.trim())
|
||||||
@@ -197,6 +198,7 @@ class SearchContentActivity :
|
|||||||
get() = viewModel.book?.isLocal == true
|
get() = viewModel.book?.isLocal == true
|
||||||
|
|
||||||
override fun openSearchResult(searchResult: SearchResult, index: Int) {
|
override fun openSearchResult(searchResult: SearchResult, index: Int) {
|
||||||
|
searchJob?.cancel()
|
||||||
postEvent(EventBus.SEARCH_RESULT, viewModel.searchResultList as List<SearchResult>)
|
postEvent(EventBus.SEARCH_RESULT, viewModel.searchResultList as List<SearchResult>)
|
||||||
val searchData = Intent()
|
val searchData = Intent()
|
||||||
val key = System.currentTimeMillis()
|
val key = System.currentTimeMillis()
|
||||||
|
|||||||
Reference in New Issue
Block a user