feat: Add permission check to camera and audio

This commit is contained in:
Myzel394 2023-12-04 08:52:54 +01:00
parent 22876c3be5
commit 7f757f46f3
No known key found for this signature in database
GPG Key ID: 50098FCA22080F0F
3 changed files with 35 additions and 10 deletions

View File

@ -1,5 +1,6 @@
package app.myzel394.alibi.ui.components.RecorderScreen.molecules package app.myzel394.alibi.ui.components.RecorderScreen.molecules
import android.Manifest
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.awaitEachGesture 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.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CameraAlt import androidx.compose.material.icons.filled.CameraAlt
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@ -23,6 +25,7 @@ import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier 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.BIG_PRIMARY_BUTTON_SIZE
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.CameraPreview import app.myzel394.alibi.ui.components.RecorderScreen.atoms.CameraPreview
import app.myzel394.alibi.ui.components.atoms.GlobalSwitch 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.models.VideoRecorderSettingsModel
import app.myzel394.alibi.ui.utils.CameraInfo import app.myzel394.alibi.ui.utils.CameraInfo
@ -61,6 +65,10 @@ fun VideoRecorderPreparationSheet(
val context = LocalContext.current val context = LocalContext.current
val cameras = CameraInfo.queryAvailableCameras(context) val cameras = CameraInfo.queryAvailableCameras(context)
LaunchedEffect(Unit) {
videoSettings.init(context)
}
if (showPreview) if (showPreview)
CameraPreview( CameraPreview(
modifier = Modifier modifier = Modifier
@ -95,13 +103,21 @@ fun VideoRecorderPreparationSheet(
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge,
) )
} }
PermissionRequester(
permission = Manifest.permission.RECORD_AUDIO,
icon = Icons.Default.Mic,
onPermissionAvailable = {
videoSettings.enableAudio = !videoSettings.enableAudio
},
) { trigger ->
GlobalSwitch( GlobalSwitch(
label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label), label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label),
checked = videoSettings.enableAudio, checked = videoSettings.enableAudio,
onCheckedChange = { onCheckedChange = {
videoSettings.enableAudio = it trigger()
} }
) )
}
Text( Text(
stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_selection_label), stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_selection_label),

View File

@ -58,8 +58,8 @@ fun VideoRecordingStart(
} }
PermissionRequester( PermissionRequester(
permission = Manifest.permission.RECORD_AUDIO, permission = Manifest.permission.CAMERA,
icon = Icons.Default.Mic, icon = Icons.Default.CameraAlt,
onPermissionAvailable = { onPermissionAvailable = {
showSheet = true showSheet = true
}, },

View File

@ -1,5 +1,8 @@
package app.myzel394.alibi.ui.models 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.graphics.Camera
import android.hardware.camera2.CameraManager import android.hardware.camera2.CameraManager
import androidx.camera.core.CameraSelector import androidx.camera.core.CameraSelector
@ -8,8 +11,14 @@ import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import app.myzel394.alibi.ui.utils.PermissionHelper
class VideoRecorderSettingsModel : ViewModel() { class VideoRecorderSettingsModel : ViewModel() {
var enableAudio by mutableStateOf(true) 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
}
} }