From 32c24c3eae8779a080fe62834f8f19b31f853ded Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Fri, 24 Apr 2026 17:34:06 +0200 Subject: [PATCH] Avoid crashing when importing an invalid image (#171) --- .../app/ui/screens/camera/CameraViewModel.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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 9194ca9..23de9cf 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 @@ -36,6 +36,7 @@ import org.fairscan.app.domain.CapturedPage import org.fairscan.app.platform.extractDocumentFromBitmap import org.fairscan.imageprocessing.ImageSize import org.fairscan.imageprocessing.detectDocumentQuad +import java.util.concurrent.CancellationException sealed interface CameraEvent { data class ImageCaptured(val page: CapturedPage) : CameraEvent @@ -203,12 +204,18 @@ class CameraViewModel(appContainer: AppContainer): ViewModel() { _importState.value = ImportState.Importing(0, uris.size) uris.forEachIndexed { index, uri -> ensureActive() - val photoToImport = imageLoader.load(uri) - ensureActive() - val page = processCapturedImage(photoToImport, 0) - ensureActive() - page?.let { - _events.emit(CameraEvent.ImageCaptured(it)) + try { + val photoToImport = imageLoader.load(uri) + ensureActive() + val page = processCapturedImage(photoToImport, 0) + ensureActive() + page?.let { + _events.emit(CameraEvent.ImageCaptured(it)) + } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + logger.e("Import", "Failed to import image: $uri", e) } _importState.value = ImportState.Importing(index + 1, uris.size) }