|
@@ -7,11 +7,16 @@ import android.net.Uri
|
|
|
import android.os.Build
|
|
|
import android.support.v7.app.AppCompatActivity
|
|
|
import android.os.Bundle
|
|
|
+import android.support.constraint.ConstraintLayout
|
|
|
import android.support.constraint.ConstraintSet
|
|
|
+import android.util.DisplayMetrics
|
|
|
import android.view.Menu
|
|
|
+import android.view.MotionEvent
|
|
|
import android.view.View
|
|
|
import com.kdanmobile.kmpdfkit.pdfcommon.KMPDFReaderView
|
|
|
import com.kdanmobile.reader.Utils.applyConstraintSet
|
|
|
+import com.kdanmobile.reader.utils.AnimationUtil
|
|
|
+import com.kdanmobile.reader.utils.DensityUtil
|
|
|
import kotlinx.android.synthetic.main.activity_reader.*
|
|
|
import kotlin.Exception
|
|
|
|
|
@@ -27,12 +32,33 @@ open class ReaderActivity : AppCompatActivity() {
|
|
|
private var isHideToolbar = false
|
|
|
private lateinit var originConstraintSet: ConstraintSet
|
|
|
|
|
|
+ private val UI_ANIMATION_DURATION = 300L
|
|
|
+
|
|
|
+ private var w_318: Int = 0
|
|
|
+ private var w_240: Int = 0
|
|
|
+ private var w_left: Int = 0
|
|
|
+
|
|
|
+ private var isLeftToolbarOpen = false
|
|
|
+
|
|
|
+ enum class LeftToolbarType {
|
|
|
+ INIT, THUMBNAIL, BOOKMARK, OUTLINE, SEARCH
|
|
|
+ }
|
|
|
+ private var leftToolbarType = LeftToolbarType.INIT
|
|
|
+
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
super.onCreate(savedInstanceState)
|
|
|
setContentView(R.layout.activity_reader)
|
|
|
setSupportActionBar(toolbar_readerActivity)
|
|
|
|
|
|
+ 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()
|
|
|
+ setupLeftToolbar()
|
|
|
setupBottomToolbar()
|
|
|
|
|
|
val factory = ReaderViewModelFactory()
|
|
@@ -82,8 +108,10 @@ open class ReaderActivity : AppCompatActivity() {
|
|
|
}
|
|
|
|
|
|
private fun cloneOriginConstraintSet() {
|
|
|
- originConstraintSet = ConstraintSet().apply {
|
|
|
- clone(constrainLayout_readerActivity_root)
|
|
|
+ if (!isBelowKitkat()) {
|
|
|
+ originConstraintSet = ConstraintSet().apply {
|
|
|
+ clone(constrainLayout_readerActivity_root)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -96,41 +124,84 @@ open class ReaderActivity : AppCompatActivity() {
|
|
|
val readerView = object : KMPDFReaderView(context) {
|
|
|
override fun onTapMainDocArea() {
|
|
|
super.onTapMainDocArea()
|
|
|
+ if (isBelowKitkat()) {
|
|
|
+ isHideToolbar = toolbar_readerActivity.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_bottomToolbar.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_leftToolbar.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_rightToolbar.visibility != View.VISIBLE
|
|
|
+ }
|
|
|
when (isHideToolbar) {
|
|
|
true -> showAllToolbars()
|
|
|
false -> hideAllToolbars()
|
|
|
}
|
|
|
isHideToolbar = !isHideToolbar
|
|
|
}
|
|
|
+
|
|
|
+ override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
|
|
|
+ if (isBelowKitkat()) {
|
|
|
+ isHideToolbar = toolbar_readerActivity.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_bottomToolbar.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_leftToolbar.visibility != View.VISIBLE
|
|
|
+ || viewGroup_readerActivity_rightToolbar.visibility != View.VISIBLE
|
|
|
+ }
|
|
|
+ if (!isHideToolbar) {
|
|
|
+ hideAllToolbars()
|
|
|
+ isHideToolbar = false
|
|
|
+ }
|
|
|
+ return super.onScroll(e1, e2, distanceX, distanceY)
|
|
|
+ }
|
|
|
}
|
|
|
viewModel.setReaderView(readerView)
|
|
|
container.addView(readerView)
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private fun isBelowKitkat(): Boolean {
|
|
|
+ return true
|
|
|
+// return Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT
|
|
|
+ }
|
|
|
+
|
|
|
private fun showAllToolbars() {
|
|
|
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
|
|
- // TODO : Implement show toolbars on Android api level < 19 devices
|
|
|
+ if (isBelowKitkat()) {
|
|
|
+ AnimationUtil.showViewFromTopToBottom(toolbar_readerActivity, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.showViewFromBottomToTop(viewGroup_readerActivity_bottomToolbar, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.showViewFromLeftToRight(viewGroup_readerActivity_leftToolbar, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.showViewFromRightToLeft(viewGroup_readerActivity_rightToolbar, UI_ANIMATION_DURATION)
|
|
|
} else {
|
|
|
- constrainLayout_readerActivity_root.applyConstraintSet(originConstraintSet)
|
|
|
+ constrainLayout_readerActivity_root.applyConstraintSet(originConstraintSet, UI_ANIMATION_DURATION)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private fun hideAllToolbars() {
|
|
|
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
|
|
- // TODO : Implement hide toolbars on Android api level < 19 devices
|
|
|
+ if (isBelowKitkat()) {
|
|
|
+ AnimationUtil.hideViewFromBottomToTop(toolbar_readerActivity, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.hideViewFromTopToBottom(viewGroup_readerActivity_bottomToolbar, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.hideViewFromRightToLeft(viewGroup_readerActivity_leftToolbar, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.hideViewFromLeftToRight(viewGroup_readerActivity_rightToolbar, UI_ANIMATION_DURATION)
|
|
|
} else {
|
|
|
- constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_all)
|
|
|
+ constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_all, UI_ANIMATION_DURATION)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private fun hideTopLeftBottomToolbars() {
|
|
|
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
|
|
- // TODO : Implement hide toolbars on Android api level < 19 devices
|
|
|
+ if (isBelowKitkat()) {
|
|
|
+ AnimationUtil.hideViewFromBottomToTop(toolbar_readerActivity, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.hideViewFromTopToBottom(viewGroup_readerActivity_bottomToolbar, UI_ANIMATION_DURATION)
|
|
|
+ AnimationUtil.hideViewFromRightToLeft(viewGroup_readerActivity_leftToolbar, UI_ANIMATION_DURATION)
|
|
|
} else {
|
|
|
- constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_top_left_bottom)
|
|
|
+ constrainLayout_readerActivity_root.applyConstraintSet(this, R.layout.activity_reader_hide_top_left_bottom, UI_ANIMATION_DURATION)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ 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_km_thumb_layout, null)
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.addView(child)
|
|
|
+ cloneOriginConstraintSet()
|
|
|
+ }
|
|
|
+
|
|
|
private fun setupBottomToolbar() {
|
|
|
val context = this
|
|
|
/** Set buttons color **/
|
|
@@ -142,4 +213,125 @@ open class ReaderActivity : AppCompatActivity() {
|
|
|
Utils.setTintDrawableList(context, ib_readerActivity_bottomToolbarViewAll, R.drawable.ic_view_all, normalColor, pressColor)
|
|
|
Utils.setTintDrawableList(context, ib_readerActivity_bottomToolbarKdanCloud, R.drawable.ic_kdan_cloud, normalColor, pressColor)
|
|
|
}
|
|
|
+
|
|
|
+ // =====================================================================
|
|
|
+
|
|
|
+ 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 changeLeftToolbarType(type: LeftToolbarType) {
|
|
|
+ iv_readerActivity_thumbnail.setImageResource(R.drawable.ic_pagelist_thumbnail_nor)
|
|
|
+ iv_readerActivity_bookmark.setImageResource(R.drawable.ic_pagelist_bookmk_nor)
|
|
|
+ iv_readerActivity_outline.setImageResource(R.drawable.ic_pagelist_outline_nor)
|
|
|
+ iv_readerActivity_search.setImageResource(R.drawable.ic_pagelist_search_nor)
|
|
|
+
|
|
|
+ val width = when (type) {
|
|
|
+ LeftToolbarType.THUMBNAIL -> w_240
|
|
|
+ else -> w_318
|
|
|
+ }
|
|
|
+ setLeftToolbarWidth(width)
|
|
|
+
|
|
|
+ isLeftToolbarOpen = (!isLeftToolbarOpen || leftToolbarType != type)
|
|
|
+ if (isLeftToolbarOpen)
|
|
|
+ viewGroup_readerActivity_leftToolbar.smoothScrollTo(0, 0, UI_ANIMATION_DURATION.toInt())
|
|
|
+ else
|
|
|
+ viewGroup_readerActivity_leftToolbar.smoothScrollTo(width, 0, UI_ANIMATION_DURATION.toInt())
|
|
|
+ cloneOriginConstraintSet()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun onThumbnailClick() {
|
|
|
+ val type = LeftToolbarType.THUMBNAIL
|
|
|
+ changeLeftToolbarType(type)
|
|
|
+ if (isLeftToolbarOpen) {
|
|
|
+ if (leftToolbarType != type) {
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.removeAllViews()
|
|
|
+ val child = layoutInflater.inflate(R.layout.view_km_thumb_layout, null)
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.addView(child)
|
|
|
+ }
|
|
|
+ iv_readerActivity_thumbnail.setImageResource(R.drawable.ic_pagelist_thumbnail_h)
|
|
|
+ } else {
|
|
|
+ iv_readerActivity_thumbnail.setImageResource(R.drawable.ic_pagelist_thumbnail_nor)
|
|
|
+ }
|
|
|
+ leftToolbarType = type
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun onBookmarkClick() {
|
|
|
+ val type = LeftToolbarType.BOOKMARK
|
|
|
+ changeLeftToolbarType(type)
|
|
|
+ if (isLeftToolbarOpen) {
|
|
|
+ if (leftToolbarType != type) {
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.removeAllViews()
|
|
|
+ val child = layoutInflater.inflate(R.layout.view_km_thumb_layout, null)
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.addView(child)
|
|
|
+ }
|
|
|
+ iv_readerActivity_bookmark.setImageResource(R.drawable.ic_pagelist_bookmk_h)
|
|
|
+ } else {
|
|
|
+ iv_readerActivity_bookmark.setImageResource(R.drawable.ic_pagelist_bookmk_nor)
|
|
|
+ }
|
|
|
+ leftToolbarType = type
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun onOutlineClick() {
|
|
|
+ val type = LeftToolbarType.OUTLINE
|
|
|
+ changeLeftToolbarType(type)
|
|
|
+ if (isLeftToolbarOpen) {
|
|
|
+ if (leftToolbarType != type) {
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.removeAllViews()
|
|
|
+ val child = layoutInflater.inflate(R.layout.view_km_thumb_layout, null)
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.addView(child)
|
|
|
+ }
|
|
|
+ iv_readerActivity_outline.setImageResource(R.drawable.ic_pagelist_outline_h)
|
|
|
+ } else {
|
|
|
+ iv_readerActivity_outline.setImageResource(R.drawable.ic_pagelist_outline_nor)
|
|
|
+ }
|
|
|
+ leftToolbarType = type
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun onSearchClick() {
|
|
|
+ val type = LeftToolbarType.SEARCH
|
|
|
+ changeLeftToolbarType(type)
|
|
|
+ if (isLeftToolbarOpen) {
|
|
|
+ if (leftToolbarType != type) {
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.removeAllViews()
|
|
|
+ val child = layoutInflater.inflate(R.layout.view_km_thumb_layout, null)
|
|
|
+ linearLayout_readerActivity_leftToolbarContainer.addView(child)
|
|
|
+ }
|
|
|
+ iv_readerActivity_search.setImageResource(R.drawable.ic_pagelist_search_h)
|
|
|
+ } else {
|
|
|
+ iv_readerActivity_search.setImageResource(R.drawable.ic_pagelist_search_nor)
|
|
|
+ }
|
|
|
+ leftToolbarType = type
|
|
|
+ }
|
|
|
+
|
|
|
+ fun onClick(view: View)
|
|
|
+ {
|
|
|
+ when (view.id) {
|
|
|
+ R.id.iv_readerActivity_thumbnail -> {
|
|
|
+ onThumbnailClick()
|
|
|
+ }
|
|
|
+ R.id.iv_readerActivity_bookmark -> {
|
|
|
+ onBookmarkClick()
|
|
|
+ }
|
|
|
+ R.id.iv_readerActivity_outline -> {
|
|
|
+ onOutlineClick()
|
|
|
+ }
|
|
|
+ R.id.iv_readerActivity_search -> {
|
|
|
+ onSearchClick()
|
|
|
+ }
|
|
|
+ R.id.iv_readerActivity_fullScreen -> {
|
|
|
+ hideTopLeftBottomToolbars()
|
|
|
+ }
|
|
|
+ else -> {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|