@regulaforensics/react-native-document-reader-api 6.9.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +10 -42
  2. package/RNDocumentReaderApi.podspec +1 -1
  3. package/android/build.gradle +10 -10
  4. package/android/src/main/java/com/regula/documentreader/BluetoothUtil.kt +78 -74
  5. package/android/src/main/java/com/regula/documentreader/Config.kt +690 -0
  6. package/android/src/main/java/com/regula/documentreader/JSONConstructor.kt +2188 -0
  7. package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.kt +537 -0
  8. package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderPackage.kt +11 -0
  9. package/android/src/main/java/com/regula/documentreader/Utils.kt +256 -0
  10. package/example/App.tsx +97 -145
  11. package/example/README.md +37 -0
  12. package/example/android/app/build.gradle +1 -1
  13. package/example/android/app/src/main/java/com/regula/dr/fullrfid/MainApplication.java +0 -1
  14. package/example/android/app/src/main/res/values/styles.xml +1 -2
  15. package/example/android/build.gradle +2 -4
  16. package/example/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  17. package/example/android/gradle.properties +1 -1
  18. package/example/index.js +1 -2
  19. package/example/ios/DocumentReader.xcodeproj/project.pbxproj +8 -4
  20. package/example/ios/Podfile +0 -1
  21. package/example/package-lock.json +3062 -2198
  22. package/example/package.json +24 -23
  23. package/index.d.ts +296 -135
  24. package/index.js +234 -115
  25. package/ios/RGLWConfig.h +48 -0
  26. package/ios/RGLWConfig.m +1325 -0
  27. package/ios/RGLWJSONConstructor.h +173 -69
  28. package/ios/RGLWJSONConstructor.m +1817 -762
  29. package/ios/RNRegulaDocumentReader.h +6 -5
  30. package/ios/RNRegulaDocumentReader.m +392 -584
  31. package/package.json +1 -1
  32. package/android/src/main/java/com/regula/documentreader/Helpers.java +0 -259
  33. package/android/src/main/java/com/regula/documentreader/JSONConstructor.java +0 -1119
  34. package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.java +0 -1153
  35. package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderPackage.java +0 -26
  36. package/android/src/main/java/com/regula/documentreader/RegulaConfig.java +0 -830
  37. package/example/.bundle/config +0 -2
  38. package/example/.eslintrc.js +0 -4
  39. package/example/.prettierrc.js +0 -7
  40. package/example/Gemfile +0 -6
  41. package/example/Gemfile.lock +0 -98
  42. package/example/__tests__/App.test.tsx +0 -17
  43. package/example/app.json +0 -4
  44. package/example/babel.config.js +0 -3
  45. package/example/jest.config.js +0 -3
  46. package/example/tsconfig.json +0 -3
  47. package/ios/RGLWRegulaConfig.h +0 -26
  48. package/ios/RGLWRegulaConfig.m +0 -1152
  49. package/ios/RNRegulaDocumentReader.xcodeproj/project.pbxproj +0 -304
  50. package/ios/RNRegulaDocumentReader.xcworkspace/contents.xcworkspacedata +0 -9
@@ -0,0 +1,537 @@
1
+ @file:Suppress("UNCHECKED_CAST")
2
+
3
+ package com.regula.documentreader
4
+
5
+ import android.annotation.SuppressLint
6
+ import android.app.Activity
7
+ import android.app.PendingIntent
8
+ import android.content.Intent
9
+ import android.content.IntentFilter
10
+ import android.nfc.NfcAdapter
11
+ import android.nfc.tech.IsoDep
12
+ import android.os.Build
13
+ import androidx.appcompat.app.AppCompatActivity
14
+ import androidx.lifecycle.Lifecycle
15
+ import androidx.lifecycle.LifecycleEventObserver
16
+ import com.facebook.react.bridge.ActivityEventListener
17
+ import com.facebook.react.bridge.Arguments
18
+ import com.facebook.react.bridge.ReactApplicationContext
19
+ import com.facebook.react.bridge.ReactContext
20
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
21
+ import com.facebook.react.bridge.ReactMethod
22
+ import com.facebook.react.bridge.ReadableArray
23
+ import com.facebook.react.modules.core.DeviceEventManagerModule
24
+ import com.regula.common.LocalizationCallbacks
25
+ import com.regula.documentreader.Convert.bitmapToBase64
26
+ import com.regula.documentreader.Convert.byteArrayFromBase64
27
+ import com.regula.documentreader.api.DocumentReader.Instance
28
+ import com.regula.documentreader.api.completions.IDocumentReaderCompletion
29
+ import com.regula.documentreader.api.completions.IDocumentReaderInitCompletion
30
+ import com.regula.documentreader.api.completions.IDocumentReaderPrepareCompletion
31
+ import com.regula.documentreader.api.completions.rfid.IRfidPKDCertificateCompletion
32
+ import com.regula.documentreader.api.completions.rfid.IRfidReaderCompletion
33
+ import com.regula.documentreader.api.completions.rfid.IRfidReaderRequest
34
+ import com.regula.documentreader.api.completions.rfid.IRfidTASignatureCompletion
35
+ import com.regula.documentreader.api.completions.rfid.certificates.IRfidPACertificates
36
+ import com.regula.documentreader.api.completions.rfid.certificates.IRfidTACertificates
37
+ import com.regula.documentreader.api.completions.rfid.certificates.IRfidTASignature
38
+ import com.regula.documentreader.api.enums.DocReaderAction
39
+ import com.regula.documentreader.api.enums.LCID
40
+ import com.regula.documentreader.api.enums.eImageQualityCheckType
41
+ import com.regula.documentreader.api.enums.eLDS_ParsingErrorCodes
42
+ import com.regula.documentreader.api.enums.eLDS_ParsingNotificationCodes
43
+ import com.regula.documentreader.api.enums.eRFID_DataFile_Type
44
+ import com.regula.documentreader.api.enums.eRFID_ErrorCodes
45
+ import com.regula.documentreader.api.enums.eVisualFieldType
46
+ import com.regula.documentreader.api.errors.DocReaderRfidException
47
+ import com.regula.documentreader.api.errors.DocumentReaderException
48
+ import com.regula.documentreader.api.internal.core.CoreScenarioUtil
49
+ import com.regula.documentreader.api.results.DocumentReaderNotification
50
+ import com.regula.documentreader.api.results.DocumentReaderResults
51
+ import com.regula.documentreader.api.results.DocumentReaderResults.fromRawResults
52
+ import com.regula.documentreader.api.results.DocumentReaderScenario
53
+ import org.json.JSONArray
54
+ import org.json.JSONObject
55
+
56
+ @Suppress("unused", "UNUSED_PARAMETER")
57
+ class RNRegulaDocumentReaderModule(rc: ReactApplicationContext) : ReactContextBaseJavaModule(rc), ActivityEventListener {
58
+ init {
59
+ reactContext = rc
60
+ reactContext.addActivityEventListener(this)
61
+ }
62
+
63
+ @ReactMethod
64
+ fun addListener(eventName: String?) = Unit
65
+
66
+ @ReactMethod
67
+ fun removeListeners(count: Int?) = Unit
68
+
69
+ @ReactMethod
70
+ fun exec(moduleName: String?, action: String?, args: ReadableArray, successCallback: com.facebook.react.bridge.Callback, errorCallback: com.facebook.react.bridge.Callback) = exec(action, args, successCallback, errorCallback)
71
+ override fun getName() = "RNRegulaDocumentReader"
72
+ override fun onNewIntent(intent: Intent) = newIntent(intent)
73
+ override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) = Unit
74
+ }
75
+
76
+ fun sendEvent(event: String, data: Any? = "") {
77
+ val map = Arguments.createMap()
78
+ val result = if (data is JSONObject || data is JSONArray) data.toString() else data.toString() + ""
79
+ map.putString("msg", result)
80
+ reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java).emit(event, map)
81
+ }
82
+
83
+ fun <T> argsNullable(index: Int): T? {
84
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
85
+ // Rewrite it according to react native documentation!!!
86
+ // the is no int or double in js so all ints are sent as double by default
87
+ val value = args[index]
88
+ if (value is Double) if (value % 1 == 0.0) {
89
+ val intValue = value.toInt()
90
+ return intValue as T
91
+ }
92
+ return args[index] as T
93
+ }
94
+
95
+ lateinit var args: JSONArray
96
+ lateinit var reactContext: ReactContext
97
+ val lifecycle: Lifecycle
98
+ get() = (activity as AppCompatActivity).lifecycle
99
+
100
+ fun exec(action: String?, arguments: ReadableArray, successCallback: com.facebook.react.bridge.Callback, errorCallback: com.facebook.react.bridge.Callback) {
101
+ args = JSONArray(arguments.toArrayList())
102
+ activity = reactContext.currentActivity!!
103
+ val callback = object : Callback {
104
+ override fun success(data: Any?) = successCallback.invoke(data.toSendable())
105
+ override fun error(message: String) = errorCallback.invoke(message)
106
+ }
107
+ when (action) {
108
+ "getDocumentReaderIsReady" -> getDocumentReaderIsReady(callback)
109
+ "getDocumentReaderStatus" -> getDocumentReaderStatus(callback)
110
+ "isAuthenticatorAvailableForUse" -> isAuthenticatorAvailableForUse(callback)
111
+ "isBlePermissionsGranted" -> isBlePermissionsGranted(callback)
112
+ "getRfidSessionStatus" -> getRfidSessionStatus(callback)
113
+ "setRfidSessionStatus" -> setRfidSessionStatus(callback)
114
+ "getTag" -> getTag(callback)
115
+ "setTag" -> setTag(argsNullable(0))
116
+ "getFunctionality" -> getFunctionality(callback)
117
+ "setFunctionality" -> setFunctionality(args(0))
118
+ "getProcessParams" -> getProcessParams(callback)
119
+ "setProcessParams" -> setProcessParams(args(0))
120
+ "getCustomization" -> getCustomization(callback)
121
+ "setCustomization" -> setCustomization(args(0))
122
+ "getRfidScenario" -> getRfidScenario(callback)
123
+ "setRfidScenario" -> setRfidScenario(args(0))
124
+ "initializeReader" -> initializeReader(callback, args(0))
125
+ "initializeReaderWithBleDeviceConfig" -> initializeReaderWithBleDeviceConfig(callback, args(0))
126
+ "deinitializeReader" -> deinitializeReader(callback)
127
+ "prepareDatabase" -> prepareDatabase(callback, args(0))
128
+ "removeDatabase" -> removeDatabase(callback)
129
+ "runAutoUpdate" -> runAutoUpdate(callback, args(0))
130
+ "cancelDBUpdate" -> cancelDBUpdate(callback)
131
+ "checkDatabaseUpdate" -> checkDatabaseUpdate(callback, args(0))
132
+ "scan" -> scan(args(0))
133
+ "recognize" -> recognize(args(0))
134
+ "startNewPage" -> startNewPage(callback)
135
+ "stopScanner" -> stopScanner(callback)
136
+ "startRFIDReader" -> startRFIDReader(args(0), args(1), args(2))
137
+ "stopRFIDReader" -> stopRFIDReader(callback)
138
+ "readRFID" -> readRFID(args(0), args(1), args(2))
139
+ "providePACertificates" -> providePACertificates(callback, argsNullable(0))
140
+ "provideTACertificates" -> provideTACertificates(callback, argsNullable(0))
141
+ "provideTASignature" -> provideTASignature(callback, args(0))
142
+ "setTCCParams" -> setTCCParams(callback, args(0))
143
+ "addPKDCertificates" -> addPKDCertificates(callback, args(0))
144
+ "clearPKDCertificates" -> clearPKDCertificates(callback)
145
+ "startNewSession" -> startNewSession(callback)
146
+ "startBluetoothService" -> startBluetoothService()
147
+ "setLocalizationDictionary" -> setLocalizationDictionary(args(0))
148
+ "getLicense" -> getLicense(callback)
149
+ "getAvailableScenarios" -> getAvailableScenarios(callback)
150
+ "getIsRFIDAvailableForUse" -> getIsRFIDAvailableForUse(callback)
151
+ "getDocReaderVersion" -> getDocReaderVersion(callback)
152
+ "getDocReaderDocumentsDatabase" -> getDocReaderDocumentsDatabase(callback)
153
+ "textFieldValueByType" -> textFieldValueByType(callback, args(0), args(1))
154
+ "textFieldValueByTypeLcid" -> textFieldValueByTypeLcid(callback, args(0), args(1), args(2))
155
+ "textFieldValueByTypeSource" -> textFieldValueByTypeSource(callback, args(0), args(1), args(2))
156
+ "textFieldValueByTypeLcidSource" -> textFieldValueByTypeLcidSource(callback, args(0), args(1), args(2), args(3))
157
+ "textFieldValueByTypeSourceOriginal" -> textFieldValueByTypeSourceOriginal(callback, args(0), args(1), args(2), args(3))
158
+ "textFieldValueByTypeLcidSourceOriginal" -> textFieldValueByTypeLcidSourceOriginal(callback, args(0), args(1), args(2), args(3), args(4))
159
+ "textFieldByType" -> textFieldByType(callback, args(0), args(1))
160
+ "textFieldByTypeLcid" -> textFieldByTypeLcid(callback, args(0), args(1), args(2))
161
+ "graphicFieldByTypeSource" -> graphicFieldByTypeSource(callback, args(0), args(1), args(2))
162
+ "graphicFieldByTypeSourcePageIndex" -> graphicFieldByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3))
163
+ "graphicFieldByTypeSourcePageIndexLight" -> graphicFieldByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4))
164
+ "graphicFieldImageByType" -> graphicFieldImageByType(callback, args(0), args(1))
165
+ "graphicFieldImageByTypeSource" -> graphicFieldImageByTypeSource(callback, args(0), args(1), args(2))
166
+ "graphicFieldImageByTypeSourcePageIndex" -> graphicFieldImageByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3))
167
+ "graphicFieldImageByTypeSourcePageIndexLight" -> graphicFieldImageByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4))
168
+ "containers" -> containers(callback, args(0), args(1))
169
+ "encryptedContainers" -> encryptedContainers(callback, args(0))
170
+ "getTranslation" -> getTranslation(callback, args(0), args(1))
171
+ "finalizePackage" -> finalizePackage(callback)
172
+ }
173
+ }
174
+
175
+ fun <T> args(index: Int): T = argsNullable(index)!!
176
+ interface Callback {
177
+ fun success(data: Any? = "")
178
+ fun error(message: String)
179
+ }
180
+
181
+ @SuppressLint("StaticFieldLeak")
182
+ lateinit var activity: Activity
183
+ lateinit var lifecycleObserver: LifecycleEventObserver
184
+ val context
185
+ get() = activity
186
+
187
+ var backgroundRFIDEnabled = false
188
+ var databaseDownloadProgress = 0
189
+
190
+ const val eventCompletion = "completion"
191
+ const val eventDatabaseProgress = "database_progress"
192
+
193
+ const val rfidOnProgressEvent = "rfidOnProgressCompletion"
194
+ const val rfidOnChipDetectedEvent = "rfidOnChipDetectedEvent"
195
+ const val rfidOnRetryReadChipEvent = "rfidOnRetryReadChipEvent"
196
+
197
+ const val eventPACertificateCompletion = "pa_certificate_completion"
198
+ const val eventTACertificateCompletion = "ta_certificate_completion"
199
+ const val eventTASignatureCompletion = "ta_signature_completion"
200
+
201
+ const val bleOnServiceConnectedEvent = "bleOnServiceConnectedEvent"
202
+ const val bleOnServiceDisconnectedEvent = "bleOnServiceDisconnectedEvent"
203
+ const val bleOnDeviceReadyEvent = "bleOnDeviceReadyEvent"
204
+
205
+ const val eventVideoEncoderCompletion = "video_encoder_completion"
206
+ const val onCustomButtonTappedEvent = "onCustomButtonTappedEvent"
207
+
208
+ fun getDocumentReaderIsReady(callback: Callback) = callback.success(Instance().isReady)
209
+
210
+ fun getDocumentReaderStatus(callback: Callback) = callback.success(Instance().status)
211
+
212
+ fun isAuthenticatorAvailableForUse(callback: Callback) = callback.success(Instance().isAuthenticatorAvailableForUse)
213
+
214
+ fun isBlePermissionsGranted(callback: Callback) = callback.success(isBlePermissionsGranted((activity)))
215
+
216
+ fun getRfidSessionStatus(callback: Callback) = callback.error("getRfidSessionStatus() is an ios-only method")
217
+
218
+ fun setRfidSessionStatus(callback: Callback) = callback.error("setRfidSessionStatus() is an ios-only method")
219
+
220
+ fun getTag(callback: Callback) = callback.success(Instance().tag)
221
+
222
+ fun setTag(tag: String?) = tag.let { Instance().tag = it }
223
+
224
+ fun getFunctionality(callback: Callback) = callback.success(getFunctionality(Instance().functionality()))
225
+
226
+ fun setFunctionality(functionality: JSONObject) = setFunctionality(Instance().functionality(), functionality)
227
+
228
+ fun getProcessParams(callback: Callback) = callback.success(getProcessParams(Instance().processParams()))
229
+
230
+ fun setProcessParams(processParams: JSONObject) = setProcessParams(Instance().processParams(), processParams)
231
+
232
+ fun getCustomization(callback: Callback) = callback.success(getCustomization(Instance().customization()))
233
+
234
+ fun setCustomization(customization: JSONObject) = setCustomization(Instance().customization(), customization, context)
235
+
236
+ fun getRfidScenario(callback: Callback) = callback.success(getRfidScenario(Instance().rfidScenario()))
237
+
238
+ fun setRfidScenario(rfidScenario: JSONObject) = setRfidScenario(Instance().rfidScenario(), rfidScenario)
239
+
240
+ fun initializeReader(callback: Callback, config: JSONObject) = Instance().initializeReader(context, docReaderConfigFromJSON(config), getInitCompletion(callback))
241
+
242
+ fun initializeReaderWithBleDeviceConfig(callback: Callback, config: JSONObject) = Instance().initializeReader(context, bleDeviceConfigFromJSON(config), getInitCompletion(callback))
243
+
244
+ fun deinitializeReader(callback: Callback) {
245
+ Instance().deinitializeReader()
246
+ callback.success()
247
+ }
248
+
249
+ fun prepareDatabase(callback: Callback, databaseID: String) = Instance().prepareDatabase(context, databaseID, getPrepareCompletion(callback))
250
+
251
+ fun removeDatabase(callback: Callback) = callback.success(Instance().removeDatabase(context))
252
+
253
+ fun runAutoUpdate(callback: Callback, databaseID: String) = Instance().runAutoUpdate(context, databaseID, getPrepareCompletion(callback))
254
+
255
+ fun cancelDBUpdate(callback: Callback) = callback.success(Instance().cancelDBUpdate(context))
256
+
257
+ fun checkDatabaseUpdate(callback: Callback, databaseID: String) = Instance().checkDatabaseUpdate(context, databaseID) { callback.success(generateDocReaderDocumentsDatabase(it)) }
258
+
259
+ fun scan(config: JSONObject) {
260
+ stopBackgroundRFID()
261
+ Instance().showScanner(context, scannerConfigFromJSON(config), completion)
262
+ }
263
+
264
+ fun recognize(config: JSONObject) {
265
+ stopBackgroundRFID()
266
+ Instance().recognize(recognizeConfigFromJSON(config), completion)
267
+ }
268
+
269
+ fun startNewPage(callback: Callback) {
270
+ Instance().startNewPage()
271
+ callback.success()
272
+ }
273
+
274
+ fun stopScanner(callback: Callback) {
275
+ Instance().stopScanner(context)
276
+ callback.success()
277
+ }
278
+
279
+ fun startRFIDReader(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
280
+ stopBackgroundRFID()
281
+ requestType = RfidReaderRequestType(
282
+ onRequestPACertificates,
283
+ onRequestTACertificates,
284
+ onRequestTASignature
285
+ )
286
+ Instance().startRFIDReader(context, rfidReaderCompletion, requestType.getRfidReaderRequest())
287
+ }
288
+
289
+ fun readRFID(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
290
+ requestType = RfidReaderRequestType(
291
+ onRequestPACertificates,
292
+ onRequestTACertificates,
293
+ onRequestTASignature
294
+ )
295
+ startForegroundDispatch()
296
+ }
297
+
298
+ fun stopRFIDReader(callback: Callback) {
299
+ Instance().stopRFIDReader(context)
300
+ stopBackgroundRFID()
301
+ callback.success()
302
+ }
303
+
304
+ fun providePACertificates(callback: Callback, certificates: JSONArray?) {
305
+ paCertificateCompletion!!.onCertificatesReceived(arrayFromJSON(certificates, ::pkdCertificateFromJSON, arrayOfNulls(certificates?.length() ?: 0)))
306
+ callback.success()
307
+ }
308
+
309
+ fun provideTACertificates(callback: Callback, certificates: JSONArray?) {
310
+ taCertificateCompletion!!.onCertificatesReceived(arrayFromJSON(certificates, ::pkdCertificateFromJSON, arrayOfNulls(certificates?.length() ?: 0)))
311
+ callback.success()
312
+ }
313
+
314
+ fun provideTASignature(callback: Callback, signature: String?) {
315
+ taSignatureCompletion!!.onSignatureReceived(byteArrayFromBase64(signature))
316
+ callback.success()
317
+ }
318
+
319
+ fun setTCCParams(callback: Callback, params: JSONObject) {
320
+ Instance().setTccParams(tccParamsFromJSON(params)) { success, error ->
321
+ callback.success(generateSuccessCompletion(success, error))
322
+ }
323
+ }
324
+
325
+ fun addPKDCertificates(callback: Callback, certificates: JSONArray) {
326
+ Instance().addPKDCertificates(listFromJSON(certificates, ::pkdCertificateFromJSON)!!)
327
+ callback.success()
328
+ }
329
+
330
+ fun clearPKDCertificates(callback: Callback) {
331
+ Instance().clearPKDCertificates()
332
+ callback.success()
333
+ }
334
+
335
+ fun startNewSession(callback: Callback) {
336
+ Instance().startNewSession()
337
+ callback.success()
338
+ }
339
+
340
+ fun startBluetoothService() = startBluetoothService(
341
+ activity,
342
+ { sendEvent(bleOnServiceConnectedEvent, it) },
343
+ { sendEvent(bleOnServiceDisconnectedEvent) },
344
+ { sendEvent(bleOnDeviceReadyEvent) }
345
+ )
346
+
347
+ @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
348
+ fun setLocalizationDictionary(dictionary: JSONObject) {
349
+ localizationCallbacks = LocalizationCallbacks { dictionary.optString(it, null) }
350
+ Instance().setLocalizationCallback(localizationCallbacks!!)
351
+ }
352
+
353
+ fun getLicense(callback: Callback) = callback.success(generateLicense(Instance().license()))
354
+
355
+ fun getAvailableScenarios(callback: Callback) {
356
+ val scenarios: MutableList<DocumentReaderScenario> = ArrayList()
357
+ for (scenario: DocumentReaderScenario in Instance().availableScenarios)
358
+ scenarios.add(CoreScenarioUtil.getScenario(scenario.name))
359
+ callback.success(generateList(scenarios, ::generateDocumentReaderScenario))
360
+ }
361
+
362
+ fun getIsRFIDAvailableForUse(callback: Callback) = callback.success(Instance().isRFIDAvailableForUse)
363
+
364
+ fun getDocReaderVersion(callback: Callback) = callback.success(generateDocReaderVersion(Instance().version))
365
+
366
+ fun getDocReaderDocumentsDatabase(callback: Callback) = callback.success(Instance().version?.let { generateDocReaderDocumentsDatabase(it.database) })
367
+
368
+ fun textFieldValueByType(callback: Callback, raw: String, fieldType: Int) = callback.success(fromRawResults(raw).getTextFieldValueByType(fieldType))
369
+
370
+ fun textFieldValueByTypeLcid(callback: Callback, raw: String, fieldType: Int, lcid: Int) = callback.success(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid))
371
+
372
+ fun textFieldValueByTypeSource(callback: Callback, raw: String, fieldType: Int, source: Int) = callback.success(fromRawResults(raw).getTextFieldValueByTypeAndSource(fieldType, source))
373
+
374
+ fun textFieldValueByTypeLcidSource(callback: Callback, raw: String, fieldType: Int, lcid: Int, source: Int) = callback.success(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid, source))
375
+
376
+ fun textFieldValueByTypeSourceOriginal(callback: Callback, raw: String, fieldType: Int, source: Int, original: Boolean) = callback.success(fromRawResults(raw).getTextFieldValueByTypeAndSource(fieldType, source, original))
377
+
378
+ fun textFieldValueByTypeLcidSourceOriginal(callback: Callback, raw: String, fieldType: Int, lcid: Int, source: Int, original: Boolean) = callback.success(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid, source, original))
379
+
380
+ fun textFieldByType(callback: Callback, raw: String, fieldType: Int) = callback.success(generateDocumentReaderTextField(fromRawResults(raw).getTextFieldByType(fieldType), context))
381
+
382
+ fun textFieldByTypeLcid(callback: Callback, raw: String, fieldType: Int, lcid: Int) = callback.success(generateDocumentReaderTextField(fromRawResults(raw).getTextFieldByType(fieldType, lcid), context))
383
+
384
+ fun graphicFieldByTypeSource(callback: Callback, raw: String, fieldType: Int, source: Int) = callback.success(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source), context))
385
+
386
+ fun graphicFieldByTypeSourcePageIndex(callback: Callback, raw: String, fieldType: Int, source: Int, pageIndex: Int) = callback.success(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source, pageIndex), context))
387
+
388
+ fun graphicFieldByTypeSourcePageIndexLight(callback: Callback, raw: String, fieldType: Int, source: Int, pageIndex: Int, light: Int) = callback.success(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source, pageIndex, light), context))
389
+
390
+ fun graphicFieldImageByType(callback: Callback, raw: String, fieldType: Int) = callback.success(bitmapToBase64(fromRawResults(raw).getGraphicFieldImageByType(fieldType)))
391
+
392
+ fun graphicFieldImageByTypeSource(callback: Callback, raw: String, fieldType: Int, source: Int) = callback.success(bitmapToBase64(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source)))
393
+
394
+ fun graphicFieldImageByTypeSourcePageIndex(callback: Callback, raw: String, fieldType: Int, source: Int, pageIndex: Int) = callback.success(bitmapToBase64(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source, pageIndex)))
395
+
396
+ fun graphicFieldImageByTypeSourcePageIndexLight(callback: Callback, raw: String, fieldType: Int, source: Int, pageIndex: Int, light: Int) = callback.success(bitmapToBase64(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source, pageIndex, light)))
397
+
398
+ fun containers(callback: Callback, raw: String, resultType: JSONArray) = callback.success(fromRawResults(raw).getContainers(resultType.toIntArray()!!))
399
+
400
+ fun encryptedContainers(callback: Callback, raw: String) = callback.success(fromRawResults(raw).encryptedContainers)
401
+
402
+ fun finalizePackage(callback: Callback) = Instance().finalizePackage { action, info, error -> callback.success(generateFinalizePackageCompletion(action, info, error)) }
403
+
404
+ fun getTranslation(callback: Callback, className: String, value: Int) = when (className) {
405
+ "RFIDErrorCodes" -> callback.success(eRFID_ErrorCodes.getTranslation(context, value))
406
+ "LDSParsingErrorCodes" -> callback.success(eLDS_ParsingErrorCodes.getTranslation(context, value))
407
+ "LDSParsingNotificationCodes" -> callback.success(eLDS_ParsingNotificationCodes.getTranslation(context, value))
408
+ "ImageQualityCheckType" -> callback.success(eImageQualityCheckType.getTranslation(context, value))
409
+ "RFIDDataFileType" -> callback.success(eRFID_DataFile_Type.getTranslation(context, value))
410
+ "VisualFieldType" -> callback.success(eVisualFieldType.getTranslation(context, value))
411
+ "LCID" -> callback.success(LCID.getTranslation(context, value))
412
+ else -> null
413
+ }
414
+
415
+ val completed = { action: Int, results: DocumentReaderResults?, error: DocumentReaderException? ->
416
+ sendEvent(eventCompletion, generateCompletion(action, results, error, context))
417
+ if ((action == DocReaderAction.ERROR) || (action == DocReaderAction.CANCEL) || ((action == DocReaderAction.COMPLETE) && (results?.rfidResult == 1)))
418
+ stopBackgroundRFID()
419
+ }
420
+
421
+ val completion = IDocumentReaderCompletion(completed)
422
+
423
+ val rfidReaderCompletion = object : IRfidReaderCompletion() {
424
+ override fun onCompleted(action: Int, results: DocumentReaderResults?, error: DocumentReaderException?): Unit = completed(action, results, error)
425
+ override fun onChipDetected(): Unit = sendEvent(rfidOnChipDetectedEvent)
426
+ override fun onRetryReadChip(error: DocReaderRfidException) = sendEvent(rfidOnRetryReadChipEvent, generateRegulaException(error))
427
+ override fun onProgress(notification: DocumentReaderNotification) = sendEvent(rfidOnProgressEvent, generateDocumentReaderNotification(notification))
428
+ }
429
+
430
+ fun getPrepareCompletion(callback: Callback) = object : IDocumentReaderPrepareCompletion {
431
+ override fun onPrepareProgressChanged(progress: Int) {
432
+ if (progress != databaseDownloadProgress) {
433
+ sendEvent(eventDatabaseProgress, progress)
434
+ databaseDownloadProgress = progress
435
+ }
436
+ }
437
+
438
+ override fun onPrepareCompleted(s: Boolean, e: DocumentReaderException?) = callback.success(generateSuccessCompletion(s, e))
439
+ }
440
+
441
+ fun getInitCompletion(callback: Callback) = IDocumentReaderInitCompletion { success, error ->
442
+ if (success) {
443
+ Instance().setVideoEncoderCompletion { _, file -> sendEvent(eventVideoEncoderCompletion, file.path) }
444
+ Instance().setOnClickListener { sendEvent(onCustomButtonTappedEvent, it.tag) }
445
+ }
446
+ callback.success(generateSuccessCompletion(success, error))
447
+ }
448
+
449
+ var paCertificateCompletion: IRfidPKDCertificateCompletion? = null
450
+ var taCertificateCompletion: IRfidPKDCertificateCompletion? = null
451
+ var taSignatureCompletion: IRfidTASignatureCompletion? = null
452
+
453
+ class RfidReaderRequestType(
454
+ val doPACertificates: Boolean,
455
+ val doTACertificates: Boolean,
456
+ val doTASignature: Boolean
457
+ ) {
458
+ private val onRequestPACertificates = IRfidPACertificates { serialNumber, issuer, completion ->
459
+ paCertificateCompletion = completion
460
+ sendEvent(eventPACertificateCompletion, generatePACertificateCompletion(serialNumber, issuer))
461
+ }
462
+ private val onRequestTACertificates = IRfidTACertificates { keyCAR, completion ->
463
+ taCertificateCompletion = completion
464
+ sendEvent(eventTACertificateCompletion, keyCAR)
465
+ }
466
+ private val onRequestTASignature = IRfidTASignature { challenge, completion ->
467
+ taSignatureCompletion = completion
468
+ sendEvent(eventTASignatureCompletion, generateTAChallenge(challenge))
469
+ }
470
+
471
+ fun getRfidReaderRequest(): IRfidReaderRequest? = when {
472
+ !doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTASignature)
473
+ !doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestTACertificates)
474
+ !doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTACertificates, onRequestTASignature)
475
+ doPACertificates && !doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates)
476
+ doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTASignature)
477
+ doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates)
478
+ doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates, onRequestTASignature)
479
+ else -> null
480
+ }
481
+ }
482
+
483
+ var requestType = RfidReaderRequestType(
484
+ doPACertificates = false,
485
+ doTACertificates = false,
486
+ doTASignature = false
487
+ )
488
+
489
+ @Suppress("DEPRECATION")
490
+ fun newIntent(intent: Intent) = if (intent.action == NfcAdapter.ACTION_TECH_DISCOVERED)
491
+ Instance().readRFID(
492
+ IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)),
493
+ rfidReaderCompletion,
494
+ requestType.getRfidReaderRequest()
495
+ ) else Unit
496
+
497
+ fun startForegroundDispatch() {
498
+ backgroundRFIDEnabled = true
499
+ val filters: Array<IntentFilter?> = arrayOfNulls(1)
500
+ filters[0] = IntentFilter()
501
+ filters[0]!!.addAction(NfcAdapter.ACTION_TECH_DISCOVERED)
502
+ filters[0]!!.addCategory(Intent.CATEGORY_DEFAULT)
503
+ val techList = arrayOf(arrayOf("android.nfc.tech.IsoDep"))
504
+ val intent = Intent(context, context.javaClass)
505
+ val flag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0
506
+ val pendingIntent = PendingIntent.getActivity(context, 0, intent, flag)
507
+
508
+ if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED))
509
+ enableForegroundDispatch(pendingIntent, filters, techList)
510
+ lifecycleObserver = LifecycleEventObserver { _, event ->
511
+ if (backgroundRFIDEnabled) when (event) {
512
+ Lifecycle.Event.ON_RESUME -> enableForegroundDispatch(pendingIntent, filters, techList)
513
+ Lifecycle.Event.ON_PAUSE -> disableForegroundDispatch()
514
+ else -> Unit
515
+ }
516
+ }
517
+ context.runOnUiThread { lifecycle.addObserver(lifecycleObserver) }
518
+ }
519
+
520
+ fun enableForegroundDispatch(
521
+ pendingIntent: PendingIntent,
522
+ filters: Array<IntentFilter?>,
523
+ techList: Array<Array<String>>
524
+ ) = NfcAdapter.getDefaultAdapter(context).enableForegroundDispatch(activity, pendingIntent, filters, techList)
525
+
526
+ fun disableForegroundDispatch() = NfcAdapter.getDefaultAdapter(activity).disableForegroundDispatch(activity)
527
+
528
+ fun stopBackgroundRFID() {
529
+ if (!backgroundRFIDEnabled) return
530
+ backgroundRFIDEnabled = false
531
+ if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED))
532
+ disableForegroundDispatch()
533
+ context.runOnUiThread { lifecycle.removeObserver(lifecycleObserver) }
534
+ }
535
+
536
+ // Weak references
537
+ var localizationCallbacks: LocalizationCallbacks? = null
@@ -0,0 +1,11 @@
1
+ package com.regula.documentreader
2
+
3
+ import com.facebook.react.ReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.uimanager.ViewManager
7
+
8
+ class RNRegulaDocumentReaderPackage : ReactPackage {
9
+ override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> = listOf(RNRegulaDocumentReaderModule(reactContext))
10
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> = emptyList()
11
+ }