Browse Source

Merge branch 'pdfClickLinkCallback' into 'master'

Add callback for clicking links on pdf

See merge request kdanandroid/pdf/pdfreaderreadermodule!29
Wayne Huang 5 năm trước cách đây
mục cha
commit
7634e92c71

+ 5 - 0
src/main/java/com/kdanmobile/reader/ReaderActivity.kt

@@ -215,6 +215,10 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
         setupInkMenu()
     }
 
+    fun setOnClickLinkListener(onClickLinkListener: ReaderViewModel.OnClickLinkListener?) {
+        viewModel.setOnClickLinkListener(onClickLinkListener)
+    }
+
     private fun showFileCannotOpenDialog(title: String) {
         fileCannotOpenDialog = AlertDialog.Builder(this)
                 .setTitle(title)
@@ -228,6 +232,7 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
 
     override fun onDestroy() {
         fileCannotOpenDialog?.dismiss()
+        setOnClickLinkListener(null)
         super.onDestroy()
     }
 

+ 25 - 0
src/main/java/com/kdanmobile/reader/ReaderViewModel.kt

@@ -9,6 +9,7 @@ import android.net.Uri
 import android.support.v4.content.ContextCompat
 import com.kdanmobile.kmpdfkit.annotation.Annotation
 import com.kdanmobile.kmpdfkit.annotation.bean.*
+import com.kdanmobile.kmpdfkit.annotation.link.listener.OnLinkInfoChangeListener
 import com.kdanmobile.kmpdfkit.globaldata.AnnotConfig
 import com.kdanmobile.kmpdfkit.globaldata.Config
 import com.kdanmobile.kmpdfkit.globaldata.KMPDFAnnotEditMode
@@ -16,6 +17,7 @@ import com.kdanmobile.kmpdfkit.manager.KMPDFFactory
 import com.kdanmobile.kmpdfkit.manager.controller.*
 import com.kdanmobile.kmpdfkit.manager.listener.KMPDFAddAnnotCallback
 import com.kdanmobile.kmpdfkit.manager.listener.KMPDFAnnotEditModeChangeListener
+import com.kdanmobile.kmpdfkit.manager.listener.KMPDFClickLinkCallback
 import com.kdanmobile.kmpdfkit.pdfcommon.*
 import com.kdanmobile.reader.annotationattribute.AnnotationAttribute
 import com.kdanmobile.reader.annotationattribute.Brush
@@ -33,6 +35,12 @@ import kotlin.collections.ArrayList
 
 class ReaderViewModel(private val readerModelManager: ReaderModelManager, val uri: Uri, private val pdfSdkLicense: String, private val pdfSdkRsaMsg: String) : ViewModel() {
 
+    interface OnClickLinkListener {
+        fun onClickWebsiteLink(url: String): Boolean
+        fun onClickPdfPageLink(url: String): Boolean
+        fun onClickEmailLink(url: String): Boolean
+    }
+
     enum class ViewDirection(val mode: Config.PDFViewMode) {
         VERTICAL_SINGLE_PAGE_CONTINUES(Config.PDFViewMode.VERTICAL_SINGLE_PAGE_CONTINUES),
         VERTICAL_SINGLE_PAGE(Config.PDFViewMode.VERTICAL_SINGLE_PAGE),
@@ -180,6 +188,8 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, val ur
         }
     }
 
+    private var onClickLinkListener: OnClickLinkListener? = null
+
     @JvmOverloads
     fun openPdfFile(context: Context, password: String, onRequestPassword: Runnable, type: String? = null): OpenFileResult {
         if (!isVerified) {
@@ -439,6 +449,17 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, val ur
             annotationEitModeLiveData.postValue(AnnotationEitMode.getMode(it))
         }
 
+        val linkController = kmpdfFactory?.getController(KMPDFFactory.ControllerType.LINK) as KMPDFLinkController?
+        linkController?.setOnClickLinkCallback(KMPDFClickLinkCallback{ type, url ->
+            if (url.isNullOrEmpty()) return@KMPDFClickLinkCallback true
+            return@KMPDFClickLinkCallback when (type) {
+                OnLinkInfoChangeListener.KMPDFLinkType.WEBSITE -> onClickLinkListener?.onClickWebsiteLink(url)
+                OnLinkInfoChangeListener.KMPDFLinkType.PAGE -> onClickLinkListener?.onClickPdfPageLink(url)
+                OnLinkInfoChangeListener.KMPDFLinkType.EMAIL -> onClickLinkListener?.onClickEmailLink(url)
+                else -> false
+            } ?: false
+        })
+
         setupContextMenu()
 
         if (!isFirst) {
@@ -451,6 +472,10 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, val ur
         controller?.contextMenuCallback = contextMenuCallback
     }
 
+    fun setOnClickLinkListener(onClickLinkListener: OnClickLinkListener?) {
+        this.onClickLinkListener = onClickLinkListener
+    }
+
     fun setTextBoxContextMenuActions(listener: TextBoxContextMenuActionListener) {
         contextMenuCallback.setTextBoxContextMenuActions(listener)
     }