From 0306ed4f34176553df049d0fab4dc386c2559f49 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 10 Jan 2026 01:04:48 +0700 Subject: [PATCH] fix camera button (#572) * fix camera button * fix * Fix: Add runtime camera permission check for image picker --- .../android/ui/media/ImagePickerButton.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/media/ImagePickerButton.kt b/app/src/main/java/com/bitchat/android/ui/media/ImagePickerButton.kt index 78c9f786..eb1f5d86 100644 --- a/app/src/main/java/com/bitchat/android/ui/media/ImagePickerButton.kt +++ b/app/src/main/java/com/bitchat/android/ui/media/ImagePickerButton.kt @@ -1,5 +1,7 @@ package com.bitchat.android.ui.media +import android.Manifest +import android.content.pm.PackageManager import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -19,6 +21,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import com.bitchat.android.features.media.ImageUtils import java.io.File @@ -70,8 +73,16 @@ fun ImagePickerButton( ) capturedImagePath = file.absolutePath takePictureLauncher.launch(uri) - } catch (_: Exception) { - // Ignore errors; no-op + } catch (e: Exception) { + android.util.Log.e("ImagePickerButton", "Camera capture failed", e) + } + } + + val permissionLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) { + startCameraCapture() } } @@ -80,7 +91,13 @@ fun ImagePickerButton( .size(32.dp) .combinedClickable( onClick = { imagePicker.launch("image/*") }, - onLongClick = { startCameraCapture() } + onLongClick = { + if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { + startCameraCapture() + } else { + permissionLauncher.launch(Manifest.permission.CAMERA) + } + } ), contentAlignment = Alignment.Center ) {