mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-26 00:56:34 +02:00
after enabling permissions open the camera
This commit is contained in:
@@ -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()
|
||||||
|
Reference in New Issue
Block a user