feat: Add active camera to VideoRecordingStatus

This commit is contained in:
Myzel394 2023-12-15 20:35:10 +01:00
parent f772818b7b
commit 5f8abca57a
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
4 changed files with 61 additions and 3 deletions

View File

@ -142,4 +142,7 @@ dependencies {
implementation "androidx.camera:camera-view:${camerax_version}"
implementation "androidx.camera:camera-extensions:${camerax_version}"
implementation "com.valentinilk.shimmer:compose-shimmer:1.2.0"
}

View File

@ -23,7 +23,7 @@ fun CamerasSelection(
)
Column {
if (cameras.count() == 2 && cameras.elementAt(0).id == 0 && cameras.elementAt(1).id == 1) {
if (CameraInfo.checkHasNormalCameras(cameras)) {
CameraSelectionButton(
cameraID = CameraInfo.Lens.BACK,
label = stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_back_label),

View File

@ -3,6 +3,7 @@ package app.myzel394.alibi.ui.components.RecorderScreen.organisms
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
import androidx.compose.animation.expandHorizontally
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@ -19,6 +20,8 @@ import androidx.compose.material.icons.filled.CameraAlt
import androidx.compose.material3.Divider
import androidx.compose.material3.Icon
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@ -29,7 +32,11 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.util.TypedValueCompat
import app.myzel394.alibi.R
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.DeleteButton
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.PauseResumeButton
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecordingProgress
@ -39,7 +46,9 @@ import app.myzel394.alibi.ui.components.RecorderScreen.atoms.TorchStatus
import app.myzel394.alibi.ui.components.RecorderScreen.molecules.RecordingControl
import app.myzel394.alibi.ui.components.RecorderScreen.molecules.RecordingStatus
import app.myzel394.alibi.ui.models.VideoRecorderModel
import app.myzel394.alibi.ui.utils.CameraInfo
import app.myzel394.alibi.ui.utils.KeepScreenOn
import com.valentinilk.shimmer.shimmer
import kotlinx.coroutines.launch
@Composable
@ -48,6 +57,7 @@ fun VideoRecordingStatus(
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
val availableCameras = CameraInfo.queryAvailableCameras(context)
KeepScreenOn()
Column(
@ -58,16 +68,57 @@ fun VideoRecordingStatus(
) {
Box {}
Column {
Column(
verticalArrangement = Arrangement
.spacedBy(24.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Icon(
Icons.Default.CameraAlt,
contentDescription = null,
modifier = Modifier.size(64.dp)
)
if (videoRecorder.isStartingRecording) {
Box(
modifier = Modifier
.width(128.dp)
.height(
with(LocalDensity.current) {
MaterialTheme.typography.labelMedium.fontSize.toDp()
}
)
.shimmer()
.background(
MaterialTheme.colorScheme.surfaceVariant,
MaterialTheme.shapes.small
)
)
} else {
Text(
stringResource(
R.string.form_value_selected,
if (CameraInfo.checkHasNormalCameras(availableCameras)) {
videoRecorder.cameraID.let {
if (it == CameraInfo.Lens.BACK.androidValue)
stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_back_label)
else
stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_front_label)
}
} else {
stringResource(
R.string.ui_videoRecorder_action_start_settings_cameraLens_label,
videoRecorder.cameraID
)
}
),
style = MaterialTheme.typography.labelMedium,
)
}
}
RecordingStatus(
recordingTime = videoRecorder.recordingTime!!,
recordingTime = videoRecorder.recordingTime,
progress = videoRecorder.progress,
)

View File

@ -45,5 +45,9 @@ data class CameraInfo(
id = cameraId.toInt(),
)
}
// "normal cameras" means the device has a front and back camera
fun checkHasNormalCameras(cameras: Iterable<CameraInfo>) =
cameras.count() == 2 && cameras.elementAt(0).id == 0 && cameras.elementAt(1).id == 1
}
}