mirror of
https://github.com/FossifyOrg/Gallery.git
synced 2025-03-10 21:50:05 +01:00
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:
commit
fbdfd05b80
1 changed files with 32 additions and 9 deletions
|
@ -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}")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue