properly copy over the exif data after image editing

This commit is contained in:
tibbi 2020-02-10 23:47:20 +01:00
parent e4d8abd5a3
commit f17ffb8642

View file

@ -1,8 +1,11 @@
package com.simplemobiletools.gallery.pro.activities package com.simplemobiletools.gallery.pro.activities
import android.annotation.TargetApi
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.media.ExifInterface
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore import android.provider.MediaStore
import androidx.core.util.Pair import androidx.core.util.Pair
@ -11,6 +14,7 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.CONFLICT_OVERWRITE import com.simplemobiletools.commons.helpers.CONFLICT_OVERWRITE
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
import com.simplemobiletools.commons.helpers.isNougatPlus
import com.simplemobiletools.commons.interfaces.CopyMoveListener import com.simplemobiletools.commons.interfaces.CopyMoveListener
import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.R
@ -32,6 +36,7 @@ import ly.img.android.pesdk.ui.panels.item.CropAspectItem
import ly.img.android.pesdk.ui.panels.item.ToggleAspectItem import ly.img.android.pesdk.ui.panels.item.ToggleAspectItem
import ly.img.android.pesdk.ui.panels.item.ToolItem import ly.img.android.pesdk.ui.panels.item.ToolItem
import java.io.File import java.io.File
import java.io.InputStream
import kotlin.collections.set import kotlin.collections.set
class NewEditActivity : SimpleActivity() { class NewEditActivity : SimpleActivity() {
@ -42,6 +47,7 @@ class NewEditActivity : SimpleActivity() {
private var destinationFilePath = "" private var destinationFilePath = ""
private var imagePathFromEditor = "" // delete the file stored at the internal app storage (the editor saves it there) in case moving to the selected location fails private var imagePathFromEditor = "" // delete the file stored at the internal app storage (the editor saves it there) in case moving to the selected location fails
private var sourceImageUri: Uri? = null private var sourceImageUri: Uri? = null
private var oldExif: ExifInterface? = null
private lateinit var uri: Uri private lateinit var uri: Uri
private lateinit var saveUri: Uri private lateinit var saveUri: Uri
@ -125,6 +131,11 @@ class NewEditActivity : SimpleActivity() {
sourceString.substringAfter("file://") sourceString.substringAfter("file://")
} }
if (source == imagePathFromEditor) {
finish()
return
}
SaveAsDialog(this, source, true, cancelCallback = { SaveAsDialog(this, source, true, cancelCallback = {
toast(R.string.image_editing_failed) toast(R.string.image_editing_failed)
finish() finish()
@ -132,6 +143,7 @@ class NewEditActivity : SimpleActivity() {
destinationFilePath = it destinationFilePath = it
handleSAFDialog(destinationFilePath) { handleSAFDialog(destinationFilePath) {
if (it) { if (it) {
storeOldExif(source)
sourceFileLastModified = File(source).lastModified() sourceFileLastModified = File(source).lastModified()
val newFile = File("${imagePathFromEditor.getParentPath()}/${destinationFilePath.getFilenameFromPath()}") val newFile = File("${imagePathFromEditor.getParentPath()}/${destinationFilePath.getFilenameFromPath()}")
File(imagePathFromEditor).renameTo(newFile) File(imagePathFromEditor).renameTo(newFile)
@ -154,11 +166,33 @@ class NewEditActivity : SimpleActivity() {
super.onActivityResult(requestCode, resultCode, resultData) super.onActivityResult(requestCode, resultCode, resultData)
} }
@TargetApi(Build.VERSION_CODES.N)
private fun storeOldExif(sourcePath: String) {
var inputStream: InputStream? = null
try {
if (isNougatPlus()) {
inputStream = contentResolver.openInputStream(Uri.fromFile(File(sourcePath)))
oldExif = ExifInterface(inputStream!!)
}
} catch (ignored: Exception) {
} finally {
inputStream?.close()
}
}
private val editCopyMoveListener = object : CopyMoveListener { private val editCopyMoveListener = object : CopyMoveListener {
override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean, destinationPath: String) { override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean, destinationPath: String) {
if (config.keepLastModified) { if (config.keepLastModified) {
// add 1 s to the last modified time to properly update the thumbnail // add 1 s to the last modified time to properly update the thumbnail
updateLastModified(destinationFilePath, sourceFileLastModified + 1000) updateLastModified(destinationFilePath, sourceFileLastModified + 1000)
try {
if (isNougatPlus()) {
val newExif = ExifInterface(destinationFilePath)
oldExif?.copyTo(newExif, false)
}
} catch (ignored: Exception) {
}
} }
val paths = arrayListOf(destinationFilePath) val paths = arrayListOf(destinationFilePath)