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