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) 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) val mediaStorageDir = File(config.savePhotosFolder)
if (!mediaStorageDir.exists()) { if (!mediaStorageDir.exists()) {
@ -24,6 +24,14 @@ fun Context.getOutputMediaFile(isPhoto: Boolean): String {
"${mediaStorageDir.path}/$mediaName.mp4" "${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 { fun getRandomMediaName(isPhoto: Boolean): String {
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) 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.net.Uri
import android.os.Environment import android.os.Environment
import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor
import android.provider.DocumentsContract
import android.provider.MediaStore import android.provider.MediaStore
import com.simplemobiletools.camera.extensions.config 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.extensions.getRandomMediaName
import com.simplemobiletools.camera.models.MediaOutput import com.simplemobiletools.camera.models.MediaOutput
import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.activities.BaseSimpleActivity
@ -20,7 +22,7 @@ class MediaOutputHelper(
private val activity: BaseSimpleActivity, private val activity: BaseSimpleActivity,
private val errorHandler: CameraErrorHandler, private val errorHandler: CameraErrorHandler,
private val outputUri: Uri?, private val outputUri: Uri?,
private val is3rdPartyIntent: Boolean, private val is3rdPartyIntent: Boolean
) { ) {
companion object { companion object {
@ -121,7 +123,7 @@ class MediaOutputHelper(
var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir) val canWrite = canWriteToFilePath(mediaStorageDir)
if (canWrite) { if (canWrite) {
val path = activity.getOutputMediaFile(true) val path = activity.getOutputMediaFilePath(true)
val uri = getUriForFilePath(path) val uri = getUriForFilePath(path)
val outputStream = activity.getFileOutputStreamSync(path, path.getMimeType()) val outputStream = activity.getFileOutputStreamSync(path, path.getMimeType())
if (uri != null && outputStream != null) { if (uri != null && outputStream != null) {
@ -144,14 +146,16 @@ class MediaOutputHelper(
var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir) val canWrite = canWriteToFilePath(mediaStorageDir)
if (canWrite) { if (canWrite) {
val path = activity.getOutputMediaFile(false) val parentUri = getUriForFilePath(mediaStorageDir) ?: return null
val uri = getUriForFilePath(path) val videoFileName = activity.getOutputMediaFileName(false)
if (uri != null) { val documentUri = DocumentsContract.createDocument(
val fileDescriptor = contentResolver.openFileDescriptor(uri, MODE) contentResolver,
if (fileDescriptor != null) { parentUri,
mediaOutput = MediaOutput.FileDescriptorMediaOutput(fileDescriptor, uri) DocumentsContract.Document.COLUMN_MIME_TYPE,
} videoFileName
} ) ?: return null
val fileDescriptor = contentResolver.openFileDescriptor(documentUri, MODE) ?: return null
mediaOutput = MediaOutput.FileDescriptorMediaOutput(fileDescriptor, documentUri)
} }
return mediaOutput return mediaOutput
} }
@ -160,7 +164,7 @@ class MediaOutputHelper(
var mediaOutput: MediaOutput.FileMediaOutput? = null var mediaOutput: MediaOutput.FileMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir) val canWrite = canWriteToFilePath(mediaStorageDir)
if (canWrite) { if (canWrite) {
val path = activity.getOutputMediaFile(false) val path = activity.getOutputMediaFilePath(false)
val uri = getUriForFilePath(path) val uri = getUriForFilePath(path)
if (uri != null) { if (uri != null) {
mediaOutput = MediaOutput.FileMediaOutput(File(path), uri) 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.R
import com.simplemobiletools.camera.activities.MainActivity import com.simplemobiletools.camera.activities.MainActivity
import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.config
import com.simplemobiletools.camera.extensions.getOutputMediaFile import com.simplemobiletools.camera.extensions.getOutputMediaFilePath
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import java.io.File import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
@ -30,7 +30,7 @@ class PhotoProcessor(
path = if (saveUri != null) { path = if (saveUri != null) {
saveUri.path!! saveUri.path!!
} else { } else {
activity.getOutputMediaFile(true) activity.getOutputMediaFilePath(true)
} }
if (path.isEmpty()) { if (path.isEmpty()) {