mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
feat: Add active camera to VideoRecordingStatus
This commit is contained in:
parent
f772818b7b
commit
5f8abca57a
@ -142,4 +142,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation "androidx.camera:camera-view:${camerax_version}"
|
implementation "androidx.camera:camera-view:${camerax_version}"
|
||||||
implementation "androidx.camera:camera-extensions:${camerax_version}"
|
implementation "androidx.camera:camera-extensions:${camerax_version}"
|
||||||
|
|
||||||
|
|
||||||
|
implementation "com.valentinilk.shimmer:compose-shimmer:1.2.0"
|
||||||
}
|
}
|
@ -23,7 +23,7 @@ fun CamerasSelection(
|
|||||||
)
|
)
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
if (cameras.count() == 2 && cameras.elementAt(0).id == 0 && cameras.elementAt(1).id == 1) {
|
if (CameraInfo.checkHasNormalCameras(cameras)) {
|
||||||
CameraSelectionButton(
|
CameraSelectionButton(
|
||||||
cameraID = CameraInfo.Lens.BACK,
|
cameraID = CameraInfo.Lens.BACK,
|
||||||
label = stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_back_label),
|
label = stringResource(R.string.ui_videoRecorder_action_start_settings_cameraLens_back_label),
|
||||||
|
@ -3,6 +3,7 @@ package app.myzel394.alibi.ui.components.RecorderScreen.organisms
|
|||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.animation.expandHorizontally
|
import androidx.compose.animation.expandHorizontally
|
||||||
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
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.Divider
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.LinearProgressIndicator
|
import androidx.compose.material3.LinearProgressIndicator
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@ -29,7 +32,11 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
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.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.DeleteButton
|
||||||
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.PauseResumeButton
|
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.PauseResumeButton
|
||||||
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecordingProgress
|
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.RecordingControl
|
||||||
import app.myzel394.alibi.ui.components.RecorderScreen.molecules.RecordingStatus
|
import app.myzel394.alibi.ui.components.RecorderScreen.molecules.RecordingStatus
|
||||||
import app.myzel394.alibi.ui.models.VideoRecorderModel
|
import app.myzel394.alibi.ui.models.VideoRecorderModel
|
||||||
|
import app.myzel394.alibi.ui.utils.CameraInfo
|
||||||
import app.myzel394.alibi.ui.utils.KeepScreenOn
|
import app.myzel394.alibi.ui.utils.KeepScreenOn
|
||||||
|
import com.valentinilk.shimmer.shimmer
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -48,6 +57,7 @@ fun VideoRecordingStatus(
|
|||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
val availableCameras = CameraInfo.queryAvailableCameras(context)
|
||||||
|
|
||||||
KeepScreenOn()
|
KeepScreenOn()
|
||||||
Column(
|
Column(
|
||||||
@ -58,16 +68,57 @@ fun VideoRecordingStatus(
|
|||||||
) {
|
) {
|
||||||
Box {}
|
Box {}
|
||||||
|
|
||||||
Column {
|
Column(
|
||||||
|
verticalArrangement = Arrangement
|
||||||
|
.spacedBy(24.dp),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Default.CameraAlt,
|
Icons.Default.CameraAlt,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
modifier = Modifier.size(64.dp)
|
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(
|
RecordingStatus(
|
||||||
recordingTime = videoRecorder.recordingTime!!,
|
recordingTime = videoRecorder.recordingTime,
|
||||||
progress = videoRecorder.progress,
|
progress = videoRecorder.progress,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -45,5 +45,9 @@ data class CameraInfo(
|
|||||||
id = cameraId.toInt(),
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user