From f426cfe287e262426dd1b1887addb9133b2691f3 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 23 Feb 2024 22:46:13 +0100 Subject: [PATCH] refactor: Use optimistic updates for torch Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com> --- .../alibi/services/VideoRecorderService.kt | 16 +++++++++++++--- .../organisms/VideoRecordingStatus.kt | 12 +++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) 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() } },