From 7f757f46f36dcfba6eea7e9d7fc880067cbb412a Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Mon, 4 Dec 2023 08:52:54 +0100 Subject: [PATCH] feat: Add permission check to camera and audio --- .../VideoRecorderPreparationSheet.kt | 30 ++++++++++++++----- .../molecules/VideoRecordingStart.kt | 4 +-- .../ui/models/VideoRecorderSettingsModel.kt | 11 ++++++- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecorderPreparationSheet.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecorderPreparationSheet.kt index 5826aa0..ea79548 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecorderPreparationSheet.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecorderPreparationSheet.kt @@ -1,5 +1,6 @@ package app.myzel394.alibi.ui.components.RecorderScreen.molecules +import android.Manifest import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.gestures.awaitEachGesture @@ -16,6 +17,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CameraAlt +import androidx.compose.material.icons.filled.Mic import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -23,6 +25,7 @@ import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier @@ -41,6 +44,7 @@ import app.myzel394.alibi.R import app.myzel394.alibi.ui.BIG_PRIMARY_BUTTON_SIZE import app.myzel394.alibi.ui.components.RecorderScreen.atoms.CameraPreview import app.myzel394.alibi.ui.components.atoms.GlobalSwitch +import app.myzel394.alibi.ui.components.atoms.PermissionRequester import app.myzel394.alibi.ui.models.VideoRecorderSettingsModel import app.myzel394.alibi.ui.utils.CameraInfo @@ -61,6 +65,10 @@ fun VideoRecorderPreparationSheet( val context = LocalContext.current val cameras = CameraInfo.queryAvailableCameras(context) + LaunchedEffect(Unit) { + videoSettings.init(context) + } + if (showPreview) CameraPreview( modifier = Modifier @@ -95,13 +103,21 @@ fun VideoRecorderPreparationSheet( style = MaterialTheme.typography.labelLarge, ) } - GlobalSwitch( - label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label), - checked = videoSettings.enableAudio, - onCheckedChange = { - videoSettings.enableAudio = it - } - ) + PermissionRequester( + permission = Manifest.permission.RECORD_AUDIO, + icon = Icons.Default.Mic, + onPermissionAvailable = { + videoSettings.enableAudio = !videoSettings.enableAudio + }, + ) { trigger -> + GlobalSwitch( + label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label), + checked = videoSettings.enableAudio, + onCheckedChange = { + trigger() + } + ) + } Text( stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_selection_label), diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecordingStart.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecordingStart.kt index 897ae27..b90e657 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecordingStart.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/molecules/VideoRecordingStart.kt @@ -58,8 +58,8 @@ fun VideoRecordingStart( } PermissionRequester( - permission = Manifest.permission.RECORD_AUDIO, - icon = Icons.Default.Mic, + permission = Manifest.permission.CAMERA, + icon = Icons.Default.CameraAlt, onPermissionAvailable = { showSheet = true }, diff --git a/app/src/main/java/app/myzel394/alibi/ui/models/VideoRecorderSettingsModel.kt b/app/src/main/java/app/myzel394/alibi/ui/models/VideoRecorderSettingsModel.kt index fd376d5..d755c5b 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/models/VideoRecorderSettingsModel.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/models/VideoRecorderSettingsModel.kt @@ -1,5 +1,8 @@ package app.myzel394.alibi.ui.models +import android.Manifest +import android.Manifest.permission.RECORD_AUDIO +import android.content.Context import android.graphics.Camera import android.hardware.camera2.CameraManager import androidx.camera.core.CameraSelector @@ -8,8 +11,14 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel +import app.myzel394.alibi.ui.utils.PermissionHelper class VideoRecorderSettingsModel : ViewModel() { var enableAudio by mutableStateOf(true) - var cameraID by mutableIntStateOf(0) + var cameraID by mutableIntStateOf(CameraSelector.LENS_FACING_BACK) + + fun init(context: Context) { + enableAudio = PermissionHelper.hasGranted(context, Manifest.permission.RECORD_AUDIO) + cameraID = CameraSelector.LENS_FACING_BACK + } } \ No newline at end of file