DroidFS/app/src/main/java/sushi/hardcore/droidfs/file_viewers/ImageViewer.kt

67 lines
2.4 KiB
Kotlin
Raw Normal View History

2020-07-17 16:35:39 +02:00
package sushi.hardcore.droidfs.file_viewers
import android.graphics.Bitmap
import android.graphics.Matrix
2020-07-18 18:44:53 +02:00
import android.graphics.drawable.Drawable
2020-07-17 16:35:39 +02:00
import android.os.Handler
import android.view.View
2020-07-18 18:44:53 +02:00
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
2020-07-17 16:35:39 +02:00
import kotlinx.android.synthetic.main.activity_image_viewer.*
import sushi.hardcore.droidfs.R
2020-07-18 18:44:53 +02:00
import java.security.MessageDigest
2020-07-17 16:35:39 +02:00
class ImageViewer: FileViewerActivity() {
companion object {
private const val hideDelay: Long = 3000
}
2020-07-18 18:44:53 +02:00
private lateinit var glideImage: RequestBuilder<Drawable>
private var rotationAngle: Float = 0F
2020-07-17 16:35:39 +02:00
private val handler = Handler()
private val hideActionButtons = Runnable { action_buttons.visibility = View.GONE }
override fun viewFile() {
2020-07-18 18:44:53 +02:00
val imageBuff = loadWholeFile(filePath)
if (imageBuff != null){
2020-07-17 16:35:39 +02:00
setContentView(R.layout.activity_image_viewer)
2020-07-18 18:44:53 +02:00
glideImage = Glide.with(this).load(imageBuff)
glideImage.into(image_viewer)
2020-07-17 16:35:39 +02:00
handler.postDelayed(hideActionButtons, hideDelay)
}
}
2020-07-18 18:44:53 +02:00
class RotateTransformation(private val rotationAngle: Float): BitmapTransformation() {
override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
val matrix = Matrix()
matrix.postRotate(rotationAngle)
return Bitmap.createBitmap(toTransform, 0, 0, toTransform.width, toTransform.height, matrix, true)
2020-07-17 16:35:39 +02:00
}
2020-07-18 18:44:53 +02:00
override fun updateDiskCacheKey(messageDigest: MessageDigest) {
messageDigest.update("rotate$rotationAngle".toByteArray())
2020-07-17 16:35:39 +02:00
}
}
2020-07-18 18:44:53 +02:00
private fun rotateImage(){
glideImage.transform(RotateTransformation(rotationAngle)).into(image_viewer)
2020-07-17 16:35:39 +02:00
}
fun onCLickRotateRight(view: View){
2020-07-18 18:44:53 +02:00
rotationAngle += 90
rotateImage()
2020-07-17 16:35:39 +02:00
}
fun onClickRotateLeft(view: View){
2020-07-18 18:44:53 +02:00
rotationAngle -= 90
rotateImage()
2020-07-17 16:35:39 +02:00
}
override fun onUserInteraction() {
super.onUserInteraction()
if (action_buttons.visibility == View.GONE){
action_buttons.visibility = View.VISIBLE
handler.removeCallbacks(hideActionButtons)
handler.postDelayed(hideActionButtons, hideDelay)
}
}
}