after enabling permissions open the camera

This commit is contained in:
greenart7c3
2024-09-09 14:59:05 -03:00
parent a63d50c24f
commit 2e110422c8

View File

@@ -21,6 +21,7 @@
package com.vitorpamplona.amethyst.ui.actions package com.vitorpamplona.amethyst.ui.actions
import android.Manifest import android.Manifest
import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@@ -644,10 +645,28 @@ private fun BottomRowActions(postViewModel: NewPostViewModel) {
} }
} }
fun getPhotoUri(context: Context): Uri {
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(Date())
val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return File
.createTempFile(
"JPEG_${timeStamp}_",
".jpg",
storageDir,
).let {
FileProvider.getUriForFile(
context,
"${context.packageName}.provider",
it,
)
}
}
@OptIn(ExperimentalPermissionsApi::class) @OptIn(ExperimentalPermissionsApi::class)
@Composable @Composable
fun TakePictureButton(onPictureTaken: (Uri) -> Unit) { fun TakePictureButton(onPictureTaken: (Uri) -> Unit) {
var imageUri by remember { mutableStateOf<Uri?>(null) } var imageUri by remember { mutableStateOf<Uri?>(null) }
val scope = rememberCoroutineScope()
val launcher = val launcher =
rememberLauncherForActivityResult( rememberLauncherForActivityResult(
contract = ActivityResultContracts.TakePicture(), contract = ActivityResultContracts.TakePicture(),
@@ -662,6 +681,14 @@ fun TakePictureButton(onPictureTaken: (Uri) -> Unit) {
val cameraPermissionState = val cameraPermissionState =
rememberPermissionState( rememberPermissionState(
Manifest.permission.CAMERA, Manifest.permission.CAMERA,
onPermissionResult = {
if (it) {
scope.launch(Dispatchers.IO) {
imageUri = getPhotoUri(context)
imageUri?.let { uri -> launcher.launch(uri) }
}
}
},
) )
Box { Box {
@@ -669,23 +696,9 @@ fun TakePictureButton(onPictureTaken: (Uri) -> Unit) {
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
onClick = { onClick = {
if (cameraPermissionState.status.isGranted) { if (cameraPermissionState.status.isGranted) {
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(Date()) scope.launch(Dispatchers.IO) {
val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) imageUri = getPhotoUri(context)
File imageUri?.let { uri -> launcher.launch(uri) }
.createTempFile(
"JPEG_${timeStamp}_",
".jpg",
storageDir,
).apply {
imageUri =
FileProvider.getUriForFile(
context,
"${context.packageName}.provider",
this,
)
}
imageUri?.let {
launcher.launch(it)
} }
} else { } else {
cameraPermissionState.launchPermissionRequest() cameraPermissionState.launchPermissionRequest()