diff --git a/feature/dashboard/src/main/res/values/ids.xml b/feature/dashboard/src/main/res/values/ids.xml index 6ab8e37fb3..cca9a92677 100644 --- a/feature/dashboard/src/main/res/values/ids.xml +++ b/feature/dashboard/src/main/res/values/ids.xml @@ -11,6 +11,7 @@ select_fingers_preference_key sync_info_preference_key preference_update_config_key + preference_enable_audio_on_scan_complete_key app_details_key app_details_preference_key diff --git a/feature/dashboard/src/main/res/xml/preference_general.xml b/feature/dashboard/src/main/res/xml/preference_general.xml index e4d4e6c5d1..20906d3c0c 100644 --- a/feature/dashboard/src/main/res/xml/preference_general.xml +++ b/feature/dashboard/src/main/res/xml/preference_general.xml @@ -23,6 +23,12 @@ android:key="@string/preference_update_config_key" android:summary="@string/dashboard_preference_summary_update_config" android:title="@string/dashboard_preference_update_config_title" /> + + ( + replay = 0, + extraBufferCapacity = 1, + onBufferOverflow = BufferOverflow.DROP_OLDEST + ) + val scanCompleted: SharedFlow get() = _scanCompleted + + fun notifyScanCompleted() { + _scanCompleted.tryEmit(Unit) + } +} diff --git a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperFactoryTest.kt b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperFactoryTest.kt index e29a83fb55..9203784100 100644 --- a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperFactoryTest.kt +++ b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperFactoryTest.kt @@ -16,7 +16,9 @@ class FingerprintCaptureWrapperFactoryTest { @Before fun setUp() { fingerprintCaptureWrapperFactory = - FingerprintCaptureWrapperFactory(UnconfinedTestDispatcher(), ScannerUiHelper()) + FingerprintCaptureWrapperFactory( + UnconfinedTestDispatcher(), ScannerUiHelper(), mockk(relaxed = true) + ) } @Test(expected = NullScannerException::class) diff --git a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV1Test.kt b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV1Test.kt index d935dbad0a..6861c8ee9d 100644 --- a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV1Test.kt +++ b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV1Test.kt @@ -11,6 +11,7 @@ import com.simprints.fingerprint.infra.scanner.v2.domain.main.message.un20.model import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK +import io.mockk.mockk import io.mockk.slot import io.mockk.verify import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -31,7 +32,8 @@ class FingerprintCaptureWrapperV1Test { @Before fun setup() { MockKAnnotations.init(this, relaxed = true) - scannerWrapper = FingerprintCaptureWrapperV1(scanner, UnconfinedTestDispatcher()) + scannerWrapper = + FingerprintCaptureWrapperV1(scanner, UnconfinedTestDispatcher(), mockk(relaxed = true)) } @Test(expected = ScannerOperationInterruptedException::class) diff --git a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV2Test.kt b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV2Test.kt index 4aa2d51214..de4822fc5d 100644 --- a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV2Test.kt +++ b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintCaptureWrapperV2Test.kt @@ -17,6 +17,7 @@ import com.simprints.testtools.common.syntax.assertThrows import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK +import io.mockk.mockk import io.mockk.verify import io.reactivex.Completable import io.reactivex.Maybe @@ -39,7 +40,9 @@ class FingerprintCaptureWrapperV2Test { fun setup() { MockKAnnotations.init(this, relaxed = true) scannerWrapper = - FingerprintCaptureWrapperV2(scannerV2, scannerUiHelper, UnconfinedTestDispatcher()) + FingerprintCaptureWrapperV2( + scannerV2, scannerUiHelper, UnconfinedTestDispatcher(), mockk(relaxed = true) + ) } @Test diff --git a/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintScanningStatusTrackerTest.kt b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintScanningStatusTrackerTest.kt new file mode 100644 index 0000000000..f539dda0f9 --- /dev/null +++ b/fingerprint/infra/scanner/src/test/java/com/simprints/fingerprint/infra/scanner/capture/FingerprintScanningStatusTrackerTest.kt @@ -0,0 +1,42 @@ +package com.simprints.fingerprint.infra.scanner.capture + +import com.google.common.truth.Truth +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest +import org.junit.Test + +@OptIn(ExperimentalCoroutinesApi::class) +class FingerprintScanningStatusTrackerTest { + private val tracker = FingerprintScanningStatusTracker() + private val testDispatcher = UnconfinedTestDispatcher() + + @Test + fun `test notifyScanCompleted emits Unit`() = runTest(testDispatcher) { + var emitted = false + val job = launch { + tracker.scanCompleted.collect { + emitted = true + } + } + tracker.notifyScanCompleted() + Truth.assertThat(emitted).isTrue() + job.cancel() + } + + @Test + fun `test scanCompleted flow does not replay past emissions`() = runTest(testDispatcher) { + tracker.notifyScanCompleted() + + var emitted = false + val job = launch { + tracker.scanCompleted.collect { + emitted = true + } + } + Truth.assertThat(emitted).isFalse() + job.cancel() + } + +} diff --git a/infra/resources/src/main/res/values/strings.xml b/infra/resources/src/main/res/values/strings.xml index 46929283ca..2399e1a760 100644 --- a/infra/resources/src/main/res/values/strings.xml +++ b/infra/resources/src/main/res/values/strings.xml @@ -371,9 +371,10 @@ View the fingers that will be scanned Further details on sync Refresh device and project configuration + Enable or disable audio alerts when a fingerprint scan is completed, notifying the user to remove their hand from the scanner. Copied to clipboard Configuration update started - + Audio on Fingerprint Scan Completion Sync Information