mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 23:05:26 +02:00
feat: Add permission check to camera and audio
This commit is contained in:
parent
22876c3be5
commit
7f757f46f3
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
GlobalSwitch(
|
PermissionRequester(
|
||||||
label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label),
|
permission = Manifest.permission.RECORD_AUDIO,
|
||||||
checked = videoSettings.enableAudio,
|
icon = Icons.Default.Mic,
|
||||||
onCheckedChange = {
|
onPermissionAvailable = {
|
||||||
videoSettings.enableAudio = it
|
videoSettings.enableAudio = !videoSettings.enableAudio
|
||||||
}
|
},
|
||||||
)
|
) { trigger ->
|
||||||
|
GlobalSwitch(
|
||||||
|
label = stringResource(R.string.ui_videoRecorder_action_start_settings_enableAudio_label),
|
||||||
|
checked = videoSettings.enableAudio,
|
||||||
|
onCheckedChange = {
|
||||||
|
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),
|
||||||
|
@ -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
|
||||||
},
|
},
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user