From de698c8a1aed1e20ff92d1bf59784dfe1e11b309 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 6 Feb 2026 15:44:52 -0500 Subject: [PATCH] Enable torch during video recording in new camera. --- .../java/org/signal/camera/CameraScreenViewModel.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 }