diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt index 0094f3a3..4587a5c0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt @@ -8,7 +8,7 @@ import java.util.* val Context.config: Config get() = Config.newInstance(applicationContext) -fun Context.getOutputMediaFile(isPhoto: Boolean): String { +fun Context.getOutputMediaFilePath(isPhoto: Boolean): String { val mediaStorageDir = File(config.savePhotosFolder) if (!mediaStorageDir.exists()) { @@ -24,6 +24,14 @@ fun Context.getOutputMediaFile(isPhoto: Boolean): String { "${mediaStorageDir.path}/$mediaName.mp4" } } +fun Context.getOutputMediaFileName(isPhoto: Boolean): String { + val mediaName = getRandomMediaName(isPhoto) + return if (isPhoto) { + "$mediaName.jpg" + } else { + "$mediaName.mp4" + } +} fun getRandomMediaName(isPhoto: Boolean): String { val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt index f71344b5..4dff835d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt @@ -4,9 +4,11 @@ import android.content.ContentValues import android.net.Uri import android.os.Environment import android.os.ParcelFileDescriptor +import android.provider.DocumentsContract import android.provider.MediaStore import com.simplemobiletools.camera.extensions.config -import com.simplemobiletools.camera.extensions.getOutputMediaFile +import com.simplemobiletools.camera.extensions.getOutputMediaFileName +import com.simplemobiletools.camera.extensions.getOutputMediaFilePath import com.simplemobiletools.camera.extensions.getRandomMediaName import com.simplemobiletools.camera.models.MediaOutput import com.simplemobiletools.commons.activities.BaseSimpleActivity @@ -20,7 +22,7 @@ class MediaOutputHelper( private val activity: BaseSimpleActivity, private val errorHandler: CameraErrorHandler, private val outputUri: Uri?, - private val is3rdPartyIntent: Boolean, + private val is3rdPartyIntent: Boolean ) { companion object { @@ -121,7 +123,7 @@ class MediaOutputHelper( var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null val canWrite = canWriteToFilePath(mediaStorageDir) if (canWrite) { - val path = activity.getOutputMediaFile(true) + val path = activity.getOutputMediaFilePath(true) val uri = getUriForFilePath(path) val outputStream = activity.getFileOutputStreamSync(path, path.getMimeType()) if (uri != null && outputStream != null) { @@ -144,14 +146,16 @@ class MediaOutputHelper( var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null val canWrite = canWriteToFilePath(mediaStorageDir) if (canWrite) { - val path = activity.getOutputMediaFile(false) - val uri = getUriForFilePath(path) - if (uri != null) { - val fileDescriptor = contentResolver.openFileDescriptor(uri, MODE) - if (fileDescriptor != null) { - mediaOutput = MediaOutput.FileDescriptorMediaOutput(fileDescriptor, uri) - } - } + val parentUri = getUriForFilePath(mediaStorageDir) ?: return null + val videoFileName = activity.getOutputMediaFileName(false) + val documentUri = DocumentsContract.createDocument( + contentResolver, + parentUri, + DocumentsContract.Document.COLUMN_MIME_TYPE, + videoFileName + ) ?: return null + val fileDescriptor = contentResolver.openFileDescriptor(documentUri, MODE) ?: return null + mediaOutput = MediaOutput.FileDescriptorMediaOutput(fileDescriptor, documentUri) } return mediaOutput } @@ -160,7 +164,7 @@ class MediaOutputHelper( var mediaOutput: MediaOutput.FileMediaOutput? = null val canWrite = canWriteToFilePath(mediaStorageDir) if (canWrite) { - val path = activity.getOutputMediaFile(false) + val path = activity.getOutputMediaFilePath(false) val uri = getUriForFilePath(path) if (uri != null) { mediaOutput = MediaOutput.FileMediaOutput(File(path), uri) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt index f0a2afbf..f899bb85 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt @@ -10,7 +10,7 @@ import androidx.exifinterface.media.ExifInterface import com.simplemobiletools.camera.R import com.simplemobiletools.camera.activities.MainActivity import com.simplemobiletools.camera.extensions.config -import com.simplemobiletools.camera.extensions.getOutputMediaFile +import com.simplemobiletools.camera.extensions.getOutputMediaFilePath import com.simplemobiletools.commons.extensions.* import java.io.File import java.io.FileNotFoundException @@ -30,7 +30,7 @@ class PhotoProcessor( path = if (saveUri != null) { saveUri.path!! } else { - activity.getOutputMediaFile(true) + activity.getOutputMediaFilePath(true) } if (path.isEmpty()) {