From d31316b1655e0ea45ae4613bb48a53e29dd3af71 Mon Sep 17 00:00:00 2001 From: Sergejs Luhmirins Date: Thu, 20 Feb 2025 17:24:31 +0200 Subject: [PATCH] MS-886 Run licence check only on the first opening of capture screen --- .../face/capture/screens/FaceCaptureViewModel.kt | 15 ++++++++++----- .../capture/screens/FaceCaptureViewModelTest.kt | 8 +++++--- 2 files changed, 15 insertions(+), 8 deletions(-) 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 3a0c3f2a51..23e1082096 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 @@ -18,7 +18,6 @@ import com.simprints.face.capture.usecases.SaveFaceImageUseCase import com.simprints.face.capture.usecases.SimpleCaptureEventReporter import com.simprints.face.infra.biosdkresolver.ResolveFaceBioSdkUseCase import com.simprints.infra.authstore.AuthStore -import com.simprints.infra.config.store.models.experimental import com.simprints.infra.config.sync.ConfigManager import com.simprints.infra.license.LicenseRepository import com.simprints.infra.license.LicenseStatus @@ -56,6 +55,7 @@ internal class FaceCaptureViewModel @Inject constructor( // Updated in live feedback screen var attemptNumber: Int = 0 var samplesToCapture = 1 + var initialised = false var shouldCheckCameraPermissions = AtomicBoolean(true) @@ -90,6 +90,11 @@ internal class FaceCaptureViewModel @Inject constructor( } fun initFaceBioSdk(activity: Activity) = viewModelScope.launch { + if (initialised) { + Simber.i("Face bio SDK already initialised", tag = FACE_CAPTURE) + return@launch + } + Simber.i("Starting face capture flow", tag = FACE_CAPTURE) val licenseVendor = Vendor.RankOne @@ -124,10 +129,9 @@ internal class FaceCaptureViewModel @Inject constructor( saveLicenseCheckEvent(licenseVendor, licenseStatus) } - fun setupAutoCapture() = - viewModelScope.launch { - _isAutoCaptureEnabled.postValue(isUsingAutoCapture()) - } + fun setupAutoCapture() = viewModelScope.launch { + _isAutoCaptureEnabled.postValue(isUsingAutoCapture()) + } private suspend fun initialize( activity: Activity, @@ -139,6 +143,7 @@ internal class FaceCaptureViewModel @Inject constructor( // This is should reported as an error return LicenseStatus.ERROR } + initialised = true return LicenseStatus.VALID } 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 2c32b45e0f..0e042b5535 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 @@ -11,7 +11,6 @@ import com.simprints.face.capture.usecases.SimpleCaptureEventReporter import com.simprints.face.infra.basebiosdk.initialization.FaceBioSdkInitializer import com.simprints.infra.authstore.AuthStore import com.simprints.infra.config.store.models.FaceConfiguration.ImageSavingStrategy -import com.simprints.infra.config.store.models.experimental import com.simprints.infra.config.sync.ConfigManager import com.simprints.infra.license.LicenseRepository import com.simprints.infra.license.LicenseStatus @@ -161,7 +160,7 @@ class FaceCaptureViewModelTest { } @Test - fun `test initFaceBioSdk should initialize faceBioSdk`() { + fun `test initFaceBioSdk should initialize faceBioSdk only once`() { // Given val license = "license" every { faceBioSdkInitializer.tryInitWithLicense(any(), license) } returns true @@ -173,8 +172,11 @@ class FaceCaptureViewModelTest { // When viewModel.initFaceBioSdk(mockk()) + viewModel.initFaceBioSdk(mockk()) + viewModel.initFaceBioSdk(mockk()) + // Then - coVerify { faceBioSdkInitializer.tryInitWithLicense(any(), license) } + coVerify(exactly = 1) { faceBioSdkInitializer.tryInitWithLicense(any(), license) } assertThat(licenseStatusSlot.captured).isEqualTo(LicenseStatus.VALID) }