diff --git a/app/src/main/java/io/legado/app/service/help/ReadBook.kt b/app/src/main/java/io/legado/app/service/help/ReadBook.kt index 2e96221f3..479850620 100644 --- a/app/src/main/java/io/legado/app/service/help/ReadBook.kt +++ b/app/src/main/java/io/legado/app/service/help/ReadBook.kt @@ -368,7 +368,19 @@ object ReadBook { val currentLine = currentPage.textLines[lineIndex] length -= currentLine.text.length val charIndex = contentPosition - length - return arrayOf(pageIndex, lineIndex, charIndex) + var addLine = 0 + var charIndex2 = 0 + // change line + if ((charIndex + query.length) > currentLine.text.length){ + addLine = 1 + charIndex2 = charIndex + query.length - currentLine.text.length - 1 + } + // changePage + if ((lineIndex + addLine + 1) > currentPage.textLines.size){ + addLine = -1 + charIndex2 = charIndex + query.length - currentLine.text.length - 1 + } + return arrayOf(pageIndex, lineIndex, charIndex, addLine, charIndex2) } /** 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 53a549425..92df11f6a 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 @@ -9,6 +9,7 @@ import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Bundle import android.os.Handler +import android.util.Log import android.view.* import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import androidx.core.view.get @@ -56,16 +57,14 @@ import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.utils.* import kotlinx.android.synthetic.main.activity_book_read.* import kotlinx.android.synthetic.main.view_read_menu.* -import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main -import kotlinx.coroutines.async -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch import org.jetbrains.anko.sdk27.listeners.onClick import org.jetbrains.anko.startActivity import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.toast +import java.lang.Runnable class ReadBookActivity : VMBaseActivity(R.layout.activity_book_read), View.OnTouchListener, @@ -789,14 +788,22 @@ class ReadBookActivity : VMBaseActivity(R.layout.activity_boo pages = ReadBook.curTextChapter?.pages } val positions = ReadBook.searchResultPositions(pages, indexWithinChapter, query!!) - //todo: show selected text - val job1 = async(Main){ + while (ReadBook.durPageIndex != positions[0]){ + delay(100L) ReadBook.skipToPage(positions[0]) - page_view.curPage.selectStartMoveIndex(positions[0], positions[1], 0) - page_view.curPage.selectEndMoveIndex(positions[0], positions[1], 0 + query.length ) + } + withContext(Main){ + page_view.curPage.selectStartMoveIndex(0, positions[1], positions[2]) + delay(20L) + when (positions[3]){ + 0 -> page_view.curPage.selectEndMoveIndex(0, positions[1], positions[2] + query.length - 1) + 1 -> page_view.curPage.selectEndMoveIndex(0, positions[1] + 1, positions[4]) + //todo: consider change page, jump to scroll position + -1 -> page_view.curPage.selectEndMoveIndex(1, 0, positions[4]) + } page_view.isTextSelected = true + delay(100L) } - job1.await() } } requestCodeReplace -> onReplaceRuleSave()