kunfei 4 роки тому
батько
коміт
a22b658898

+ 8 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -60,6 +60,7 @@ import io.legado.app.ui.dict.DictDialog
 import io.legado.app.ui.login.SourceLoginActivity
 import io.legado.app.ui.replace.ReplaceRuleActivity
 import io.legado.app.ui.replace.edit.ReplaceEditActivity
+import io.legado.app.ui.widget.dialog.PhotoDialog
 import io.legado.app.ui.widget.dialog.TextDialog
 import io.legado.app.utils.*
 import kotlinx.coroutines.Dispatchers.IO
@@ -950,6 +951,13 @@ class ReadBookActivity : BaseReadBookActivity(),
         }
     }
 
+    /**
+     * 长按图片
+     */
+    override fun onImageLongPress(src: String) {
+        showDialogFragment(PhotoDialog(src))
+    }
+
     /**
      * colorSelectDialog
      */

+ 11 - 8
app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt

@@ -19,8 +19,10 @@ import io.legado.app.ui.book.read.page.entities.TextPos
 import io.legado.app.ui.book.read.page.provider.ChapterProvider
 import io.legado.app.ui.book.read.page.provider.ImageProvider
 import io.legado.app.ui.book.read.page.provider.TextPageFactory
-import io.legado.app.ui.widget.dialog.PhotoDialog
-import io.legado.app.utils.*
+import io.legado.app.utils.activity
+import io.legado.app.utils.getCompatColor
+import io.legado.app.utils.getPrefBoolean
+import io.legado.app.utils.toastOnUi
 import kotlin.math.min
 
 /**
@@ -217,16 +219,16 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
     }
 
     /**
-     *
+     * 长按
      */
     fun longPress(
         x: Float,
         y: Float,
         select: (relativePage: Int, lineIndex: Int, charIndex: Int) -> Unit,
     ) {
-        touch(x, y) { _, relativePos, textPage, lineIndex, _, charIndex, textChar ->
+        touch(x, y) { _, relativePos, _, lineIndex, _, charIndex, textChar ->
             if (textChar.isImage) {
-                activity?.showDialogFragment(PhotoDialog(textPage.chapterIndex, textChar.charData))
+                callBack.onImageLongPress(textChar.charData)
             } else {
                 if (!selectAble) return@touch
                 textChar.selected = true
@@ -459,12 +461,13 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
     }
 
     interface CallBack {
-        fun upSelectedStart(x: Float, y: Float, top: Float)
-        fun upSelectedEnd(x: Float, y: Float)
-        fun onCancelSelect()
         val headerHeight: Int
         val pageFactory: TextPageFactory
         val isScroll: Boolean
         var isSelectingSearchResult: Boolean
+        fun upSelectedStart(x: Float, y: Float, top: Float)
+        fun upSelectedEnd(x: Float, y: Float)
+        fun onCancelSelect()
+        fun onImageLongPress(src: String)
     }
 }

+ 10 - 20
app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt

@@ -17,19 +17,12 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
  */
 class PhotoDialog() : BaseDialogFragment(R.layout.dialog_photo_view) {
 
-    constructor(chapterIndex: Int, src: String) : this() {
+    constructor(src: String) : this() {
         arguments = Bundle().apply {
-            putInt("chapterIndex", chapterIndex)
             putString("src", src)
         }
     }
 
-    constructor(path: String) : this() {
-        arguments = Bundle().apply {
-            putString("path", path)
-        }
-    }
-
     private val binding by viewBinding(DialogPhotoViewBinding::bind)
 
     override fun onStart() {
@@ -38,19 +31,16 @@ class PhotoDialog() : BaseDialogFragment(R.layout.dialog_photo_view) {
     }
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
-        arguments?.let {
-            val path = it.getString("path")
-            if (path.isNullOrEmpty()) {
-                ReadBook.book?.let { book ->
-                    it.getString("src")?.let { src ->
-                        val file = BookHelp.getImage(book, src)
-                        ImageLoader.load(requireContext(), file)
-                            .error(R.drawable.image_loading_error)
-                            .into(binding.photoView)
-                    }
-                }
+        arguments?.getString("src")?.let { src ->
+            val file = ReadBook.book?.let { book ->
+                BookHelp.getImage(book, src)
+            }
+            if (file?.exists() == true) {
+                ImageLoader.load(requireContext(), file)
+                    .error(R.drawable.image_loading_error)
+                    .into(binding.photoView)
             } else {
-                BookCover.load(requireContext(), path = path)
+                BookCover.load(requireContext(), path = src)
                     .into(binding.photoView)
             }
         }