Skip to content

Commit d312edd

Browse files
author
Ahmed Mones
committed
AL-189: ensure the events emitted safely
1 parent 2b50fd3 commit d312edd

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

fingerprint/src/main/java/com/fingerprint/manager/FingerprintEvent.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ sealed class FingerprintEvent(val message: String) {
1414
data object KeepFinger : FingerprintEvent("Keep Finger")
1515
data object CapturedSuccessfully : FingerprintEvent("Captured Successfully")
1616
data object CapturingFailed : FingerprintEvent("Capturing Failed")
17+
data object CleanTheFingerprint : FingerprintEvent("Clean The Fingerprint")
1718
class NewImage(val bitmapArray: ByteArray) : FingerprintEvent("New Image")
1819
}

fingerprint/src/main/java/com/fingerprint/manager/FingerprintManagerImpl.kt

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ internal class FingerprintManagerImpl(
7676
isConnected = false
7777
unregisterReceiver()
7878
fingerprintScanner?.disconnect()
79-
eventsFlow.tryEmit(FingerprintEvent.Disconnected)
79+
emitEvent(FingerprintEvent.Disconnected)
8080
}
8181

8282
override fun scan(count: Int): Boolean {
8383
if (!isConnected) {
84-
eventsFlow.tryEmit(FingerprintEvent.ConnectingFailed)
84+
emitEvent(FingerprintEvent.ConnectingFailed)
8585
return false
8686
}
8787
reset()
@@ -109,16 +109,18 @@ internal class FingerprintManagerImpl(
109109
context.registerReceiver(usbReceiver, filter)
110110
}
111111

112+
private fun emitEvent(event: FingerprintEvent) = scope.launch { eventsFlow.emit(event) }
113+
112114
private fun requestUsbPermission() {
113115
usbManager.supportedDevice?.let { device ->
114116
val fingerprintScanner = fingerprintScanner ?: return
115117
if (usbManager!!.hasPermission(device))
116118
isConnected = fingerprintScanner.reconnect(device).apply {
117-
eventsFlow.tryEmit(if (this) FingerprintEvent.Connected else FingerprintEvent.ConnectingFailed)
119+
emitEvent(if (this) FingerprintEvent.Connected else FingerprintEvent.ConnectingFailed)
118120
}
119121
else
120122
usbManager.requestPermission(device, permissionIntent)
121-
} ?: eventsFlow.tryEmit(FingerprintEvent.Idle)
123+
} ?: emitEvent(FingerprintEvent.Idle)
122124
}
123125

124126
private val usbReceiver = object : BroadcastReceiver() {
@@ -136,7 +138,7 @@ internal class FingerprintManagerImpl(
136138
@Suppress("DEPRECATION")
137139
intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
138140
)
139-
?: return eventsFlow.tryEmit(FingerprintEvent.ConnectingFailed).returnUnit()
141+
?: return emitEvent(FingerprintEvent.ConnectingFailed).returnUnit()
140142

141143
val isGranted = intent.getBooleanExtra(
142144
UsbManager.EXTRA_PERMISSION_GRANTED,
@@ -146,19 +148,19 @@ internal class FingerprintManagerImpl(
146148
val fingerprintScanner = fingerprintScanner ?: return
147149
if (isGranted)
148150
isConnected = fingerprintScanner.reconnect(device).apply {
149-
eventsFlow.tryEmit(if (this) FingerprintEvent.Connected else FingerprintEvent.ConnectingFailed)
151+
emitEvent(if (this) FingerprintEvent.Connected else FingerprintEvent.ConnectingFailed)
150152
}
151153
else
152-
eventsFlow.tryEmit(FingerprintEvent.ConnectingFailed)
154+
emitEvent(FingerprintEvent.ConnectingFailed)
153155
}
154156

155157
UsbManager.ACTION_USB_DEVICE_ATTACHED -> {
156-
eventsFlow.tryEmit(FingerprintEvent.DeviceAttached)
158+
emitEvent(FingerprintEvent.DeviceAttached)
157159
requestUsbPermission()
158160
}
159161

160162
UsbManager.ACTION_USB_DEVICE_DETACHED -> {
161-
eventsFlow.tryEmit(FingerprintEvent.DeviceDetached)
163+
emitEvent(FingerprintEvent.DeviceDetached)
162164
disconnect()
163165
}
164166

@@ -200,10 +202,10 @@ internal class FingerprintManagerImpl(
200202
}
201203
}
202204

203-
private fun onFingerLiftDuringScanning() {
205+
private suspend fun onFingerLiftDuringScanning() {
204206
scanningJob?.cancel()
205207
isCanceled = true
206-
eventsFlow.tryEmit(FingerprintEvent.ProcessCanceledTheFingerLifted)
208+
eventsFlow.emit(FingerprintEvent.ProcessCanceledTheFingerLifted)
207209
}
208210

209211
private fun reset() {
@@ -272,7 +274,7 @@ internal class FingerprintManagerImpl(
272274
delay(SCAN_DELAY_IN_MILLIS)
273275
true
274276
} else {
275-
eventsFlow.tryEmit(FingerprintEvent.CapturingFailed)
277+
eventsFlow.emit(FingerprintEvent.CapturingFailed)
276278
false
277279
}
278280
}.onFailure { Log.e("DEBUGGING -> getImageData() -> ", it.toString()) }

0 commit comments

Comments
 (0)