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 {