diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt index 0d75fe5b3f..6f8b3c1c82 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt @@ -204,6 +204,7 @@ class CameraScreenViewModel : ViewModel() { /** * Start video recording. + * If flash is enabled, turns on the torch for the duration of the recording. */ @androidx.annotation.OptIn(markerClass = [androidx.camera.core.ExperimentalGetImage::class]) @android.annotation.SuppressLint("MissingPermission", "RestrictedApi", "NewApi") @@ -214,6 +215,13 @@ class CameraScreenViewModel : ViewModel() { ) { val capture = videoCapture ?: return + val enableTorch = _state.value.flashMode == FlashMode.On && + _state.value.lensFacing == CameraSelector.LENS_FACING_BACK + + if (enableTorch) { + camera?.cameraControl?.enableTorch(true) + } + camera?.cameraControl?.setZoomRatio(1f) _state.value = _state.value.copy(zoomRatio = 1f) @@ -241,6 +249,10 @@ class CameraScreenViewModel : ViewModel() { vibrate(context) } is VideoRecordEvent.Finalize -> { + if (enableTorch) { + camera?.cameraControl?.enableTorch(false) + } + val result = if (!recordEvent.hasError()) { Log.d(TAG, "Video recording succeeded") when (output) { @@ -278,6 +290,7 @@ class CameraScreenViewModel : ViewModel() { * Stop video recording. */ fun stopRecording() { + camera?.cameraControl?.enableTorch(false) recording?.stop() recording = null }