From 2308f21171dbdcb4a3a79712348d3c98e80e0531 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Sun, 25 Jan 2026 17:43:12 +0100 Subject: [PATCH] Persist torch state while the app is open (#95) --- .../org/fairscan/app/ui/screens/camera/CameraScreen.kt | 9 ++++++--- .../fairscan/app/ui/screens/camera/CameraViewModel.kt | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraScreen.kt b/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraScreen.kt index ae3499a..e810622 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraScreen.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraScreen.kt @@ -122,7 +122,7 @@ fun CameraScreen( val document by viewModel.documentUiModel.collectAsStateWithLifecycle() val thumbnailCoords = remember { mutableStateOf(Offset.Zero) } var isDebugMode by remember { mutableStateOf(false) } - var isTorchEnabled by remember { mutableStateOf(false) } + val isTorchEnabled by cameraViewModel.isTorchEnabled.collectAsStateWithLifecycle() BackHandler { navigation.back() } @@ -130,6 +130,9 @@ fun CameraScreen( DisposableEffect(Unit) { onDispose { captureController.shutdown() } } + LaunchedEffect(captureController.cameraControl, isTorchEnabled) { + captureController.cameraControl?.enableTorch(isTorchEnabled) + } val captureState by cameraViewModel.captureState.collectAsStateWithLifecycle() if (captureState is CaptureState.CapturePreview) { @@ -197,8 +200,8 @@ fun CameraScreen( onFinalizePressed = onFinalizePressed, onDebugModeSwitched = { isDebugMode = !isDebugMode }, onTorchSwitched = { - isTorchEnabled = !isTorchEnabled - captureController.cameraControl?.enableTorch(isTorchEnabled) }, + cameraViewModel.setTorchEnabled(!isTorchEnabled) + }, thumbnailCoords = thumbnailCoords, navigation = navigation, captureController diff --git a/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraViewModel.kt b/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraViewModel.kt index 94bcd7d..6af0c2e 100644 --- a/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraViewModel.kt +++ b/app/src/main/java/org/fairscan/app/ui/screens/camera/CameraViewModel.kt @@ -63,6 +63,9 @@ class CameraViewModel(appContainer: AppContainer): ViewModel() { private val _captureState = MutableStateFlow(CaptureState.Idle) val captureState: StateFlow = _captureState + private val _isTorchEnabled = MutableStateFlow(false) + val isTorchEnabled: StateFlow = _isTorchEnabled + init { viewModelScope.launch { imageSegmentationService.initialize() @@ -170,6 +173,10 @@ class CameraViewModel(appContainer: AppContainer): ViewModel() { logger.e("Camera", message, throwable) } } + + fun setTorchEnabled(enabled: Boolean) { + _isTorchEnabled.value = enabled + } } sealed class CaptureState {