Adds mkdirs fix to CameraPicker and CameraVideoPicker
This commit is contained in:
parent
eb3f704745
commit
8b66034af5
|
@ -23,11 +23,9 @@ import android.provider.MediaStore
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import im.vector.lib.multipicker.entity.MultiPickerImageType
|
import im.vector.lib.multipicker.entity.MultiPickerImageType
|
||||||
|
import im.vector.lib.multipicker.utils.MediaFileUtils.MediaType.IMAGE
|
||||||
|
import im.vector.lib.multipicker.utils.MediaFileUtils.createTemporaryMediaFile
|
||||||
import im.vector.lib.multipicker.utils.toMultiPickerImageType
|
import im.vector.lib.multipicker.utils.toMultiPickerImageType
|
||||||
import java.io.File
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Date
|
|
||||||
import java.util.Locale
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of taking a photo with Camera
|
* Implementation of taking a photo with Camera
|
||||||
|
@ -38,7 +36,7 @@ class CameraPicker {
|
||||||
* Start camera by using a ActivityResultLauncher
|
* Start camera by using a ActivityResultLauncher
|
||||||
* @return Uri of taken photo or null if the operation is cancelled.
|
* @return Uri of taken photo or null if the operation is cancelled.
|
||||||
*/
|
*/
|
||||||
fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher<Intent>): Uri? {
|
fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher<Intent>): Uri {
|
||||||
val photoUri = createPhotoUri(context)
|
val photoUri = createPhotoUri(context)
|
||||||
val intent = createIntent().apply {
|
val intent = createIntent().apply {
|
||||||
putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
|
putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
|
||||||
|
@ -63,19 +61,9 @@ class CameraPicker {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun createPhotoUri(context: Context): Uri {
|
fun createPhotoUri(context: Context): Uri {
|
||||||
val file = createImageFile(context)
|
val file = createTemporaryMediaFile(context, IMAGE)
|
||||||
val authority = context.packageName + ".multipicker.fileprovider"
|
val authority = context.packageName + ".multipicker.fileprovider"
|
||||||
return FileProvider.getUriForFile(context, authority, file)
|
return FileProvider.getUriForFile(context, authority, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createImageFile(context: Context): File {
|
|
||||||
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
|
|
||||||
val storageDir: File = context.filesDir
|
|
||||||
return File.createTempFile(
|
|
||||||
"${timeStamp}_", /* prefix */
|
|
||||||
".jpg", /* suffix */
|
|
||||||
storageDir /* directory */
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,11 +23,9 @@ import android.provider.MediaStore
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import im.vector.lib.multipicker.entity.MultiPickerVideoType
|
import im.vector.lib.multipicker.entity.MultiPickerVideoType
|
||||||
|
import im.vector.lib.multipicker.utils.MediaFileUtils.MediaType.VIDEO
|
||||||
|
import im.vector.lib.multipicker.utils.MediaFileUtils.createTemporaryMediaFile
|
||||||
import im.vector.lib.multipicker.utils.toMultiPickerVideoType
|
import im.vector.lib.multipicker.utils.toMultiPickerVideoType
|
||||||
import java.io.File
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Date
|
|
||||||
import java.util.Locale
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of taking a video with Camera
|
* Implementation of taking a video with Camera
|
||||||
|
@ -38,7 +36,7 @@ class CameraVideoPicker {
|
||||||
* Start camera by using a ActivityResultLauncher
|
* Start camera by using a ActivityResultLauncher
|
||||||
* @return Uri of taken photo or null if the operation is cancelled.
|
* @return Uri of taken photo or null if the operation is cancelled.
|
||||||
*/
|
*/
|
||||||
fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher<Intent>): Uri? {
|
fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher<Intent>): Uri {
|
||||||
val videoUri = createVideoUri(context)
|
val videoUri = createVideoUri(context)
|
||||||
val intent = createIntent().apply {
|
val intent = createIntent().apply {
|
||||||
putExtra(MediaStore.EXTRA_OUTPUT, videoUri)
|
putExtra(MediaStore.EXTRA_OUTPUT, videoUri)
|
||||||
|
@ -63,19 +61,9 @@ class CameraVideoPicker {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun createVideoUri(context: Context): Uri {
|
fun createVideoUri(context: Context): Uri {
|
||||||
val file = createVideoFile(context)
|
val file = createTemporaryMediaFile(context, VIDEO)
|
||||||
val authority = context.packageName + ".multipicker.fileprovider"
|
val authority = context.packageName + ".multipicker.fileprovider"
|
||||||
return FileProvider.getUriForFile(context, authority, file)
|
return FileProvider.getUriForFile(context, authority, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createVideoFile(context: Context): File {
|
|
||||||
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
|
|
||||||
val storageDir: File = context.filesDir
|
|
||||||
return File.createTempFile(
|
|
||||||
"${timeStamp}_", /* prefix */
|
|
||||||
".mp4", /* suffix */
|
|
||||||
storageDir /* directory */
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.lib.multipicker.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import java.io.File
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
object MediaFileUtils {
|
||||||
|
|
||||||
|
fun createTemporaryMediaFile(context: Context, mediaType: MediaType): File {
|
||||||
|
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
|
||||||
|
val storageDir: File = context.filesDir.also { it.mkdirs() }
|
||||||
|
val fileSuffix = when (mediaType) {
|
||||||
|
MediaType.IMAGE -> ".jpg"
|
||||||
|
MediaType.VIDEO -> ".mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
return File.createTempFile(
|
||||||
|
"${timeStamp}_",
|
||||||
|
fileSuffix,
|
||||||
|
storageDir
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class MediaType {
|
||||||
|
IMAGE, VIDEO
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue