diff --git a/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt index abcadf4..5aaf273 100644 --- a/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt @@ -194,7 +194,9 @@ class VideoRecorderService : selectedCamera, videoCapture ) - cameraControl = CameraControl(camera!!) + cameraControl = CameraControl(camera!!).also { + it.init() + } onCameraControlAvailable() _cameraAvailableListener.complete(Unit) @@ -309,17 +311,25 @@ class VideoRecorderService : } class CameraControl( - val camera: Camera + val camera: Camera, + // Save state for optimistic updates + var torchEnabled: Boolean = false, ) { + fun init() { + torchEnabled = camera.cameraInfo.torchState.value == TorchState.ON + } + fun enableTorch() { + torchEnabled = true camera.cameraControl.enableTorch(true) } fun disableTorch() { + torchEnabled = false camera.cameraControl.enableTorch(false) } - fun isTorchEnabled(): Boolean { + fun isHardwareTorchReallyEnabled(): Boolean { return camera.cameraInfo.torchState.value == TorchState.ON } diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt index 5b43548..47479d9 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt @@ -19,7 +19,11 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration @@ -224,14 +228,16 @@ fun _VideoControls(videoRecorder: VideoRecorderModel) { if (!videoRecorder.isStartingRecording) { val cameraControl = videoRecorder.recorderService!!.cameraControl!! if (cameraControl.hasTorchAvailable()) { - val isTorchEnabled = cameraControl.isTorchEnabled() + var torchEnabled by rememberSaveable { mutableStateOf(cameraControl.torchEnabled) } TorchStatus( - enabled = isTorchEnabled, + enabled = torchEnabled, onChange = { - if (isTorchEnabled) { + if (torchEnabled) { + torchEnabled = false cameraControl.disableTorch() } else { + torchEnabled = true cameraControl.enableTorch() } },