diff --git a/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt index 9c03da0a7..4647e8dea 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ContentEditDialog.kt @@ -41,8 +41,11 @@ class ContentEditDialog : BaseBottomSheetDialogFragment(R.layout.dialog_content_ val binding by viewBinding(DialogContentEditBinding::bind) val viewModel by viewModels() + private val targetOffset: Int + get() = arguments?.getInt("start_position", -1).takeIf { it != -1 } + ?: ReadBook.durChapterPos + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { - //binding.toolBar.setBackgroundColor(primaryColor) binding.toolBar.title = ReadBook.curTextChapter?.title initMenu() binding.toolBar.setOnClickListener { @@ -67,12 +70,11 @@ class ContentEditDialog : BaseBottomSheetDialogFragment(R.layout.dialog_content_ val layout = binding.contentView.layout ?: return@post val targetY = binding.contentView.top + layout.getLineTop( - layout.getLineForOffset(ReadBook.durChapterPos) + layout.getLineForOffset(targetOffset) ) binding.scrollView.smoothScrollTo(0, targetY) - - highlightCurrentLineTwice() + highlightSelectedTextTwice() } } @@ -117,14 +119,16 @@ class ContentEditDialog : BaseBottomSheetDialogFragment(R.layout.dialog_content_ } } - private fun highlightCurrentLineTwice() { + private fun highlightSelectedTextTwice() { val editText = binding.contentView - val layout = editText.layout ?: return - val offset = ReadBook.durChapterPos - val lineIndex = layout.getLineForOffset(offset) + val content = editText.text ?: return - val start = layout.getLineStart(lineIndex) - val end = layout.getLineEnd(lineIndex) + val start = arguments?.getInt("start_position", -1) ?: -1 + val selectedText = arguments?.getString("selected_text") ?: "" + + if (start == -1 || selectedText.isEmpty()) return + + val end = (start + selectedText.length).coerceAtMost(content.length) val spannable = editText.text as Spannable val span = 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 44807dbd8..9a63d9184 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 @@ -971,6 +971,15 @@ class ReadBookActivity : BaseReadBookActivity(), return true } + R.id.menu_edit -> { + val startPos = binding.readView.getSelectTextPos() + ReadBook.durChapterPos - 13 + showDialogFragment { + putInt("start_position", startPos) + putString("selected_text", binding.readView.getSelectText()) + } + return true + } + R.id.menu_replace -> { val scopes = arrayListOf() ReadBook.book?.name?.let { @@ -1006,6 +1015,19 @@ class ReadBookActivity : BaseReadBookActivity(), return false } + private fun onEditTextAction(selectedText: String, startPos: Int) { + val bundle = Bundle().apply { + putString("selected_text", selectedText) + putInt("start_position", startPos) + } + + val dialog = ContentEditDialog().apply { + arguments = bundle + } + + dialog.show(supportFragmentManager, "ContentEditDialog") + } + /** * 文本选择菜单操作完成 */ diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index e6f204640..ce3116cb7 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -674,6 +674,14 @@ class ReadView(context: Context, attrs: AttributeSet) : return curPage.selectedText } + fun getSelectTextPos(): Int { + val selectStartPos = curPage.selectStartPos + return curPage.textPage.getPosByLineColumn( + selectStartPos.lineIndex, + selectStartPos.columnIndex + ) + } + fun getCurVisiblePage(): TextPage { return curPage.getCurVisiblePage() } diff --git a/app/src/main/res/menu/content_select_action.xml b/app/src/main/res/menu/content_select_action.xml index dda5324dd..d8cd4bd1e 100644 --- a/app/src/main/res/menu/content_select_action.xml +++ b/app/src/main/res/menu/content_select_action.xml @@ -10,6 +10,10 @@ android:id="@+id/menu_copy" android:title="@android:string/copy" /> + +