123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 |
- package com.kdanmobile.reader
- import android.arch.lifecycle.LiveData
- import android.arch.lifecycle.MutableLiveData
- import android.arch.lifecycle.ViewModel
- import android.content.Context
- import android.graphics.Bitmap
- import android.graphics.Color
- import android.graphics.RectF
- 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.contextmenu.KMPDFMenuItem
- import com.kdanmobile.kmpdfkit.contextmenu.MenuItemCallback
- import com.kdanmobile.kmpdfkit.globaldata.AnnotConfig
- import com.kdanmobile.kmpdfkit.globaldata.Config
- import com.kdanmobile.kmpdfkit.globaldata.KMPDFAnnotEditMode
- 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.KMPDFErrorMessageCallback
- import com.kdanmobile.kmpdfkit.pdfcommon.*
- import com.kdanmobile.reader.annotationattribute.AnnotationAttribute
- import com.kdanmobile.reader.annotationattribute.Brush
- import com.kdanmobile.reader.annotationattribute.InkAttribute
- import com.kdanmobile.reader.screen.contextmenu.TextBoxContextMenuActionListener
- import com.kdanmobile.reader.screen.data.ShapeAttribute
- import com.kdanmobile.reader.screen.data.SignatureAttribute
- import com.kdanmobile.reader.screen.data.StampAttribute
- import com.kdanmobile.reader.screen.data.TextBoxAttribute
- import com.kdanmobile.reader.screen.handler.*
- import java.io.File
- import java.util.*
- import kotlin.collections.ArrayList
- class ReaderViewModel(private val pdfSdkLicense: String, private val pdfSdkRsaMsg: String) : ViewModel() {
- enum class ViewDirection(val mode: Config.PDFViewMode) {
- VerticalSinglePageContinues(Config.PDFViewMode.VERTICAL_SINGLE_PAGE_CONTINUES),
- VerticalSinglePage(Config.PDFViewMode.VERTICAL_SINGLE_PAGE),
- HorizontalSinglePage(Config.PDFViewMode.HORIZONTAL_SINGLE_PAGE)
- }
- enum class ReadMode(val mode: Config.ReadMode) {
- READ_MODE_DAY(Config.ReadMode.READ_MODE_DAY),
- READ_MODE_NIGHT(Config.ReadMode.READ_MODE_NIGHT),
- READ_MODE_SOFT(Config.ReadMode.READ_MODE_SOFT),
- USER_DEFINED(Config.ReadMode.USER_DEFINED)
- }
- enum class AnnotationMode {
- None,
- Highlight,
- Strike,
- Underline,
- Ink,
- }
- companion object {
- val DEFAULT_HIGHLIGHT_ATTR = AnnotationAttribute(Color.parseColor("#ffdc1b"), 127)
- val DEFAULT_STRIKE_ATTR = AnnotationAttribute(Color.parseColor("#57d214"), 255)
- val DEFAULT_UNDERLINE_ATTR = AnnotationAttribute(Color.parseColor("#296dd2"), 255)
- val DEFAULT_INK_ATTR = InkAttribute(Color.parseColor("#dd0202"), 255, 1f, Brush.Fountain)
- }
- var file: File? = null
- private set
- val pdfInfo: PDFInfo?
- get() {
- return kmpdfDocumentController?.pdfInfo
- }
- val isPasswordProtected: Boolean
- get() {
- return kmpdfFactory?.needPassWord() ?: false
- }
- var viewDirection = ViewDirection.VerticalSinglePageContinues
- set(value) {
- field = value
- updateViewDirection()
- }
- var readMode = ReadMode.READ_MODE_DAY
- set(value) {
- field = value
- updateReadMode()
- }
- var isCrop = false
- set(value) {
- field = value
- updateCrop()
- }
- val highLightAttributeLiveData = MutableLiveData<AnnotationAttribute>().apply { value = DEFAULT_HIGHLIGHT_ATTR }
- val strikeAttributeLiveData = MutableLiveData<AnnotationAttribute>().apply { value = DEFAULT_STRIKE_ATTR }
- var underLineAttributeLiveData = MutableLiveData<AnnotationAttribute>().apply { value = DEFAULT_UNDERLINE_ATTR }
- var inkAttributeLiveData = MutableLiveData<InkAttribute>().apply { value = DEFAULT_INK_ATTR }
- private var isVerified = false
- private val kmpdfFactory: KMPDFFactory?
- get() = ReaderModel.kmpdfFactory
- private val kmpdfDocumentController: KMPDFDocumentController?
- get() = ReaderModel.kmpdfDocumentController
- val isOpenedFileLiveData = MutableLiveData<Boolean>().apply { value = false }
- val fileNameLiveData = MutableLiveData<String>()
- val annotationModeLiveData = MutableLiveData<AnnotationMode>().apply { value = AnnotationMode.None }
- val annotationEitModeLiveData = MutableLiveData<KMPDFAnnotEditMode.Mode>().apply { value = KMPDFAnnotEditMode.Mode.NULL }
- var isCopyModeLiveData = MutableLiveData<Boolean>().apply { value = false }
- val pageIndexLiveData: LiveData<Int>
- get() = mPageIndexLiveData
- val isPageInBookmarksLiveData: LiveData<Boolean>
- get() = mIsPageInBookmarksLiveData
- private val mPageIndexLiveData = MutableLiveData<Int>().apply { value = 0 }
- private val mIsPageInBookmarksLiveData = MutableLiveData<Boolean>().apply { value = false }
- enum class LeftToolbarType {
- NONE, THUMBNAIL, BOOKMARK, OUTLINE, SEARCH
- }
- val leftToolbarTypeLiveData: LiveData<LeftToolbarType>
- get() = mLeftToolbarTypeLiveData
- private val mLeftToolbarTypeLiveData = MutableLiveData<LeftToolbarType>().apply { value = LeftToolbarType.NONE }
- val isLeftToolbarOpenLiveData: LiveData<Boolean>
- get() = mIsLeftToolbarOpenLiveData
- private val mIsLeftToolbarOpenLiveData = MutableLiveData<Boolean>().apply { value = false }
- fun setLeftToolbarType(leftToolbarType: LeftToolbarType) {
- mLeftToolbarTypeLiveData.postValue(leftToolbarType)
- }
- fun setIsLeftToolbarOpen(open: Boolean) {
- mIsLeftToolbarOpenLiveData.postValue(open)
- }
- val password: String
- get() = ReaderModel.password
- @JvmOverloads
- fun openPdfFile(context: Context, uri: Uri, password: String, onRequestPassword: Runnable, type: String? = null): Boolean {
- if (!isVerified) {
- if (!verifyLicense(context)) {
- return false
- }
- isVerified = true
- }
- return openPdfFIleImp(context, uri, password, onRequestPassword, type).apply{
- isOpenedFileLiveData.postValue(this)
- }
- }
- private fun openPdfFIleImp(context: Context, uri: Uri, password: String, requestPassword: Runnable, type: String?): Boolean {
- file = File(uri.path)
- if (null == kmpdfFactory) {
- val factory = KMPDFFactory.open(context, uri, type) ?: return false
- factory.also {
- fileNameLiveData.postValue(it.fileName)
- if (it.needPassWord()) {
- if (!it.authenticatePassword(password)) {
- requestPassword.run()
- return false
- }
- }
- if (it.init()) {
- ReaderModel.initKMPDFFactory(factory, uri.path, password)
- return true
- }
- return false
- }
- }
- return true
- }
- override fun onCleared() {
- ReaderModel.onViewModelCleared(this)
- super.onCleared()
- }
- fun copySelection(): Boolean {
- return kmpdfDocumentController?.copySelection() ?: false
- }
- fun onClickCopyBtn() {
- if (annotationModeLiveData.value != AnnotationMode.None) stopAnnotationMode()
- if (isCopyModeLiveData.value == true) {
- stopCopyTextMode()
- } else {
- startCopyTextMode()
- }
- }
- fun onClickHighlightBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- if (annotationModeLiveData.value == AnnotationMode.Highlight) {
- stopAnnotationMode()
- } else {
- startHighLightEditMode()
- }
- }
- fun onLongClickHighlightBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- startHighLightEditMode()
- }
- fun onClickStrikeBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- if (annotationModeLiveData.value == AnnotationMode.Strike) {
- stopAnnotationMode()
- } else {
- startStrikeOutEditMode()
- }
- }
- fun onLongClickStrikeBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- startStrikeOutEditMode()
- }
- fun onClickUnderlineBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- if (annotationModeLiveData.value == AnnotationMode.Underline) {
- stopAnnotationMode()
- } else {
- startUnderLineEditMode()
- }
- }
- fun onLongClickUnderlineBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- startUnderLineEditMode()
- }
- fun onClickInkBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- if (annotationModeLiveData.value == AnnotationMode.Ink) {
- stopAnnotationMode()
- } else {
- startInkEditMode()
- }
- }
- fun onLongClickInkBtn() {
- if (isCopyModeLiveData.value == true) stopCopyTextMode()
- startInkEditMode()
- }
- private fun startCopyTextMode() {
- kmpdfDocumentController?.startCopyText()
- isCopyModeLiveData.postValue(true)
- }
- private fun stopCopyTextMode() {
- kmpdfDocumentController?.stopCopyText()
- isCopyModeLiveData.postValue(false)
- }
- fun setHighLightAttributes(annotationAttribute: AnnotationAttribute) {
- highLightAttributeLiveData.postValue(annotationAttribute)
- setHighLightAttributesImp(annotationAttribute)
- }
- private fun setHighLightAttributesImp(annotationAttribute: AnnotationAttribute) {
- kmpdfFactory?.setAnnotationAttribute(KMPDFHighlightAnnotationBean("", annotationAttribute.color, annotationAttribute.alpha))
- kmpdfFactory?.annotConfig?.apply {
- markerPenColor_hightlight = annotationAttribute.color
- markerPenAlpha_hightlight = annotationAttribute.alpha
- }
- }
- private fun startHighLightEditMode() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.HIGH_LIGHT)
- annotationModeLiveData.postValue(AnnotationMode.Highlight)
- }
- fun setStrikeOutAttributes(annotationAttribute: AnnotationAttribute) {
- strikeAttributeLiveData.postValue(annotationAttribute)
- setStrikeOutAttributesImp(annotationAttribute)
- }
- private fun setStrikeOutAttributesImp(annotationAttribute: AnnotationAttribute) {
- kmpdfFactory?.setAnnotationAttribute(KMPDFStrikeoutAnnotationBean("",annotationAttribute.color, annotationAttribute.alpha))
- kmpdfFactory?.annotConfig?.apply {
- markerPenColor_strikeout = annotationAttribute.color
- markerPenAlpha_strikeout = annotationAttribute.alpha
- }
- }
- private fun startStrikeOutEditMode() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.STRIKE_OUT)
- annotationModeLiveData.postValue(AnnotationMode.Strike)
- }
- fun setUnderLineAttributes(annotationAttribute: AnnotationAttribute) {
- underLineAttributeLiveData.postValue(annotationAttribute)
- setUnderLineAttributesImp(annotationAttribute)
- }
- private fun setUnderLineAttributesImp(annotationAttribute: AnnotationAttribute) {
- kmpdfFactory?.setAnnotationAttribute(KMPDFUnderlineAnnotationBean("", annotationAttribute.color, annotationAttribute.alpha))
- kmpdfFactory?.annotConfig?.apply {
- markerPenColor_underline = annotationAttribute.color
- markerPenAlpha_underline = annotationAttribute.alpha
- }
- }
- private fun startUnderLineEditMode() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.UNDER_LINE)
- annotationModeLiveData.postValue(AnnotationMode.Underline)
- }
- fun setInkAttributes(inkAttribute: InkAttribute) {
- inkAttributeLiveData.postValue(inkAttribute)
- setInkAttributesImp(inkAttribute)
- }
- fun setInkAttributesImp(inkAttribute: InkAttribute) {
- kmpdfFactory?.apply {
- setAnnotationAttribute(KMPDFInkAnnotationBean("", inkAttribute.color, inkAttribute.width, inkAttribute.alpha))
- annotConfig?.apply {
- markerPenColor_ink = inkAttribute.color
- markerPenAlpha_ink = inkAttribute.alpha
- markerPenSize_ink = inkAttribute.width
- }
- }
- }
- private fun startInkEditMode() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.INK)
- annotationModeLiveData.postValue(AnnotationMode.Ink)
- }
- fun stopAnnotationMode() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.NULL)
- annotationModeLiveData.postValue(AnnotationMode.None)
- }
- fun setReaderView(readerView: KMPDFReaderView) {
- val isFirst = kmpdfFactory?.readerView == null
- kmpdfFactory?.readerView = readerView
- ReaderModel.initKMPDFDocumentController()
- /** init annotation color **/
- highLightAttributeLiveData.value?.also { setHighLightAttributesImp(it) }
- strikeAttributeLiveData.value?.also { setStrikeOutAttributesImp(it) }
- underLineAttributeLiveData.value?.also { setUnderLineAttributesImp(it) }
- inkAttributeLiveData.value?.also { setInkAttributesImp(it) }
- updateViewDirection()
- kmpdfFactory?.kmpdfAddAnnotCallback = object : KMPDFAddAnnotCallback {
- override fun onSaveAnnotFinished(type: Annotation.Type, result: Boolean, message: String) {
- println("KMPDFAddAnnotCallback::onSaveAnnotFinished")
- }
- override fun onAttachAnnotWidgetFinished(type: Annotation.Type) {
- println("KMPDFAddAnnotCallback::onAttachAnnotWidgetFinished")
- val mode = when (type) {
- Annotation.Type.FREETEXT -> KMPDFAnnotEditMode.Mode.FREETEXT_MODIFY
- Annotation.Type.STAMP -> KMPDFAnnotEditMode.Mode.STAMP_MODIFY
- Annotation.Type.CIRCLE, Annotation.Type.SQUARE, Annotation.Type.LINE -> KMPDFAnnotEditMode.Mode.SHAPE_MODIFY
- else -> KMPDFAnnotEditMode.Mode.NULL
- }
- if (mode != KMPDFAnnotEditMode.Mode.NULL) {
- kmpdfFactory?.kmpdfAnnotEditMode?.pdfAnnotEditMode = mode
- }
- }
- }
- kmpdfFactory?.kmpdfAnnotEditModeChangeListener = KMPDFAnnotEditModeChangeListener {
- annotationEitModeLiveData.postValue(it)
- }
- setLongPressContextMenuActions()
- setSignatureContextMenuActions()
- setStampContextMenuActions()
- setShapeContextMenuActions()
- setInkMenuActions()
- setMarkerUpMenuActions()
- if (!isFirst) {
- restoreStateBeforeDestroy()
- }
- }
- private fun setLongPressContextMenuActions() {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.LONG_PRESS
- item.menu_resId = R.menu.context_menu_longpress
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.LONGCLICK) as KMPDFLongPressCreateAnnotController).longPress_Paste()
- annotationEitModeLiveData.postValue(KMPDFAnnotEditMode.Mode.FREETEXT_MODIFY)
- return@MenuItemCallback true
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun setSignatureContextMenuActions() {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.SIGNATURE
- item.menu_resId = R.menu.context_menu_signature
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.SIGNATURE) as KMPDFSignatureController).deleteSignatureAnnotView()
- return@MenuItemCallback true
- })
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.SIGNATURE) as KMPDFSignatureController).saveSignatureAnnot()
- return@MenuItemCallback true
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun setStampContextMenuActions() {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.STAMP
- item.menu_resId = R.menu.context_menu_normal
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.STAMP) as KMPDFStampController).deleteStampAnnotView()
- return@MenuItemCallback true
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun setShapeContextMenuActions() {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.LINE
- item.menu_resId = R.menu.context_menu_normal
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.SHAPE) as KMPDFShapeAnnotController).deleteShapeAnnotView()
- return@MenuItemCallback true
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun setInkMenuActions() {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.INK
- item.menu_resId = R.menu.context_menu_normal
- item.menuCallbacks.add(MenuItemCallback { _, _ ->
- kmpdfFactory?.let {
- val controller = it.getController(KMPDFFactory.ControllerType.INK) as KMPDFInkController
- controller.deleteInkAnnotView()
- return@MenuItemCallback true
- }
- return@MenuItemCallback false
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun setMarkerUpMenuActions() {
- val item = KMPDFMenuItem()
- /** Just set HIGH_LIGHT then highlight, strike, underline will be triggered. **/
- /** WTF !!!!!!!!!!! **/
- item.annotType = KMPDFMenuItem.AnnotType.HIGH_LIGHT
- item.menu_resId = R.menu.context_menu_normal
- item.menuCallbacks.add(MenuItemCallback { _, _ ->
- kmpdfFactory?.let {
- val controller = it.getController(KMPDFFactory.ControllerType.MARKER_UP) as KMPDFMarkupController
- controller.deleteMarkupAnnotView()
- return@MenuItemCallback true
- }
- return@MenuItemCallback false
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- fun setTextBoxContextMenuActions(listener: TextBoxContextMenuActionListener) {
- val item = KMPDFMenuItem()
- item.annotType = KMPDFMenuItem.AnnotType.FREETEXT
- item.menu_resId = R.menu.context_menu_textbox
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- return@MenuItemCallback listener.onDelete()
- })
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- return@MenuItemCallback listener.onEditStyle()
- })
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- return@MenuItemCallback listener.onEditText()
- })
- item.menuCallbacks.add(MenuItemCallback { view, annotType ->
- return@MenuItemCallback listener.onCopy()
- })
- kmpdfFactory?.setAnnotationContextMenu(item)
- }
- private fun restoreStateBeforeDestroy() {
- if (isCopyModeLiveData.value == true) {
- startCopyTextMode()
- } else {
- annotationModeLiveData.value?.also {
- val annotationEditMode = when (it) {
- AnnotationMode.None -> KMPDFAnnotationBean.AnnotationType.NULL
- AnnotationMode.Highlight -> KMPDFAnnotationBean.AnnotationType.HIGH_LIGHT
- AnnotationMode.Strike -> KMPDFAnnotationBean.AnnotationType.STRIKE_OUT
- AnnotationMode.Underline -> KMPDFAnnotationBean.AnnotationType.UNDER_LINE
- AnnotationMode.Ink -> KMPDFAnnotationBean.AnnotationType.INK
- }
- kmpdfFactory?.setAnnotationEditMode(annotationEditMode)
- annotationModeLiveData.postValue(it)
- }
- }
- }
- fun saveModifyingAnnotation() {
- kmpdfDocumentController?.saveModifingAnnot()
- }
- fun clearSelection() {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.NULL)
- kmpdfFactory?.kmpdfAnnotEditMode?.pdfAnnotEditMode = KMPDFAnnotEditMode.Mode.NULL
- annotationEitModeLiveData.postValue(KMPDFAnnotEditMode.Mode.NULL)
- }
- fun deleteSelectedTextBox() {
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.FREETEXT) as KMPDFFreeTextController).deleteFreeTextAnnotView()
- }
- fun editSelectedTextBoxStyle() {
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.FREETEXT) as KMPDFFreeTextController).setCurrentFreeTextViewEditMode(0)
- }
- fun editSelectedTextBoxText() {
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.FREETEXT) as KMPDFFreeTextController).setCurrentFreeTextViewEditMode(1)
- }
- fun copySelectedTextBox() {
- (kmpdfFactory?.getController(KMPDFFactory.ControllerType.FREETEXT) as KMPDFFreeTextController).copyFreeTextContent()
- }
- fun setPageIndex(pageIndex: Int){
- mPageIndexLiveData.value = pageIndex
- }
- fun addBookmark(title: String) {
- pageIndexLiveData.value?.let {
- kmpdfDocumentController?.addBookmark(title, it)
- setBookmarkDisplay(it)
- }
- }
- fun deleteBookmark() {
- pageIndexLiveData.value?.let {
- kmpdfDocumentController?.deleteBookmarks(it)
- setBookmarkDisplay(it)
- }
- }
- fun setBookmarkDisplay(pageIndex: Int) {
- kmpdfDocumentController?.let {
- var isPageInBookmarks = false
- it.bookmarks?.let {
- for (bookmark in it) {
- if (bookmark.pageNum == pageIndex) {
- isPageInBookmarks = true
- break
- }
- }
- }
- mIsPageInBookmarksLiveData.value = isPageInBookmarks
- }
- }
- fun temporarySave() {
- kmpdfDocumentController?.temporarySave()
- }
- private fun verifyLicense(context: Context): Boolean {
- val errorCode = KMPDFFactory.verifyLicense(context, pdfSdkLicense, pdfSdkRsaMsg)
- return errorCode == 0
- }
- private fun updateViewDirection() {
- kmpdfDocumentController?.pdfViewMode = viewDirection.mode
- kmpdfDocumentController?.refresh(false)
- }
- private fun updateReadMode() {
- kmpdfDocumentController?.readMode = readMode.mode
- kmpdfDocumentController?.refresh(false)
- kmpdfFactory?.readerView?.context?.also {
- val colorResId = when (readMode) {
- ReadMode.READ_MODE_DAY -> R.color.color_bolder
- ReadMode.READ_MODE_NIGHT -> R.color.black_38
- else -> R.color.color_divier
- }
- kmpdfFactory?.readerView?.setBackgroundColor(ContextCompat.getColor(it, colorResId))
- }
- }
- private fun updateCrop() {
- kmpdfDocumentController?.apply {
- cropMode = isCrop
- refresh(false)
- }
- }
- fun getPageText(pageIndex: Int): List<String> {
- val dc = kmpdfDocumentController ?: return Collections.emptyList()
- val lines = ArrayList<String>()
- dc.textLines(pageIndex).forEach {
- val s = StringBuilder()
- it.forEach { textWord ->
- s.append(textWord.w)
- s.append(" ")
- }
- lines.add(s.toString())
- }
- return lines
- }
- fun setTextBoxAttribute(attr: TextBoxAttribute, modify: Boolean = false) {
- val kmpdfFreetextAnnotationBean = KMPDFFreetextAnnotationBean("", attr.textColor, attr.textSize, 255, "Courier", attr.isBold, attr.isItalic)
- kmpdfFactory?.setAnnotationAttribute(kmpdfFreetextAnnotationBean)
- if (!modify) {
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.FREETEXT)
- }
- }
- fun setSignatureAttribute(attr: SignatureAttribute) {
- val kmpdfSignatureAnnotationBean = KMPDFSignatureAnnotationBean("", attr.path, KMPDFSignatureController.OnSignImageCreateListener {
- println("onSignImageCreated")
- })
- kmpdfFactory?.setAnnotationAttribute(kmpdfSignatureAnnotationBean)
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.SIGNATURE)
- }
- fun setStampAttribute(attr: StampAttribute) {
- val kmpdfStampAnnotationBean = when (attr.isStandardStamp()) {
- true -> KMPDFStampAnnotationBean("", KMPDFStampAnnotationBean.StampType.STANDARD, KMPDFStampAnnotationBean.StandardStamp(attr.resId))
- false -> KMPDFStampAnnotationBean("", KMPDFStampAnnotationBean.StampType.TEXT, KMPDFStampAnnotationBean.TextStamp(attr.config))
- }
- kmpdfFactory?.setAnnotationAttribute(kmpdfStampAnnotationBean)
- kmpdfFactory?.setAnnotationEditMode(KMPDFAnnotationBean.AnnotationType.STAMP)
- }
- fun setShapeAttribute(attr: ShapeAttribute) {
- val kmpdfShapeAnnotationBean = when (attr.shapeType) {
- AnnotConfig.ShapeAnnotationType.LINE -> KMPDFLineAnnotationBean("", attr.lineColor, attr.lineWidth, attr.lineAlpha)
- AnnotConfig.ShapeAnnotationType.ARROW -> KMPDFArrowAnnotationBean("", attr.lineColor, attr.lineWidth, attr.lineAlpha)
- AnnotConfig.ShapeAnnotationType.CIRCLE -> KMPDFCircleAnnotationBean("", attr.lineColor, attr.lineWidth, attr.lineAlpha, attr.fillColor, attr.fillAlpha)
- AnnotConfig.ShapeAnnotationType.SQUARE -> KMPDFSquareAnnotationBean("", attr.lineColor, attr.lineWidth, attr.lineAlpha, attr.fillColor, attr.fillAlpha)
- }
- kmpdfFactory?.setAnnotationAttribute(kmpdfShapeAnnotationBean)
- kmpdfFactory?.setAnnotationEditMode(kmpdfShapeAnnotationBean.type)
- }
- val pdfInfoHandler = object : PdfInfoHandler {
- override fun getOpenPdfFilename(): String {
- return kmpdfFactory?.fileName ?: ""
- }
- override fun getPdfPageCount(isNativeRefresh: Boolean): Int {
- return kmpdfDocumentController?.getDocumentPageCount(isNativeRefresh) ?: 0
- }
- override fun getCurrentPage(): Int {
- return kmpdfDocumentController?.currentPageNum ?: 0
- }
- override fun setCurrentPage(page: Int): Boolean {
- return kmpdfDocumentController?.gotoPage(page) ?: false
- }
- override fun textLines(page: Int): Array<Array<TextWord>> {
- return kmpdfDocumentController?.textLines(page) ?: arrayOf()
- }
- }
- val thumbnailHandler = object : ThumbnailHandler {
- override fun getPdfBitmap(position: Int, picWidth: Int, mode: Int, isDrawAnnot: Boolean): Bitmap {
- return kmpdfDocumentController?.covertPDFToBitmap(position, picWidth, mode, isDrawAnnot) ?: Bitmap.createBitmap(0, 0, Bitmap.Config.ARGB_4444)
- }
- }
- val bookmarkHandler = object : BookmarkHandler {
- override fun getBookmarks(): Array<Bookmark> {
- return kmpdfDocumentController?.bookmarks ?: arrayOf()
- }
- }
- val outlineHandler = object : OutlineHandler {
- override fun getOutline(): Array<OutlineItem> {
- return kmpdfDocumentController?.outline ?: arrayOf()
- }
- }
- val searchHandler = object : SearchHandler {
- override fun searchPage(page: Int, keyword: String): Array<RectF> {
- return kmpdfDocumentController?.searchPage(page, keyword) ?: arrayOf()
- }
- override fun cleanPreviousSearchResults(keyword: String): Boolean {
- return kmpdfDocumentController?.cleanPreviousSearchResults(keyword) ?: false
- }
- override fun setSearchResult(page: Int, keyword: String, rectArray: Array<RectF>): Boolean {
- return kmpdfDocumentController?.setSearchResult(keyword, page, rectArray) ?: false
- }
- override fun stopSearchKeyWord(): Boolean {
- return kmpdfDocumentController?.stopSearchKeyWord() ?: false
- }
- }
- }
|