Merge pull request #401 from terofeev/dont-save-copy-after-edit-picture

Implement internal cropping instead of library's built-in function
This commit is contained in:
Naveen Singh 2025-03-06 01:05:46 +05:30 committed by GitHub
commit fbdfd05b80
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -10,9 +10,12 @@ import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.provider.MediaStore
import android.view.View
import android.widget.ImageView
import android.widget.RelativeLayout
import androidx.core.view.isInvisible
import androidx.exifinterface.media.ExifInterface
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
@ -25,6 +28,7 @@ import com.bumptech.glide.request.target.Target
import com.canhub.cropper.CropImageView
import com.zomato.photofilters.FilterPack
import com.zomato.photofilters.imageprocessors.Filter
import kotlinx.coroutines.*
import org.fossify.commons.dialogs.ColorPickerDialog
import org.fossify.commons.extensions.*
import org.fossify.commons.helpers.NavigationIcon
@ -47,7 +51,7 @@ import org.fossify.gallery.models.FilterItem
import java.io.*
import kotlin.math.max
class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener {
class EditActivity : SimpleActivity() {
companion object {
init {
System.loadLibrary("NativeImageProcessor")
@ -87,6 +91,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
private var oldExif: ExifInterface? = null
private var filterInitialBitmap: Bitmap? = null
private var originalUri: Uri? = null
private var bitmapCroppingJob: Job? = null
private val binding by viewBinding(ActivityEditBinding::inflate)
override fun onCreate(savedInstanceState: Bundle?) {
@ -251,7 +256,6 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
binding.editorDrawCanvas.beGone()
binding.cropImageView.apply {
beVisible()
setOnCropImageCompleteListener(this@EditActivity)
setImageUriAsync(uri)
guidelines = CropImageView.Guidelines.ON
@ -313,7 +317,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
setOldExif()
if (binding.cropImageView.isVisible()) {
binding.cropImageView.croppedImageAsync()
cropImageAsync()
} else if (binding.editorDrawCanvas.isVisible()) {
val bitmap = binding.editorDrawCanvas.getBitmap()
if (saveUri.scheme == "file") {
@ -351,6 +355,26 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
}
}
private fun setCropProgressBarVisibility(visible: Boolean) {
val progressBar: View? = binding.cropImageView.findViewById(com.canhub.cropper.R.id.CropProgressBar)
progressBar?.isInvisible = visible.not()
}
private fun cropImageAsync() {
setCropProgressBarVisibility(visible = true)
bitmapCroppingJob?.cancel()
bitmapCroppingJob = lifecycleScope.launch(CoroutineExceptionHandler { _, t ->
onCropImageComplete(bitmap = null, error = Exception(t))
}) {
val bitmap = withContext(Dispatchers.Default) {
binding.cropImageView.getCroppedImage()
}
onCropImageComplete(bitmap, null)
}.apply {
invokeOnCompletion { setCropProgressBarVisibility(visible = false) }
}
}
private fun setOldExif() {
var inputStream: InputStream? = null
try {
@ -380,7 +404,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
binding.cropImageView.isVisible() -> {
isSharingBitmap = true
runOnUiThread {
binding.cropImageView.croppedImageAsync()
cropImageAsync()
}
}
@ -764,7 +788,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
ResizeDialog(this, point) {
resizeWidth = it.x
resizeHeight = it.y
binding.cropImageView.croppedImageAsync()
cropImageAsync()
}
}
@ -792,11 +816,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
}
}
override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) {
if (result.error == null && result.bitmap != null) {
private fun onCropImageComplete(bitmap: Bitmap?, error: Exception?) {
if (error == null && bitmap != null) {
setOldExif()
val bitmap = result.bitmap!!
if (isSharingBitmap) {
isSharingBitmap = false
shareBitmap(bitmap)
@ -843,7 +866,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
toast(R.string.unknown_file_location)
}
} else {
toast("${getString(R.string.image_editing_failed)}: ${result.error?.message}")
toast("${getString(R.string.image_editing_failed)}: ${error?.message}")
}
}