From 64354fb9e42b7e47a44adc525ff67dce80ad7cda Mon Sep 17 00:00:00 2001 From: Neel Doshi <60827173+neeldoshii@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:54:22 +0530 Subject: [PATCH] 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 --- .../fr/free/nrw/commons/edit/EditActivity.kt | 116 ++++++++++-------- 1 file changed, 63 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/edit/EditActivity.kt b/app/src/main/java/fr/free/nrw/commons/edit/EditActivity.kt index d585a99e91..4b7a7a40cc 100644 --- a/app/src/main/java/fr/free/nrw/commons/edit/EditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/edit/EditActivity.kt @@ -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 }