mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
chore : Lint fix (#5995)
* Refactor : Fixed lint issues on EditActivity - Using 'Log' instead of 'Timber' - Line is longer than allowed by code style (> 100 columns) - Use of getter method instead of property access syntax - Should be replaced with Kotlin function - Cascade 'if' should be replaced with 'when' * Suppress Deprecation * Linked Deprecated with Github Issue --------- Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
This commit is contained in:
parent
a8387f01c9
commit
64354fb9e4
1 changed files with 63 additions and 53 deletions
|
|
@ -6,9 +6,9 @@ import android.animation.ValueAnimator
|
|||
import android.content.Intent
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Matrix
|
||||
//noinspection ExifInterface TODO Issue : #5994
|
||||
import android.media.ExifInterface
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
|
|
@ -20,6 +20,7 @@ import androidx.lifecycle.ViewModelProvider
|
|||
import fr.free.nrw.commons.databinding.ActivityEditBinding
|
||||
import timber.log.Timber
|
||||
import java.io.File
|
||||
import kotlin.math.ceil
|
||||
|
||||
/**
|
||||
* An activity class for editing and rotating images using LLJTran with EXIF attribute preservation.
|
||||
|
|
@ -42,8 +43,11 @@ class EditActivity : AppCompatActivity() {
|
|||
supportActionBar?.title = ""
|
||||
val intent = intent
|
||||
imageUri = intent.getStringExtra("image") ?: ""
|
||||
vm = ViewModelProvider(this).get(EditViewModel::class.java)
|
||||
vm = ViewModelProvider(this)[EditViewModel::class.java]
|
||||
val sourceExif = imageUri.toUri().path?.let { ExifInterface(it) }
|
||||
//TODO(Deprecation : 'TAG_APERTURE: String' is deprecated. Deprecated in Java) Issue : #6001
|
||||
// TODO(Deprecation : 'TAG_ISO: String' is deprecated. Deprecated in Java) Issue : #6001
|
||||
@Suppress("DEPRECATION")
|
||||
val exifTags =
|
||||
arrayOf(
|
||||
ExifInterface.TAG_APERTURE,
|
||||
|
|
@ -88,38 +92,36 @@ class EditActivity : AppCompatActivity() {
|
|||
private fun init() {
|
||||
binding.iv.adjustViewBounds = true
|
||||
binding.iv.scaleType = ImageView.ScaleType.MATRIX
|
||||
binding.iv.post(
|
||||
Runnable {
|
||||
val options = BitmapFactory.Options()
|
||||
options.inJustDecodeBounds = true
|
||||
BitmapFactory.decodeFile(imageUri, options)
|
||||
binding.iv.post {
|
||||
val options = BitmapFactory.Options()
|
||||
options.inJustDecodeBounds = true
|
||||
BitmapFactory.decodeFile(imageUri, options)
|
||||
|
||||
val bitmapWidth = options.outWidth
|
||||
val bitmapHeight = options.outHeight
|
||||
val bitmapWidth = options.outWidth
|
||||
val bitmapHeight = options.outHeight
|
||||
|
||||
// Check if the bitmap dimensions exceed a certain threshold
|
||||
val maxBitmapSize = 2000 // Set your maximum size here
|
||||
if (bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize) {
|
||||
val scaleFactor = calculateScaleFactor(bitmapWidth, bitmapHeight, maxBitmapSize)
|
||||
options.inSampleSize = scaleFactor
|
||||
options.inJustDecodeBounds = false
|
||||
val scaledBitmap = BitmapFactory.decodeFile(imageUri, options)
|
||||
binding.iv.setImageBitmap(scaledBitmap)
|
||||
// Update the ImageView with the scaled bitmap
|
||||
val scale = binding.iv.measuredWidth.toFloat() / scaledBitmap.width.toFloat()
|
||||
binding.iv.layoutParams.height = (scale * scaledBitmap.height).toInt()
|
||||
binding.iv.imageMatrix = scaleMatrix(scale, scale)
|
||||
} else {
|
||||
options.inJustDecodeBounds = false
|
||||
val bitmap = BitmapFactory.decodeFile(imageUri, options)
|
||||
binding.iv.setImageBitmap(bitmap)
|
||||
// Check if the bitmap dimensions exceed a certain threshold
|
||||
val maxBitmapSize = 2000 // Set your maximum size here
|
||||
if (bitmapWidth > maxBitmapSize || bitmapHeight > maxBitmapSize) {
|
||||
val scaleFactor = calculateScaleFactor(bitmapWidth, bitmapHeight, maxBitmapSize)
|
||||
options.inSampleSize = scaleFactor
|
||||
options.inJustDecodeBounds = false
|
||||
val scaledBitmap = BitmapFactory.decodeFile(imageUri, options)
|
||||
binding.iv.setImageBitmap(scaledBitmap)
|
||||
// Update the ImageView with the scaled bitmap
|
||||
val scale = binding.iv.measuredWidth.toFloat() / scaledBitmap.width.toFloat()
|
||||
binding.iv.layoutParams.height = (scale * scaledBitmap.height).toInt()
|
||||
binding.iv.imageMatrix = scaleMatrix(scale, scale)
|
||||
} else {
|
||||
options.inJustDecodeBounds = false
|
||||
val bitmap = BitmapFactory.decodeFile(imageUri, options)
|
||||
binding.iv.setImageBitmap(bitmap)
|
||||
|
||||
val scale = binding.iv.measuredWidth.toFloat() / bitmapWidth.toFloat()
|
||||
binding.iv.layoutParams.height = (scale * bitmapHeight).toInt()
|
||||
binding.iv.imageMatrix = scaleMatrix(scale, scale)
|
||||
}
|
||||
},
|
||||
)
|
||||
val scale = binding.iv.measuredWidth.toFloat() / bitmapWidth.toFloat()
|
||||
binding.iv.layoutParams.height = (scale * bitmapHeight).toInt()
|
||||
binding.iv.imageMatrix = scaleMatrix(scale, scale)
|
||||
}
|
||||
}
|
||||
binding.rotateBtn.setOnClickListener {
|
||||
animateImageHeight()
|
||||
}
|
||||
|
|
@ -143,15 +145,15 @@ class EditActivity : AppCompatActivity() {
|
|||
val drawableWidth: Float =
|
||||
binding.iv
|
||||
.getDrawable()
|
||||
.getIntrinsicWidth()
|
||||
.intrinsicWidth
|
||||
.toFloat()
|
||||
val drawableHeight: Float =
|
||||
binding.iv
|
||||
.getDrawable()
|
||||
.getIntrinsicHeight()
|
||||
.intrinsicHeight
|
||||
.toFloat()
|
||||
val viewWidth: Float = binding.iv.getMeasuredWidth().toFloat()
|
||||
val viewHeight: Float = binding.iv.getMeasuredHeight().toFloat()
|
||||
val viewWidth: Float = binding.iv.measuredWidth.toFloat()
|
||||
val viewHeight: Float = binding.iv.measuredHeight.toFloat()
|
||||
val rotation = imageRotation % 360
|
||||
val newRotation = rotation + 90
|
||||
|
||||
|
|
@ -162,16 +164,23 @@ class EditActivity : AppCompatActivity() {
|
|||
Timber.d("Rotation $rotation")
|
||||
Timber.d("new Rotation $newRotation")
|
||||
|
||||
if (rotation == 0 || rotation == 180) {
|
||||
imageScale = viewWidth / drawableWidth
|
||||
newImageScale = viewWidth / drawableHeight
|
||||
newViewHeight = (drawableWidth * newImageScale).toInt()
|
||||
} else if (rotation == 90 || rotation == 270) {
|
||||
imageScale = viewWidth / drawableHeight
|
||||
newImageScale = viewWidth / drawableWidth
|
||||
newViewHeight = (drawableHeight * newImageScale).toInt()
|
||||
} else {
|
||||
throw UnsupportedOperationException("rotation can 0, 90, 180 or 270. \${rotation} is unsupported")
|
||||
when (rotation) {
|
||||
0, 180 -> {
|
||||
imageScale = viewWidth / drawableWidth
|
||||
newImageScale = viewWidth / drawableHeight
|
||||
newViewHeight = (drawableWidth * newImageScale).toInt()
|
||||
}
|
||||
90, 270 -> {
|
||||
imageScale = viewWidth / drawableHeight
|
||||
newImageScale = viewWidth / drawableWidth
|
||||
newViewHeight = (drawableHeight * newImageScale).toInt()
|
||||
}
|
||||
else -> {
|
||||
throw
|
||||
UnsupportedOperationException(
|
||||
"rotation can 0, 90, 180 or 270. \${rotation} is unsupported"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val animator = ValueAnimator.ofFloat(0f, 1f).setDuration(1000L)
|
||||
|
|
@ -204,7 +213,7 @@ class EditActivity : AppCompatActivity() {
|
|||
(complementaryAnimVal * viewHeight + animVal * newViewHeight).toInt()
|
||||
val animatedScale = complementaryAnimVal * imageScale + animVal * newImageScale
|
||||
val animatedRotation = complementaryAnimVal * rotation + animVal * newRotation
|
||||
binding.iv.getLayoutParams().height = animatedHeight
|
||||
binding.iv.layoutParams.height = animatedHeight
|
||||
val matrix: Matrix =
|
||||
rotationMatrix(
|
||||
animatedRotation,
|
||||
|
|
@ -218,8 +227,8 @@ class EditActivity : AppCompatActivity() {
|
|||
drawableHeight / 2,
|
||||
)
|
||||
matrix.postTranslate(
|
||||
-(drawableWidth - binding.iv.getMeasuredWidth()) / 2,
|
||||
-(drawableHeight - binding.iv.getMeasuredHeight()) / 2,
|
||||
-(drawableWidth - binding.iv.measuredWidth) / 2,
|
||||
-(drawableHeight - binding.iv.measuredHeight) / 2,
|
||||
)
|
||||
binding.iv.setImageMatrix(matrix)
|
||||
binding.iv.requestLayout()
|
||||
|
|
@ -267,9 +276,9 @@ class EditActivity : AppCompatActivity() {
|
|||
*/
|
||||
private fun copyExifData(editedImageExif: ExifInterface?) {
|
||||
for (attr in sourceExifAttributeList) {
|
||||
Log.d("Tag is ${attr.first}", "Value is ${attr.second}")
|
||||
Timber.d("Value is ${attr.second}")
|
||||
editedImageExif!!.setAttribute(attr.first, attr.second)
|
||||
Log.d("Tag is ${attr.first}", "Value is ${attr.second}")
|
||||
Timber.d("Value is ${attr.second}")
|
||||
}
|
||||
|
||||
editedImageExif?.saveAttributes()
|
||||
|
|
@ -298,9 +307,10 @@ class EditActivity : AppCompatActivity() {
|
|||
var scaleFactor = 1
|
||||
|
||||
if (originalWidth > maxSize || originalHeight > maxSize) {
|
||||
// Calculate the largest power of 2 that is less than or equal to the desired width and height
|
||||
val widthRatio = Math.ceil((originalWidth.toDouble() / maxSize.toDouble())).toInt()
|
||||
val heightRatio = Math.ceil((originalHeight.toDouble() / maxSize.toDouble())).toInt()
|
||||
// Calculate the largest power of 2 that is less than or equal to the desired
|
||||
// width and height
|
||||
val widthRatio = ceil((originalWidth.toDouble() / maxSize.toDouble())).toInt()
|
||||
val heightRatio = ceil((originalHeight.toDouble() / maxSize.toDouble())).toInt()
|
||||
|
||||
scaleFactor = if (widthRatio > heightRatio) widthRatio else heightRatio
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue