123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182 |
- package com.kdanmobile.reader
- import android.annotation.SuppressLint
- import android.app.Activity
- import android.app.Dialog
- import android.arch.lifecycle.Observer
- import android.arch.lifecycle.ViewModelProviders
- import android.content.Intent
- import android.net.Uri
- import android.os.Build
- import android.os.Bundle
- import android.support.constraint.ConstraintLayout
- import android.support.constraint.ConstraintSet
- import android.support.design.widget.Snackbar
- import android.support.v4.content.ContextCompat
- import android.support.v7.app.AlertDialog
- import android.support.v7.app.AppCompatActivity
- import android.util.DisplayMetrics
- import android.view.*
- import android.view.animation.AnimationUtils
- import android.widget.EditText
- import android.widget.LinearLayout
- import android.widget.TextView
- import android.widget.Toast
- import com.kdanmobile.kmpdfkit.globaldata.KMPDFAnnotEditMode
- import com.kdanmobile.kmpdfkit.pdfcommon.KMPDFReaderView
- import com.kdanmobile.kmpdfkit.pdfcommon.PDFInfo
- import com.kdanmobile.reader.Utils.applyConstraintSet
- import com.kdanmobile.reader.annotationattribute.AnnotationAttribute
- import com.kdanmobile.reader.annotationattribute.AnnotationColor
- import com.kdanmobile.reader.annotationattribute.InkAttribute
- import com.kdanmobile.reader.password.DialogPasswordActivity
- import com.kdanmobile.reader.screen.contextmenu.TextBoxContextMenuActionListener
- import com.kdanmobile.reader.screen.model.SharePrefsModel
- import com.kdanmobile.reader.screen.reader.mediabox.MediaBoxView
- import com.kdanmobile.reader.screen.reader.mediabox.shape.ShapeTabView
- import com.kdanmobile.reader.screen.reader.mediabox.signature.SignatureTabView
- import com.kdanmobile.reader.screen.reader.mediabox.stamp.StampTabView
- import com.kdanmobile.reader.screen.reader.mediabox.textbox.TextBoxTabView
- import com.kdanmobile.reader.screen.view.*
- import com.kdanmobile.reader.setting.ReaderSettingDialogFragment
- import com.kdanmobile.reader.setting.ReaderSettingListener
- import com.kdanmobile.reader.thumb.FileUtil
- import com.kdanmobile.reader.thumb.PdfThumbDialogFragment
- import com.kdanmobile.reader.thumb.PdfThumbFragmentListener
- import com.kdanmobile.reader.utils.AnimationUtil
- import com.kdanmobile.reader.utils.DensityUtil
- import com.kdanmobile.reader.utils.UriToPathUtil
- import com.kdanmobile.reader.view.AnnotationAttributeView
- import com.kdanmobile.reader.view.AnnotationAttributeWindow
- import kotlinx.android.synthetic.main.activity_reader.*
- import java.io.File
- import java.util.*
- import kotlin.properties.Delegates
- abstract class ReaderActivity : AppCompatActivity(), ReaderSettingListener, PdfThumbFragmentListener {
- /**
- * If return true, ReaderActivity.onBackPressed will not run
- */
- abstract fun onBackPressedWhenNothingCanClose(): Boolean
- abstract fun onClickShare()
- abstract fun onClickKdanCloud()
- abstract fun onClickTextReflow()
- abstract fun onClickFileInfo()
- abstract fun onClickIBonPrint()
- abstract fun onClickPrint()
- abstract fun onClickUserGuide()
- abstract fun provideReaderSettingDialogFragment(): ReaderSettingDialogFragment
- abstract fun providePdfThumbDialogFragment(): PdfThumbDialogFragment
- abstract fun getKdanPdfReaderFolder(): File
- abstract fun isIBonPrintEnabled(): Boolean
- open fun isBottomBarKdanCloudBtnVisible(): Boolean { return true }
- open fun insertToRecentDocumentList(filename: String) {}
- open fun saveCurrentPageIndex(filename: String, currentPage: Int) {}
- open fun loadCurrentPageIndex(filename: String, defaultValue: Int): Int = 0
- open fun onOpenedFile() { /* do nothing */ }
- companion object {
- const val KEY_FILE_ABSOLUTE = "file_absolutepath"
- const val REQUEST_PASSWORD = 222
- }
- protected val file: File?
- get() {
- return viewModel.file
- }
- protected var filePath: String? = null
- private set
- protected val pdfInfo: PDFInfo?
- get() {
- return viewModel.pdfInfo
- }
- protected val isPasswordProtected: Boolean
- get() {
- return viewModel.isPasswordProtected
- }
- protected val currentPageIndex: Int
- get() {
- return viewModel.pdfInfoHandler.getCurrentPage()
- }
- protected val pageCount: Int
- get() {
- return viewModel.pdfInfoHandler.getPdfPageCount()
- }
- protected val password: String
- get() {
- return viewModel.password
- }
- protected val readerModel: ReaderModel
- get() {
- return viewModel.readerModel
- }
- private lateinit var viewModel: ReaderViewModel
- private var isShowPasswordActivity = false
- // For hide/show toolbars
- private var isHideToolbar = false
- private lateinit var originConstraintSet: ConstraintSet
- private var menuItemBookmark: MenuItem? = null
- private val UI_ANIMATION_DURATION = 300L
- private val FRAGMENT_READER_SETTING_TAG = "ReaderSetting"
- private val FRAGMENT_PDF_THUMB_TAG = "PdfThumb"
- private var w_318: Int = 0
- private var w_240: Int = 0
- private var w_left: Int = 0
- private var oldLeftToolbarType = ReaderViewModel.LeftToolbarType.NONE
- private var snackbarMediaBox: Snackbar? = null
- private var fileCannotOpenDialog: AlertDialog? = null
- private var isHidePdfPage: Boolean by Delegates.observable(false) { property, oldValue, newValue ->
- if (newValue == oldValue) return@observable
- // println("${property.name} changed from $oldValue to $newValue")
- tv_readerActivity_pdfPage.clearAnimation()
- when (newValue) {
- true -> tv_readerActivity_pdfPage.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out))
- false -> tv_readerActivity_pdfPage.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in))
- }
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
- setContentView(R.layout.activity_reader)
- setSupportActionBar(toolbar_readerActivity)
- isShowPasswordActivity = savedInstanceState?.getBoolean("isShowPasswordActivity") ?: false
- filePath = savedInstanceState?.getString("filePath")
- val copyFile = intent.getBooleanExtra("copyFile", true)
- val displayMetrics = DisplayMetrics()
- windowManager.defaultDisplay.getMetrics(displayMetrics)
- val width = Math.min(DensityUtil.getScreenWidthPx(baseContext), DensityUtil.getScreenHeightPx(baseContext))
- w_318 = 318 * width / 800
- w_240 = 240 * width / 800
- w_left = resources.getDimension(R.dimen.reader_left_right_toolbar_icon_width).toInt()
- cloneOriginConstraintSet()
- setupToolbar()
- setupRightSideToolbar()
- setupMediaBoxView()
- FileUtil.init(getKdanPdfReaderFolder())
- val factory = ReaderViewModelFactory()
- viewModel = ViewModelProviders.of(this, factory).get(ReaderViewModel::class.java)
- viewModel.isOpenedFileLiveData.observe(this, Observer(this::onIsOpenedFileUpdate))
- viewModel.fileNameLiveData.observe(this, Observer { supportActionBar?.title = it })
- viewModel.annotationModeLiveData.observe(this, Observer(this::onAnnotationModeUpdate))
- viewModel.annotationEitModeLiveData.observe(this, Observer(this::onAnnotationEditModeUpdate))
- viewModel.isCopyModeLiveData.observe(this, Observer (this::onIsCopyModeUpdate))
- viewModel.highLightAttributeLiveData.observe(this, Observer(this::onHighlightAttributeUpdate))
- viewModel.strikeAttributeLiveData.observe(this, Observer(this::onStrikeAttributeUpdate))
- viewModel.underLineAttributeLiveData.observe(this, Observer(this::onUnderlineAttributeUpdate))
- viewModel.inkAttributeLiveData.observe(this, Observer(this::onInkAttributeUpdate))
- viewModel.isOpenedFileLiveData.value?.also { isOpened ->
- val hasOpened = null != filePath
- if (isShowPasswordActivity) return@also
- if (isOpened) return@also
- filePath = if (intent.action == Intent.ACTION_VIEW) {
- UriToPathUtil.getInstance().getPath(applicationContext, intent.data)
- } else {
- intent.getStringExtra(KEY_FILE_ABSOLUTE)
- }
- if (!hasOpened) {
- val copyMode = if (copyFile) FileUtil.CopyMode.CREATE_NEW_FILE else FileUtil.CopyMode.DO_NOTHING
- if (!filePath.isNullOrEmpty()) {
- filePath = FileUtil.copyFileToKdanPdfReaderFolder(filePath as String, copyMode)
- } else if (intent.action == Intent.ACTION_VIEW && null != intent.data) {
- filePath = FileUtil.saveFileToKdanPdfReaderFolder(this, intent.data!!, copyMode)
- }
- if (!filePath.isNullOrEmpty()) {
- insertToRecentDocumentList(filePath as String)
- }
- }
- if (filePath.isNullOrEmpty()) {
- showFileCannotOpenDialog(getString(R.string.cannot_open_buffer))
- } else {
- val result = viewModel.openPdfFile(this@ReaderActivity, Uri.parse(filePath), password, Runnable { requestPassword() }, intent.type)
- if (result == ReaderViewModel.OpenFileResult.FAILED) {
- showFileCannotOpenDialog(getString(R.string.cannot_open_file_Path, filePath))
- }
- }
- }
- setupLeftToolbar()
- setupRightToolbar()
- setupBottomToolbar()
- viewModel.pageIndexLiveData.observe(this, Observer(this::onPageIndexChanged))
- viewModel.isPageInBookmarksLiveData.observe(this, Observer(this::onIsPageInBookmarksChanged))
- viewModel.isLeftToolbarOpenLiveData.observe(this, Observer(this::onLeftToolbarOpenStateChanged))
- viewModel.leftToolbarTypeLiveData.observe(this, Observer(this::onLeftToolbarTypeChanged))
- isHidePdfPage = true
- applySetting()
- setupPdfChangedListener()
- }
- private fun showFileCannotOpenDialog(title: String) {
- fileCannotOpenDialog = AlertDialog.Builder(this)
- .setTitle(title)
- .setCancelable(false)
- .setPositiveButton(getString(android.R.string.ok)) { dialog, which ->
- finish()
- }
- .create()
- fileCannotOpenDialog?.show()
- }
- override fun onDestroy() {
- fileCannotOpenDialog?.dismiss()
- super.onDestroy()
- }
- override fun onSaveInstanceState(outState: Bundle?) {
- super.onSaveInstanceState(outState)
- outState?.putBoolean("isShowPasswordActivity", isShowPasswordActivity)
- outState?.putString("filePath", filePath)
- }
- private fun requestPassword(isIncorrectPassword: Boolean = false) {
- isShowPasswordActivity = true
- val intent = Intent(baseContext, DialogPasswordActivity::class.java)
- val bundle = Bundle()
- bundle.putBoolean("isIncorrectPassword", isIncorrectPassword)
- intent.putExtras(bundle)
- startActivityForResult(intent, REQUEST_PASSWORD)
- }
- fun isPdf(): Boolean {
- var isPdf = filePath?.toLowerCase(Locale.US)?.endsWith(".pdf") ?: false
- // TODO this workaround should be removed in the future
- // workaround: password-protected pdf is not editable
- isPdf = isPdf && !isPasswordProtected
- return isPdf
- }
- final override fun onBackPressed() {
- when {
- mediaBoxView.isShown -> mediaBoxView.dismiss()
- onBackPressedWhenNothingCanClose() -> { /** do nothing **/ }
- else -> super.onBackPressed()
- }
- }
- override fun onCreateOptionsMenu(menu: Menu?): Boolean {
- menuInflater.inflate(R.menu.reader_more, menu)
- menuItemBookmark = menu?.findItem(R.id.item_reader_bookmark)
- onIsPageInBookmarksChanged(viewModel.isPageInBookmarksLiveData.value)
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
- menu?.findItem(R.id.item_reader_more_print)?.isVisible = false
- }
- if (!isPdf()) {
- menu?.apply {
- findItem(R.id.item_reader_more_text_reflow)?.isVisible = false
- findItem(R.id.item_reader_more_clear_signature)?.isVisible = false
- findItem(R.id.item_reader_more_file_info)?.isVisible = false
- findItem(R.id.item_reader_more_print)?.isVisible = false
- findItem(R.id.item_ibon_print)?.isVisible = false
- }
- menuItemBookmark?.isVisible = false
- }
- if (!isIBonPrintEnabled()) {
- menu?.findItem(R.id.item_ibon_print)?.isVisible = false
- }
- return true
- }
- @SuppressLint("RestrictedApi")
- override fun onPrepareOptionsPanel(view: View?, menu: Menu?): Boolean {
- /** Force show action menu item icon **/
- menu?.also {
- if ("MenuBuilder" != it::javaClass.get().simpleName) return@also
- try {
- val method = it.javaClass.getDeclaredMethod("setOptionalIconsVisible", java.lang.Boolean.TYPE)
- method.isAccessible = true
- method.invoke(it, true)
- } catch (e: Exception) {
- // Do nothing
- }
- }
- return super.onPrepareOptionsPanel(view, menu)
- }
- protected fun getPageText(pageIndex: Int) = viewModel.getPageText(pageIndex)
- private fun cloneOriginConstraintSet() {
- if (!isBelowKitkat()) {
- originConstraintSet = ConstraintSet().apply {
- clone(constrainLayout_readerActivity_root)
- }
- }
- }
- private fun onIsCopyModeUpdate(isCopyMode: Boolean?) {
- if (isCopyMode == null) return
- when (isCopyMode) {
- true -> hideTopLeftBottomToolbars()
- false -> showAllToolbars()
- }
- }
- private fun onHighlightAttributeUpdate(annotationAttribute: AnnotationAttribute?) {
- if (annotationAttribute == null) return
- view_readerActivity_highLightStroke.setBackgroundColor(annotationAttribute.color)
- }
- private fun onStrikeAttributeUpdate(annotationAttribute: AnnotationAttribute?) {
- if (annotationAttribute == null) return
- view_readerActivity_strikeStroke.setBackgroundColor(annotationAttribute.color)
- }
- private fun onUnderlineAttributeUpdate(annotationAttribute: AnnotationAttribute?) {
- if (annotationAttribute == null) return
- view_readerActivity_underlineStroke.setBackgroundColor(annotationAttribute.color)
- }
- private fun onInkAttributeUpdate(inkAttribute: InkAttribute?) {
- if (inkAttribute == null) return
- val color = inkAttribute.color
- AnnotationColor.values().forEach {
- if (ContextCompat.getColor(this, it.colorResId) == color) {
- val drawableResId = when (it) {
- AnnotationColor.Color1 -> R.drawable.ic_reader_right_toolbar_ink_color1
- AnnotationColor.Color2 -> R.drawable.ic_reader_right_toolbar_ink_color2
- AnnotationColor.Color3 -> R.drawable.ic_reader_right_toolbar_ink_color3
- AnnotationColor.Color4 -> R.drawable.ic_reader_right_toolbar_ink_color4
- AnnotationColor.Color5 -> R.drawable.ic_reader_right_toolbar_ink_color5
- AnnotationColor.Color6 -> R.drawable.ic_reader_right_toolbar_ink_color6
- AnnotationColor.Color7 -> R.drawable.ic_reader_right_toolbar_ink_color7
- AnnotationColor.Color8 -> R.drawable.ic_reader_right_toolbar_ink_color8
- AnnotationColor.Color9 -> R.drawable.ic_reader_right_toolbar_ink_color9
- AnnotationColor.Color10 -> R.drawable.ic_reader_right_toolbar_ink_color10
- }
- iv_readerActivity_ink.setImageResource(drawableResId)
- return
- }
- }
- }
- private fun onAnnotationModeUpdate(annotationMode: ReaderViewModel.AnnotationMode?) {
- if (annotationMode == null) return
- if (viewModel.isCrop) return
- val map = HashMap<ReaderViewModel.AnnotationMode, View>().apply {
- put(ReaderViewModel.AnnotationMode.Highlight, iv_readerActivity_highLight)
- put(ReaderViewModel.AnnotationMode.Strike, iv_readerActivity_strike)
- put(ReaderViewModel.AnnotationMode.Underline, iv_readerActivity_underline)
- put(ReaderViewModel.AnnotationMode.Ink, iv_readerActivity_ink)
- }
- map.forEach {
- if (it.key == annotationMode) {
- val color = ContextCompat.getColor(this, R.color.reader_right_toolbar_selected_bg)
- it.value.setBackgroundColor(color)
- } else {
- it.value.setBackgroundDrawable(null)
- }
- }
- when (annotationMode == ReaderViewModel.AnnotationMode.None) {
- true -> showAllToolbars()
- false -> hideTopLeftBottomToolbars()
- }
- readerModel.onPdfChangedListener?.onPageUpdated(arrayListOf(currentPageIndex))
- }
- private fun onAnnotationEditModeUpdate(mode: KMPDFAnnotEditMode.Mode?) {
- when (mode) {
- KMPDFAnnotEditMode.Mode.NULL -> {
- showAllToolbars()
- isHideToolbar = false
- snackbarMediaBox?.dismiss()
- snackbarMediaBox = null
- }
- KMPDFAnnotEditMode.Mode.SIGN_MODIFY -> {
- hideAllToolbars()
- isHideToolbar = true
- }
- KMPDFAnnotEditMode.Mode.FREETEXT_MODIFY, KMPDFAnnotEditMode.Mode.STAMP_MODIFY, KMPDFAnnotEditMode.Mode.SHAPE_MODIFY -> {
- hideAllToolbars()
- isHideToolbar = true
- snackbarMediaBox?.dismiss()
- snackbarMediaBox = null
- }
- else -> {}
- }
- isHidePdfPage = true
- readerModel.onPdfChangedListener?.onPageUpdated(arrayListOf(currentPageIndex))
- }
- private fun onIsOpenedFileUpdate(isOpened: Boolean?) {
- if (isOpened == null) return
- val container = viewGroup_readerActivity_container
- container.removeAllViews()
- if (!isOpened) return
- val context = this
- val readerView = object : KMPDFReaderView(context) {
- @SuppressLint("ClickableViewAccessibility")
- override fun onTouchEvent(motionEvent: MotionEvent): Boolean {
- if (motionEvent.action == MotionEvent.ACTION_UP) {
- if (viewModel.isCopyModeLiveData.value == true) {
- if (viewModel.copySelection()) {
- val context = this@ReaderActivity
- Toast.makeText(context, R.string.reader_copy_text_success, Toast.LENGTH_SHORT).show()
- }
- }
- }
- return super.onTouchEvent(motionEvent)
- }
- override fun onTapMainDocArea() {
- super.onTapMainDocArea()
- when (isHideToolbar) {
- true -> {
- showAllToolbars()
- viewModel.clearSelection()
- }
- false -> hideAllToolbars()
- }
- isHideToolbar = !isHideToolbar
- }
- override fun onMoveToChild(pageIndex: Int) {
- super.onMoveToChild(pageIndex)
- viewModel.setPageIndex(pageIndex)
- }
- override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
- val isEditMode = viewModel.annotationModeLiveData.value != ReaderViewModel.AnnotationMode.None
- val isCopyMode = viewModel.isCopyModeLiveData.value != false
- if (!isEditMode && !isCopyMode && !isHideToolbar) {
- hideAllToolbars()
- isHideToolbar = true
- }
- isHidePdfPage = isEditMode || isCopyMode
- return super.onScroll(e1, e2, distanceX, distanceY)
- }
- }
- viewModel.setReaderView(readerView)
- if (!filePath.isNullOrEmpty()) {
- val defaultValue = viewModel.pageIndexLiveData.value ?: 0
- val pageIndex = loadCurrentPageIndex(filePath as String, defaultValue)
- viewModel.pdfInfoHandler.setCurrentPage(pageIndex)
- viewModel.fileNameLiveData.postValue(File(filePath as String).name)
- }
- initTextBoxContextMenuActions()
- container.addView(readerView)
- val model = SharePrefsModel(this)
- onReadModeChanged(model.readMode.value ?: 0)
- if (model.isCropModeEnable.value == true) {
- readerView.post {
- onCropModeEnableChanged(true)
- }
- }
- onOpenedFile()
- }
- private fun initTextBoxContextMenuActions() {
- viewModel.setTextBoxContextMenuActions(object : TextBoxContextMenuActionListener {
- override fun onDelete(): Boolean {
- viewModel.deleteSelectedTextBox()
- return true
- }
- override fun onEditStyle(): Boolean {
- mediaBoxView.showTextBoxStyleView()
- viewModel.editSelectedTextBoxStyle()
- return true
- }
- override fun onEditText(): Boolean {
- hideAllToolbars()
- isHideToolbar = true
- viewModel.editSelectedTextBoxText()
- return true
- }
- override fun onCopy(): Boolean {
- viewModel.copySelectedTextBox()
- return true
- }
- })
- }
- override fun onStop() {
- viewModel.saveModifyingAnnotation()
- viewModel.temporarySave()
- if (!filePath.isNullOrEmpty()) {
- saveCurrentPageIndex(filePath as String, currentPageIndex)
- }
- super.onStop()
- }
- override fun onResume() {
- super.onResume()
- viewModel.restoreAnnotationEditMode()
- }
- private fun onPageIndexChanged(pageIndex: Int?) {
- pageIndex?.also {
- viewModel.setBookmarkDisplay(pageIndex)
- readerModel.onPdfChangedListener?.onPageSelected(pageIndex)
- tv_readerActivity_pdfPage.post {
- tv_readerActivity_pdfPage.text="${(pageIndex) + 1}/${viewModel.pdfInfoHandler.getPdfPageCount()}"
- }
- }
- }
- private fun onIsPageInBookmarksChanged(isPageInBookmarks: Boolean?) {
- isPageInBookmarks?.let {
- if (it) {
- menuItemBookmark?.icon = ContextCompat.getDrawable(this, R.drawable.ic_bookmark_fill)
- } else {
- menuItemBookmark?.icon = ContextCompat.getDrawable(this, R.drawable.ic_bookmark_border)
- }
- }
- }
- private fun isBelowKitkat(): Boolean {
- return true
- // return Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT
- }
- private fun showAllToolbars() {
- if (isBelowKitkat()) {
- val duration = ((1 - toolbar_readerActivity.alpha) * UI_ANIMATION_DURATION).toLong()
- AnimationUtil.showViewFromTopToBottom(toolbar_readerActivity, duration)
- AnimationUtil.showViewFromBottomToTop(viewGroup_readerActivity_bottomToolbar, duration)
- AnimationUtil.showViewFromLeftToRight(viewGroup_readerActivity_leftToolbar, duration)
- AnimationUtil.showViewFromRightToLeft(viewGroup_readerActivity_rightToolbar, duration)
- } else {
- constrainLayout_readerActivity_root.applyConstraintSet(originConstraintSet, UI_ANIMATION_DURATION)
- }
- isHidePdfPage = true
- }
- private fun hideAllToolbars() {
- if (isBelowKitkat()) {
- val duration = (toolbar_readerActivity.alpha * UI_ANIMATION_DURATION).toLong()
- AnimationUtil.hideViewFromBottomToTop(toolbar_readerActivity, duration)
- AnimationUtil.hideViewFromTopToBottom(viewGroup_readerActivity_bottomToolbar, duration)
- AnimationUtil.hideViewFromRightToLeft(viewGroup_readerActivity_leftToolbar, duration)
- AnimationUtil.hideViewFromLeftToRight(viewGroup_readerActivity_rightToolbar, duration)
- hideSearchViewSoftKeyboard()
- } else {
- constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_all, UI_ANIMATION_DURATION)
- }
- }
- private fun hideTopLeftBottomToolbars() {
- if (isBelowKitkat()) {
- val duration = (toolbar_readerActivity.alpha * UI_ANIMATION_DURATION).toLong()
- AnimationUtil.hideViewFromBottomToTop(toolbar_readerActivity, duration)
- AnimationUtil.hideViewFromTopToBottom(viewGroup_readerActivity_bottomToolbar, duration)
- AnimationUtil.hideViewFromRightToLeft(viewGroup_readerActivity_leftToolbar, duration)
- hideSearchViewSoftKeyboard()
- } else {
- constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_top_left_bottom, UI_ANIMATION_DURATION)
- }
- }
- private fun setupPdfChangedListener() {
- readerModel.onPdfChangedListener = object : OnPdfChangedListener {
- override fun onPageCreated(pages: List<Int>) {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- override fun onPageDeleted(pages: List<Int>) {
- val view = linearLayout_readerActivity_leftToolbarContainer.getChildAt(0)
- if (view is LeftToolbarView) {
- view.updateContent()
- view.onScrollToContent(currentPageIndex, true)
- }
- }
- override fun onPageSelected(pageIndex: Int) {
- val view = linearLayout_readerActivity_leftToolbarContainer.getChildAt(0)
- if (view is LeftToolbarView) {
- view.onScrollToContent(currentPageIndex, true)
- }
- }
- override fun onPageUpdated(pages: List<Int>) {
- val view = linearLayout_readerActivity_leftToolbarContainer.getChildAt(0)
- if (view is LeftToolbarView) {
- view.updateContent()
- view.onScrollToContent(currentPageIndex, true)
- }
- }
- }
- }
- private fun updateBookmarkView() {
- val view = linearLayout_readerActivity_leftToolbarContainer.getChildAt(0)
- if (view is BookmarkView) {
- view.updateContent()
- view.onScrollToContent(currentPageIndex, true)
- }
- }
- private fun setupToolbar() {
- toolbar_readerActivity.setNavigationOnClickListener { finish() }
- toolbar_readerActivity.setOnMenuItemClickListener {
- when (it.itemId) {
- R.id.item_reader_bookmark -> onClickBookmark()
- R.id.item_reader_more_text_reflow -> onClickTextReflow()
- R.id.item_reader_more_file_info -> onClickFileInfo()
- R.id.item_ibon_print -> onClickIBonPrint()
- R.id.item_reader_more_print -> onClickPrint()
- R.id.item_reader_more_user_guide -> onClickUserGuide()
- R.id.item_reader_more_clear_signature -> onClickClearSignature()
- }
- return@setOnMenuItemClickListener true
- }
- }
- private fun onClickBookmark() {
- viewModel.isPageInBookmarksLiveData.value?.let {
- if (!it) {
- showAddBookmarkDialog()
- } else {
- showDeleteBookmarkDialog()
- }
- }
- }
- private fun onClickClearSignature() {
- AlertDialog.Builder(this)
- .setMessage(R.string.reader_clear_signature_dialog_msg)
- .setPositiveButton(android.R.string.yes) { _, _ -> viewModel.clearSignature() }
- .setNegativeButton(android.R.string.no) { _, _ -> /* do nothing */ }
- .show()
- }
- private fun showAddBookmarkDialog() {
- val alertDialogBuilder = AlertDialog.Builder(this)
- val editText = EditText(this)
- val layoutParams =
- LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
- editText.layoutParams = layoutParams
- val defaultTitle = getString(R.string.dialogAddBookmark_page) + " " + (viewModel.pdfInfoHandler.getCurrentPage() + 1)
- editText.setText(defaultTitle, TextView.BufferType.EDITABLE)
- editText.setSelection(0, defaultTitle.length)
- alertDialogBuilder.setTitle(getString(R.string.reader_alert_dialog_title_add_bookmark))
- alertDialogBuilder.setView(editText)
- alertDialogBuilder.setPositiveButton(getString(R.string.reader_alert_dialog_button_confirm)) { dialog, which ->
- viewModel.addBookmark(editText.text.toString())
- updateBookmarkView()
- }
- alertDialogBuilder.setNegativeButton(getString(R.string.reader_alert_dialog_button_cancel)) { dialog, which ->
- }
- alertDialogBuilder.create().show()
- editText.requestFocus()
- }
- private fun getBookmarkTitle(page: Int): String {
- val bookmarks = viewModel.bookmarkHandler.getBookmarks()
- for (bookmark in bookmarks) {
- if (bookmark.pageNum == page) {
- return bookmark.title
- }
- }
- return ""
- }
- private fun showDeleteBookmarkDialog() {
- val alertDialogBuilder = AlertDialog.Builder(this)
- alertDialogBuilder.setTitle(getString(R.string.reader_alert_dialog_title_delete_bookmark))
- val bookmarkTitle = getBookmarkTitle(viewModel.pdfInfoHandler.getCurrentPage())
- val message = String.format(getString(R.string.reader_alert_dialog_message_delete_bookmark), bookmarkTitle)
- alertDialogBuilder.setMessage(message)
- alertDialogBuilder.setPositiveButton(getString(R.string.reader_alert_dialog_button_confirm)) { dialog, which ->
- viewModel.deleteBookmark()
- updateBookmarkView()
- }
- alertDialogBuilder.setNegativeButton(getString(R.string.reader_alert_dialog_button_cancel)) { dialog, which ->
- }
- alertDialogBuilder.create().show()
- }
- private fun hideSearchViewSoftKeyboard() {
- val view = linearLayout_readerActivity_leftToolbarContainer.getChildAt(0)
- if (view is SearchView) {
- view.hideSoftKeyboard()
- }
- }
- private fun setupLeftToolbar() {
- viewGroup_readerActivity_leftToolbar.setScroll(false)
- setLeftToolbarWidth(w_240)
- viewGroup_readerActivity_leftToolbar.smoothScrollTo(w_240, 0, 0)
- val child = layoutInflater.inflate(R.layout.view_thumbnail, null)
- linearLayout_readerActivity_leftToolbarContainer.addView(child)
- fun onClickLeftToolbarItem(leftToolbarType: ReaderViewModel.LeftToolbarType) {
- viewModel.setLeftToolbarType(leftToolbarType)
- updateLeftToolbarOpenState(leftToolbarType)
- }
- iv_readerActivity_thumbnail.setOnClickListener { onClickLeftToolbarItem(ReaderViewModel.LeftToolbarType.THUMBNAIL) }
- iv_readerActivity_bookmark.setOnClickListener { onClickLeftToolbarItem(ReaderViewModel.LeftToolbarType.BOOKMARK) }
- iv_readerActivity_outline.setOnClickListener { onClickLeftToolbarItem(ReaderViewModel.LeftToolbarType.OUTLINE) }
- iv_readerActivity_search.setOnClickListener { onClickLeftToolbarItem(ReaderViewModel.LeftToolbarType.SEARCH) }
- if (!isPdf()) {
- iv_readerActivity_bookmark.visibility = View.GONE
- if (!isPasswordProtected) iv_readerActivity_outline.visibility = View.GONE
- }
- }
- override fun onReadModeChanged(readMode: Int) {
- viewModel.readMode = when (readMode) {
- ReadingModeSelectView.modeDay -> ReaderViewModel.ReadMode.READ_MODE_DAY
- ReadingModeSelectView.modeNight -> ReaderViewModel.ReadMode.READ_MODE_NIGHT
- ReadingModeSelectView.modeSoft -> ReaderViewModel.ReadMode.READ_MODE_SOFT
- ReadingModeSelectView.modeChromeWhite -> ReaderViewModel.ReadMode.MODE_CHROME_WHITE
- ReadingModeSelectView.modeEtonBlue -> ReaderViewModel.ReadMode.MODE_ETON_BLUE
- ReadingModeSelectView.modeWhiteLilac -> ReaderViewModel.ReadMode.MODE_WHITE_LILAC
- else -> ReaderViewModel.ReadMode.READ_MODE_DAY
- }
- }
- override fun onCropModeEnableChanged(enable: Boolean) {
- viewModel.isCrop = enable
- val buttons = arrayOf(iv_readerActivity_highLight, iv_readerActivity_strike, iv_readerActivity_underline, iv_readerActivity_ink, ib_readerActivity_bottomToolbarMediaBox)
- if (enable) {
- viewModel.stopAnnotationMode()
- val color = ContextCompat.getColor(baseContext, R.color.reader_right_toolbar_disabled_bg)
- for (button in buttons) {
- button.isEnabled = false
- button.setBackgroundColor(color)
- }
- } else {
- for (button in buttons) {
- button.isEnabled = true
- button.setBackgroundDrawable(null)
- }
- }
- }
- override fun onShowStateBarEnableChanged(enable: Boolean, dialog: Dialog?) {
- when (enable) {
- true -> {
- dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
- window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
- }
- false -> {
- dialog?.window?.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
- window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
- }
- }
- }
- override fun onTurnPageDirectionChanged(direction: Int) {
- viewModel.viewDirection = when (direction == 0) {
- true -> ReaderViewModel.ViewDirection.VerticalSinglePageContinues
- false -> ReaderViewModel.ViewDirection.HorizontalSinglePage
- }
- }
- override fun onShowTurnPageBtnEnableChanged(enable: Boolean) {
- when (enable) {
- true -> {
- ib_readerActivity_bottomToolbarPrevious.visibility = View.VISIBLE
- ib_readerActivity_bottomToolbarNext.visibility = View.VISIBLE
- }
- false -> {
- ib_readerActivity_bottomToolbarPrevious.visibility = View.GONE
- ib_readerActivity_bottomToolbarNext.visibility = View.GONE
- }
- }
- }
- override fun onLockScreenSleepEnableChanged(enable: Boolean) {
- when (enable) {
- true -> window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- false -> window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- }
- }
- override fun onShowCommentToolEnableChanged(enable: Boolean) {
- }
- override fun onShowBOTAToolEnableChanged(enable: Boolean) {
- }
- private fun setupRightSideToolbar() {
- iv_readerActivity_setting.setOnClickListener {
- val settingDialog = provideReaderSettingDialogFragment()
- settingDialog.show(supportFragmentManager, FRAGMENT_READER_SETTING_TAG)
- }
- }
- private fun applySetting() {
- val model = SharePrefsModel(this)
- onShowStateBarEnableChanged(model.isShowStateBarEnable.value ?: false, null)
- onTurnPageDirectionChanged(model.turnPageDirection.value ?: 0)
- onShowTurnPageBtnEnableChanged(model.isShowTurnPageBtnEnable.value ?: false)
- onLockScreenSleepEnableChanged(model.isLockScreenSleepEnable.value ?: false)
- onShowCommentToolEnableChanged(model.isShowCommentToolEnable.value ?: false)
- onShowBOTAToolEnableChanged(model.isShowBOTAToolEnable.value ?: false)
- }
- override fun isShowStateBar(): Boolean {
- return SharePrefsModel(this).isShowStateBarEnable.value ?: false
- }
- private fun setupBottomToolbar() {
- ib_readerActivity_bottomToolbarMediaBox.setOnClickListener { mediaBoxView.show() }
- ib_readerActivity_bottomToolbarViewAll.setOnClickListener {
- onClickBottomThumb1()
- }
- ib_readerActivity_bottomToolbarPrevious.setOnClickListener {
- val handler = viewModel.pdfInfoHandler
- val pageIndex = handler.getCurrentPage()
- val previousPageIndex = Math.max(pageIndex - 1, 0)
- handler.setCurrentPage(previousPageIndex)
- }
- ib_readerActivity_bottomToolbarNext.setOnClickListener {
- val handler = viewModel.pdfInfoHandler
- val pageIndex = handler.getCurrentPage()
- val nextPageIndex = Math.min(pageIndex + 1, handler.getPdfPageCount() - 1)
- handler.setCurrentPage(nextPageIndex)
- }
- ib_readerActivity_bottomToolbarKdanCloud.visibility = if (isBottomBarKdanCloudBtnVisible()) {
- View.VISIBLE
- } else {
- View.GONE
- }
- ib_readerActivity_bottomToolbarKdanCloud.setOnClickListener {
- onClickKdanCloud()
- }
- ib_readerActivity_bottomToolbarShare.setOnClickListener {
- onClickShare()
- }
- if (!isPdf()) {
- ib_readerActivity_bottomToolbarMediaBox.visibility = View.GONE
- }
- }
- private fun setupMediaBoxView() {
- fun showSnackbar(title: String, btnText: String) {
- snackbarMediaBox = Snackbar.make(mediaBoxView, title, Snackbar.LENGTH_INDEFINITE)
- .setAction(btnText) {
- viewModel.clearSelection()
- mediaBoxView.post {
- mediaBoxView.show()
- snackbarMediaBox?.dismiss()
- snackbarMediaBox = null
- }
- }
- snackbarMediaBox?.setActionTextColor(ContextCompat.getColor(this, R.color.bright_blue))
- snackbarMediaBox?.show()
- }
- mediaBoxView.apply {
- onShowListener = Runnable {
- onMediaBoxShown()
- snackbarMediaBox?.dismiss()
- snackbarMediaBox = null
- }
- onDismissListener = Runnable {
- onMediaBoxDismissed()
- snackbarMediaBox?.dismiss()
- snackbarMediaBox = null
- }
- onClickAddButtonListener = object : MediaBoxView.OnClickHeaderButtonListener {
- override fun onClickTextBoxAddButton(textBoxTabView: TextBoxTabView) {
- dismiss(false)
- viewModel.setTextBoxAttribute(textBoxTabView.getTextBoxAttribute())
- showSnackbar(resources.getString(R.string.reader_mediaBox_snakebar_textBox), resources.getString(R.string.reader_mediaBox_snakebar_undo))
- }
- override fun onClickTextBoxStyleApplyButton(textBoxTabView: TextBoxTabView) {
- dismiss(false)
- viewModel.setTextBoxAttribute(textBoxTabView.getTextBoxAttribute(), true)
- }
- override fun onClickSignatureAddButton(signatureTabView: SignatureTabView) {
- dismiss(false)
- viewModel.setSignatureAttribute(signatureTabView.getSignatureAttribute())
- showSnackbar(resources.getString(R.string.reader_mediaBox_snakebar_signature), resources.getString(R.string.reader_mediaBox_snakebar_undo))
- }
- override fun onClickStampAddButton(stampTabView: StampTabView) {
- dismiss(false)
- viewModel.setStampAttribute(stampTabView.getStampAttribute())
- showSnackbar(resources.getString(R.string.reader_mediaBox_snakebar_stamp), resources.getString(R.string.reader_mediaBox_snakebar_undo))
- }
- override fun onClickShapeAddButton(shapeTabView: ShapeTabView) {
- dismiss(false)
- viewModel.setShapeAttribute(shapeTabView.getShapeAttribute())
- showSnackbar(resources.getString(R.string.reader_mediaBox_snakebar_shape), resources.getString(R.string.reader_mediaBox_snakebar_undo))
- }
- }
- }
- }
- private fun setupRightToolbar() {
- viewGroup_readerActivity_rightToolbar.setScroll(false)
- iv_readerActivity_highLight.apply {
- setOnClickListener { viewModel.onClickHighlightBtn() }
- setOnLongClickListener { btn ->
- viewModel.onLongClickHighlightBtn()
- val context = this@ReaderActivity
- AnnotationAttributeWindow(context, true).also { window ->
- viewModel.highLightAttributeLiveData.value?.let { attr ->
- window.annotationAttributeView.annotationAttribute = attr
- }
- window.annotationAttributeView.onChangeListener = object : AnnotationAttributeView.OnChangeListener {
- override fun onChange(annotationAttributeView: AnnotationAttributeView) {
- viewModel.setHighLightAttributes(annotationAttributeView.annotationAttribute)
- }
- }
- val contentView = window.contentView.apply {
- val w = Utils.makeDropDownMeasureSpec(window.width)
- val y = Utils.makeDropDownMeasureSpec(window.height)
- measure(w, y)
- }
- val space = resources.getDimension(R.dimen.reader_annotation_property_setting_window_right_toolbar_space)
- val xOff = (-contentView.measuredWidth - space).toInt()
- val yOff = -btn.height
- window.showAsDropDown(btn, xOff, yOff)
- }
- return@setOnLongClickListener true
- }
- }
- iv_readerActivity_strike.apply {
- setOnClickListener { viewModel.onClickStrikeBtn() }
- setOnLongClickListener { btn ->
- viewModel.onLongClickStrikeBtn()
- val context = this@ReaderActivity
- AnnotationAttributeWindow(context, true).also { window ->
- viewModel.strikeAttributeLiveData.value?.let { attr ->
- window.annotationAttributeView.annotationAttribute = attr
- }
- window.annotationAttributeView.onChangeListener = object : AnnotationAttributeView.OnChangeListener {
- override fun onChange(annotationAttributeView: AnnotationAttributeView) {
- viewModel.setStrikeOutAttributes(annotationAttributeView.annotationAttribute)
- }
- }
- val contentView = window.contentView.apply {
- val w = Utils.makeDropDownMeasureSpec(window.width)
- val y = Utils.makeDropDownMeasureSpec(window.height)
- measure(w, y)
- }
- val space = resources.getDimension(R.dimen.reader_annotation_property_setting_window_right_toolbar_space)
- val xOff = (-contentView.measuredWidth - space).toInt()
- val yOff = -btn.height
- window.showAsDropDown(btn, xOff, yOff)
- }
- return@setOnLongClickListener true
- }
- }
- iv_readerActivity_underline.apply {
- setOnClickListener { viewModel.onClickUnderlineBtn() }
- setOnLongClickListener { btn ->
- viewModel.onLongClickUnderlineBtn()
- val context = this@ReaderActivity
- AnnotationAttributeWindow(context, true).also { window ->
- viewModel.underLineAttributeLiveData.value?.let { attr ->
- window.annotationAttributeView.annotationAttribute = attr
- }
- window.annotationAttributeView.onChangeListener = object : AnnotationAttributeView.OnChangeListener {
- override fun onChange(annotationAttributeView: AnnotationAttributeView) {
- viewModel.setUnderLineAttributes(annotationAttributeView.annotationAttribute)
- }
- }
- val contentView = window.contentView.apply {
- val w = Utils.makeDropDownMeasureSpec(window.width)
- val y = Utils.makeDropDownMeasureSpec(window.height)
- measure(w, y)
- }
- val space = resources.getDimension(R.dimen.reader_annotation_property_setting_window_right_toolbar_space)
- val xOff = (-contentView.measuredWidth - space).toInt()
- val yOff = -btn.height
- window.showAsDropDown(btn, xOff, yOff)
- }
- return@setOnLongClickListener true
- }
- }
- iv_readerActivity_ink.apply {
- setOnClickListener { viewModel.onClickInkBtn() }
- setOnLongClickListener { btn ->
- viewModel.onLongClickInkBtn()
- val context = this@ReaderActivity
- AnnotationAttributeWindow(context, false).also { window ->
- viewModel.inkAttributeLiveData.value?.let { attr ->
- window.annotationAttributeView.inkAttribute = attr
- }
- window.annotationAttributeView.onChangeListener = object : AnnotationAttributeView.OnChangeListener {
- override fun onChange(annotationAttributeView: AnnotationAttributeView) {
- viewModel.setInkAttributes(annotationAttributeView.inkAttribute)
- }
- }
- val contentView = window.contentView.apply {
- val w = Utils.makeDropDownMeasureSpec(window.width)
- val y = Utils.makeDropDownMeasureSpec(window.height)
- measure(w, y)
- }
- val space = resources.getDimension(R.dimen.reader_annotation_property_setting_window_right_toolbar_space)
- val xOff = (-contentView.measuredWidth - space).toInt()
- val yOff = -contentView.measuredHeight
- window.showAsDropDown(btn, xOff, yOff)
- }
- return@setOnLongClickListener true
- }
- }
- if (!isPdf()) {
- iv_readerActivity_highLight.visibility = View.GONE
- iv_readerActivity_strike.visibility = View.GONE
- iv_readerActivity_underline.visibility = View.GONE
- iv_readerActivity_ink.visibility = View.GONE
- view_readerActivity_highLightStroke.visibility = View.GONE
- view_readerActivity_strikeStroke.visibility = View.GONE
- view_readerActivity_underlineStroke.visibility = View.GONE
- }
- }
- private fun setLeftToolbarWidth(width: Int) {
- var params = viewGroup_readerActivity_leftToolbar.layoutParams as ConstraintLayout.LayoutParams
- params.width = width + w_left
- params.height = 0
- viewGroup_readerActivity_leftToolbar.layoutParams = params
- params = linearLayout_readerActivity_leftToolbarContainer.layoutParams as ConstraintLayout.LayoutParams
- params.width = width
- linearLayout_readerActivity_leftToolbarContainer.layoutParams = params
- }
- private fun updateLeftToolbarOpenState(type: ReaderViewModel.LeftToolbarType) {
- val isLeftToolbarOpen = viewModel.isLeftToolbarOpenLiveData.value ?: false
- viewModel.setIsLeftToolbarOpen(!isLeftToolbarOpen || oldLeftToolbarType != type)
- cloneOriginConstraintSet()
- }
- private fun onMediaBoxShown() {
- hideAllToolbars()
- isHideToolbar = true
- }
- private fun onMediaBoxDismissed() {
- showAllToolbars()
- isHideToolbar = false
- viewModel.clearSelection()
- }
- private fun setLeftToolbarContentView(leftToolbarType: ReaderViewModel.LeftToolbarType) {
- if (oldLeftToolbarType != leftToolbarType) {
- linearLayout_readerActivity_leftToolbarContainer.removeAllViews()
- val view = when (leftToolbarType) {
- ReaderViewModel.LeftToolbarType.NONE,
- ReaderViewModel.LeftToolbarType.THUMBNAIL -> {
- val thumbnailView = ThumbnailView(this)
- thumbnailView.setHandlers(viewModel.pdfInfoHandler, viewModel.thumbnailHandler)
- thumbnailView
- }
- ReaderViewModel.LeftToolbarType.BOOKMARK -> {
- val bookmarkView = BookmarkView(this)
- bookmarkView.setHandlers(viewModel.pdfInfoHandler, viewModel.thumbnailHandler, viewModel.bookmarkHandler)
- bookmarkView
- }
- ReaderViewModel.LeftToolbarType.OUTLINE -> {
- val outlineView = OutlineView(this)
- outlineView.setHandlers(viewModel.pdfInfoHandler, viewModel.outlineHandler)
- outlineView
- }
- ReaderViewModel.LeftToolbarType.SEARCH -> {
- val searchView = SearchView(this)
- searchView.setHandlers(viewModel.pdfInfoHandler, viewModel.searchHandler)
- searchView
- }
- }
- linearLayout_readerActivity_leftToolbarContainer.addView(view as View)
- oldLeftToolbarType = leftToolbarType
- }
- }
- private fun getLeftToolbarContentWidth(): Int {
- return when (viewModel.leftToolbarTypeLiveData.value == ReaderViewModel.LeftToolbarType.THUMBNAIL) {
- true -> w_240
- false -> w_318
- }
- }
- private fun onLeftToolbarTypeChanged(leftToolbarType: ReaderViewModel.LeftToolbarType?) {
- updateLeftToolbarIcons()
- setLeftToolbarWidth(getLeftToolbarContentWidth())
- cloneOriginConstraintSet()
- if (leftToolbarType != null) {
- setLeftToolbarContentView(leftToolbarType)
- }
- }
- private fun onLeftToolbarOpenStateChanged(open: Boolean?) {
- updateLeftToolbarIcons()
- when (open == true) {
- true -> viewGroup_readerActivity_leftToolbar.smoothScrollTo(0, 0, UI_ANIMATION_DURATION.toInt())
- false -> {
- viewGroup_readerActivity_leftToolbar.smoothScrollTo(getLeftToolbarContentWidth(), 0, UI_ANIMATION_DURATION.toInt())
- hideSearchViewSoftKeyboard()
- }
- }
- }
- private fun updateLeftToolbarIcons() {
- iv_readerActivity_thumbnail.setImageResource(R.drawable.ic_left_toolbar_thumbnails)
- iv_readerActivity_bookmark.setImageResource(R.drawable.ic_left_toolbar_bookmarks)
- iv_readerActivity_outline.setImageResource(R.drawable.ic_left_toolbar_outline)
- iv_readerActivity_search.setImageResource(R.drawable.ic_left_toolbar_search)
- if (viewModel.isLeftToolbarOpenLiveData.value == true) {
- when (viewModel.leftToolbarTypeLiveData.value) {
- ReaderViewModel.LeftToolbarType.NONE -> {}
- ReaderViewModel.LeftToolbarType.THUMBNAIL -> iv_readerActivity_thumbnail.setImageResource(R.drawable.ic_left_toolbar_thumbnails_selected)
- ReaderViewModel.LeftToolbarType.BOOKMARK -> iv_readerActivity_bookmark.setImageResource(R.drawable.ic_left_toolbar_bookmarks_selected)
- ReaderViewModel.LeftToolbarType.OUTLINE -> iv_readerActivity_outline.setImageResource(R.drawable.ic_left_toolbar_outline_selected)
- ReaderViewModel.LeftToolbarType.SEARCH -> iv_readerActivity_search.setImageResource(R.drawable.ic_left_toolbar_search_selected)
- }
- }
- }
- private fun onClickBottomThumb1() {
- viewModel.transferReaderModel()
- val thumbDialog = providePdfThumbDialogFragment()
- thumbDialog.show(supportFragmentManager, FRAGMENT_PDF_THUMB_TAG)
- }
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (resultCode == Activity.RESULT_OK){
- when (requestCode) {
- REQUEST_PASSWORD -> {
- val password = data?.getStringExtra("password") ?: ""
- if (password.isEmpty()) {
- finish()
- } else {
- viewModel.isOpenedFileLiveData.value?.also { isOpened ->
- if (isOpened) return@also
- val result = viewModel.openPdfFile(this@ReaderActivity, Uri.parse(filePath), password, Runnable { requestPassword(true) }, intent.type)
- if (result == ReaderViewModel.OpenFileResult.FAILED) {
- showFileCannotOpenDialog(getString(R.string.cannot_open_file_Path, filePath))
- }
- }
- }
- }
- }
- }
- }
- }
|