From 48985fb6b41188606b362045238508654214e5fc Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:12:47 +0100 Subject: [PATCH] Avoid crash when processing a captured image fails (#93) --- app/proguard-rules.pro | 2 ++ .../app/ui/screens/camera/CameraViewModel.kt | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 66e9e42..c46c077 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -26,3 +26,5 @@ -keep class org.fairscan.app.RecentDocument* { *; } -keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite { *; } +# to have at least org.opencv.core.CvException +-keep class org.opencv.core.** { *; } 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 86e644c..b33bbf4 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 @@ -116,10 +116,15 @@ class CameraViewModel(appContainer: AppContainer): ViewModel() { fun onImageCaptured(imageProxy: ImageProxy?) { if (imageProxy != null) { viewModelScope.launch { - val source = imageProxy.toBitmap() - val page = processCapturedImage(source, imageProxy.imageInfo.rotationDegrees) - imageProxy.close() - onCaptureProcessed(page) + try { + val source = imageProxy.toBitmap() + val page = processCapturedImage(source, imageProxy.imageInfo.rotationDegrees) + imageProxy.close() + onCaptureProcessed(page) + } catch (e: RuntimeException) { + logger.e("Camera", "Failed to process captured image", e) + onCaptureProcessed(null) + } } } else { onCaptureProcessed(null)