Bläddra i källkod

Add annotation events

Wayne 5 år sedan
förälder
incheckning
63ac3708e3

+ 43 - 3
src/main/java/com/kdanmobile/reader/ReaderActivity.kt

@@ -209,6 +209,7 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
         viewModel.isPageInBookmarksLiveData.observe(this, Observer(this::onIsPageInBookmarksChanged))
         viewModel.isLeftToolbarOpenLiveData.observe(this, Observer(this::onLeftToolbarOpenStateChanged))
         viewModel.leftToolbarTypeLiveData.observe(this, Observer(this::onLeftToolbarTypeChanged))
+        viewModel.eventLiveData.observe(this , Observer(this::onEvent))
         isHidePdfPage = true
         applySetting()
 
@@ -975,8 +976,12 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
     private fun setupRightToolbar() {
         viewGroup_readerActivity_rightToolbar.setScroll(false)
         iv_readerActivity_highLight.apply {
-            setOnClickListener { viewModel.onClickHighlightBtn() }
+            setOnClickListener {
+                onEvent(HookEvent.OnClickHighlightBtn())
+                viewModel.onClickHighlightBtn()
+            }
             setOnLongClickListener { btn ->
+                onEvent(HookEvent.OnLongClickHighlightBtn())
                 viewModel.onLongClickHighlightBtn()
                 val context = this@ReaderActivity
                 AnnotationAttributeWindow(context, true).also { window ->
@@ -1003,8 +1008,12 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
             }
         }
         iv_readerActivity_strike.apply {
-            setOnClickListener { viewModel.onClickStrikeBtn() }
+            setOnClickListener {
+                onEvent(HookEvent.OnClickStrikeoutBtn())
+                viewModel.onClickStrikeBtn()
+            }
             setOnLongClickListener { btn ->
+                onEvent(HookEvent.OnLongClickStrikeoutBtn())
                 viewModel.onLongClickStrikeBtn()
                 val context = this@ReaderActivity
                 AnnotationAttributeWindow(context, true).also { window ->
@@ -1031,8 +1040,12 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
             }
         }
         iv_readerActivity_underline.apply {
-            setOnClickListener { viewModel.onClickUnderlineBtn() }
+            setOnClickListener {
+                onEvent(HookEvent.OnClickUnderlineBtn())
+                viewModel.onClickUnderlineBtn()
+            }
             setOnLongClickListener { btn ->
+                onEvent(HookEvent.OnLongClickUnderlineBtn())
                 viewModel.onLongClickUnderlineBtn()
                 val context = this@ReaderActivity
                 AnnotationAttributeWindow(context, true).also { window ->
@@ -1060,6 +1073,7 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
         }
         iv_readerActivity_ink.apply {
             setOnClickListener {
+                onEvent(HookEvent.OnClickInkBtn())
                 if (viewModel.annotationModeLiveData.value == ReaderViewModel.AnnotationMode.INK) {
                     AnimationUtil.hideViewAlpha(view_ink_menu)
                 } else {
@@ -1068,6 +1082,7 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
                 viewModel.onClickInkBtn()
             }
             setOnLongClickListener { btn ->
+                onEvent(HookEvent.OnLongClickInkBtn())
                 viewModel.onLongClickInkBtn()
                 val context = this@ReaderActivity
                 AnnotationAttributeWindow(context, false).also { window ->
@@ -1245,12 +1260,37 @@ abstract class ReaderActivity : KdanBaseActivity(), ReaderSettingListener, PdfTh
         }
     }
 
+    private fun onEvent(event: ReaderViewModel.Event?) {
+        if (event == null) return
+        when (event) {
+            is ReaderViewModel.Event.OnFinishedHighlight -> HookEvent.OnFinishedHighlight()
+            is ReaderViewModel.Event.OnFinishedStrikeout -> HookEvent.OnFinishedStrikeout()
+            is ReaderViewModel.Event.OnFinishedUnderLine -> HookEvent.OnFinishedUnderline()
+            is ReaderViewModel.Event.OnFinishedInk -> HookEvent.OnFinishedInk()
+        }.also {
+            onEvent(it)
+        }
+        viewModel.onEventConsumed(event)
+    }
+
     protected sealed class HookEvent {
         class OnClickTopBookmarkBtn : HookEvent()
         class OnClickBottomPreviousBtn : HookEvent()
         class OnClickBottomNextBtn : HookEvent()
         class OnClickBottomMediaBoxBtn : HookEvent()
         class OnClickBottomThumbnailBtn : HookEvent()
+        class OnClickHighlightBtn : HookEvent()
+        class OnClickStrikeoutBtn : HookEvent()
+        class OnClickUnderlineBtn : HookEvent()
+        class OnClickInkBtn : HookEvent()
+        class OnLongClickHighlightBtn : HookEvent()
+        class OnLongClickStrikeoutBtn : HookEvent()
+        class OnLongClickUnderlineBtn : HookEvent()
+        class OnLongClickInkBtn : HookEvent()
+        class OnFinishedHighlight : HookEvent()
+        class OnFinishedStrikeout : HookEvent()
+        class OnFinishedUnderline : HookEvent()
+        class OnFinishedInk : HookEvent()
         class OnUserChangeHighlightPropertySuccess : HookEvent()
         class OnUserChangeStrikeoutPropertySuccess : HookEvent()
         class OnUserChangeUnderlinePropertySuccess : HookEvent()

+ 27 - 3
src/main/java/com/kdanmobile/reader/ReaderViewModel.kt

@@ -18,10 +18,14 @@ 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.kmpdfkit.pdfcommon.KMPDFReaderView
+import com.kdanmobile.kmpdfkit.pdfcommon.PDFInfo
+import com.kdanmobile.kmpdfkit.pdfcommon.ReaderView
 import com.kdanmobile.reader.annotationattribute.AnnotationAttribute
 import com.kdanmobile.reader.annotationattribute.Brush
 import com.kdanmobile.reader.annotationattribute.InkAttribute
+import com.kdanmobile.reader.event.EventBroadcaster
+import com.kdanmobile.reader.event.EventManager
 import com.kdanmobile.reader.screen.contextmenu.MyKMPDFContextMenuCallback
 import com.kdanmobile.reader.screen.contextmenu.TextBoxContextMenuActionListener
 import com.kdanmobile.reader.screen.data.ShapeAttribute
@@ -33,7 +37,12 @@ import java.io.File
 import java.util.*
 import kotlin.collections.ArrayList
 
-class ReaderViewModel(private val readerModelManager: ReaderModelManager, val uri: Uri, private val pdfSdkLicense: String, private val pdfSdkRsaMsg: String) : ViewModel() {
+class ReaderViewModel(
+        private val readerModelManager: ReaderModelManager, val uri: Uri,
+        private val pdfSdkLicense: String,
+        private val pdfSdkRsaMsg: String,
+        private val eventManager: EventManager<Event> = EventManager()
+) : ViewModel(), EventBroadcaster<ReaderViewModel.Event> by eventManager {
 
     interface OnClickLinkListener {
         fun onClickWebsiteLink(url: String): Boolean
@@ -41,6 +50,13 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, val ur
         fun onClickEmailLink(url: String): Boolean
     }
 
+    sealed class Event {
+        class OnFinishedUnderLine : Event()
+        class OnFinishedHighlight : Event()
+        class OnFinishedStrikeout : Event()
+        class OnFinishedInk : Event()
+    }
+
     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),
@@ -428,7 +444,15 @@ class ReaderViewModel(private val readerModelManager: ReaderModelManager, val ur
         kmpdfFactory?.kmpdfAddAnnotCallback = object : KMPDFAddAnnotCallback {
 
             override fun onSaveAnnotFinished(type: Annotation.Type, result: Boolean, message: String) {
-                println("KMPDFAddAnnotCallback::onSaveAnnotFinished")
+                when (type) {
+                    Annotation.Type.INK -> Event.OnFinishedInk()
+                    Annotation.Type.HIGHLIGHT -> Event.OnFinishedHighlight()
+                    Annotation.Type.UNDERLINE -> Event.OnFinishedUnderLine()
+                    Annotation.Type.STRIKEOUT -> Event.OnFinishedStrikeout()
+                    else -> null
+                }?.also {
+                    eventManager.send(it)
+                }
             }
 
             override fun onAttachAnnotWidgetFinished(type: Annotation.Type) {