fix: implemented a fix to allow video recording to user selected sdcard folder.

This commit is contained in:
ismailnurudeen 2023-02-07 12:47:37 +01:00
parent 9a5dd6b4b1
commit e466196135
3 changed files with 27 additions and 15 deletions

View File

@ -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())

View File

@ -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)

View File

@ -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()) {