From cebc19b7c49cc912fa53160d5f58b7ff1fc3a177 Mon Sep 17 00:00:00 2001 From: Alex Yong Date: Fri, 5 Sep 2025 21:27:45 +0000 Subject: [PATCH] fix: camera option in file picker will now ask for camera permissions if not granted. Signed-off-by: Alex Yong --- .../chat/views/channel/ChannelScreen.kt | 39 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index 08e3b1f7..4ad46666 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -1,8 +1,10 @@ package chat.revolt.screens.chat.views.channel +import android.Manifest import android.annotation.SuppressLint import android.app.Activity import android.content.ContentValues +import android.content.pm.PackageManager import android.content.res.Configuration import android.net.Uri import android.os.Environment @@ -103,6 +105,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.em import androidx.compose.ui.unit.sp +import androidx.core.content.ContextCompat import androidx.documentfile.provider.DocumentFile import androidx.hilt.navigation.compose.hiltViewModel import chat.revolt.R @@ -374,6 +377,38 @@ fun ChannelScreen( } } + val cameraPermissionLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) { + openCameraCallback() + } + else { + Toast.makeText( + context, + context.getString( + R.string.file_picker_chip_camera_permission_denied + ), + Toast.LENGTH_SHORT + ).show() + } + + } + + val checkAndRequestCameraPermission = { + when { + ContextCompat.checkSelfPermission( + context, + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED -> { + openCameraCallback() + } + else -> { + cameraPermissionLauncher.launch(Manifest.permission.CAMERA) + } + } + } + val openDocumentPickerCallback = { pickFileLauncher.launch(arrayOf("*/*")) } @@ -1114,7 +1149,7 @@ fun ChannelScreen( }, text = { Text(stringResource(R.string.file_picker_chip_camera)) }, onClick = { - openCameraCallback() + checkAndRequestCameraPermission() viewModel.activePane = ChannelScreenActivePane.None } @@ -1230,7 +1265,7 @@ fun ChannelScreen( ChannelScreenActivePane.None }, onOpenCamera = { - openCameraCallback() + checkAndRequestCameraPermission() viewModel.activePane = ChannelScreenActivePane.None }, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4aff6a52..ab151b24 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -587,6 +587,7 @@ Camera No camera app installed Failed to open camera + Camera permission is required to take photos Currently selected media Pick media…