diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/FaceCaptureViewModel.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/FaceCaptureViewModel.kt index b588440eda..977fb99fa1 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/FaceCaptureViewModel.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/FaceCaptureViewModel.kt @@ -178,7 +178,11 @@ internal class FaceCaptureViewModel @Inject constructor( if (faceConfiguration?.imageSavingStrategy?.shouldSaveImage() == true) { saveFaceDetections() } - + if (faceDetections.isEmpty()) { + Simber.i("No face captured", tag = FACE_CAPTURE) + recapture() + return@launch + } val items = faceDetections.map { detection -> BiometricTemplateCapture( captureEventId = detection.id, @@ -187,7 +191,6 @@ internal class FaceCaptureViewModel @Inject constructor( } val referenceId = UUID.randomUUID().toString() eventReporter.addBiometricReferenceCreationEvents(referenceId, items.map { it.captureEventId }) - val format = faceDetections .firstOrNull() ?.face diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt index f5f8c90e54..4940b7f76f 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt @@ -38,7 +38,14 @@ internal class ConfirmationFragment : Fragment(R.layout.fragment_confirmation) { ) { super.onViewCreated(view, savedInstanceState) applySystemBarInsets(view) - + val detection = mainVm.getSampleDetection() + // Check if state was lost (Process Death) + if (detection == null) { + // it is safer to force a recapture in this case + Simber.i("Face detection state lost during confirmation, forcing recapture", tag = ORCHESTRATION) + mainVm.recapture() + return + } Simber.i("ConfirmationFragment started", tag = ORCHESTRATION) startTime = faceTimeHelper.now() diff --git a/face/capture/src/test/java/com/simprints/face/capture/screens/FaceCaptureViewModelTest.kt b/face/capture/src/test/java/com/simprints/face/capture/screens/FaceCaptureViewModelTest.kt index 49a3a6492d..0ef699ee2b 100644 --- a/face/capture/src/test/java/com/simprints/face/capture/screens/FaceCaptureViewModelTest.kt +++ b/face/capture/src/test/java/com/simprints/face/capture/screens/FaceCaptureViewModelTest.kt @@ -139,6 +139,13 @@ class FaceCaptureViewModelTest { } } + @Test + fun `restart capture when flow finishes and no face detected`() { + viewModel.initFaceBioSdk(mockk(), ModalitySdkType.SIM_FACE) + viewModel.flowFinished() + assertThat(viewModel.recaptureEvent.getOrAwaitValue()).isNotNull() + } + @Test fun `Recapture requests clears capture list`() { viewModel.captureFinished(faceDetections)