@regulaforensics/react-native-document-reader-api 6.9.1 → 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.
- package/README.md +10 -42
- package/RNDocumentReaderApi.podspec +1 -1
- package/android/build.gradle +10 -10
- package/android/src/main/java/com/regula/documentreader/BluetoothUtil.kt +78 -74
- package/android/src/main/java/com/regula/documentreader/Config.kt +690 -0
- package/android/src/main/java/com/regula/documentreader/JSONConstructor.kt +2188 -0
- package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.kt +537 -0
- package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderPackage.kt +11 -0
- package/android/src/main/java/com/regula/documentreader/Utils.kt +256 -0
- package/example/App.tsx +97 -145
- package/example/README.md +37 -0
- package/example/android/app/build.gradle +1 -1
- package/example/android/app/src/main/java/com/regula/dr/fullrfid/MainApplication.java +0 -1
- package/example/android/app/src/main/res/values/styles.xml +1 -2
- package/example/android/build.gradle +2 -4
- package/example/android/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/example/android/gradle.properties +1 -1
- package/example/index.js +1 -2
- package/example/ios/DocumentReader.xcodeproj/project.pbxproj +8 -4
- package/example/ios/Podfile +0 -1
- package/example/package-lock.json +3062 -2198
- package/example/package.json +24 -23
- package/index.d.ts +296 -135
- package/index.js +234 -115
- package/ios/RGLWConfig.h +48 -0
- package/ios/RGLWConfig.m +1325 -0
- package/ios/RGLWJSONConstructor.h +173 -69
- package/ios/RGLWJSONConstructor.m +1817 -762
- package/ios/RNRegulaDocumentReader.h +6 -5
- package/ios/RNRegulaDocumentReader.m +392 -584
- package/package.json +1 -1
- package/android/src/main/java/com/regula/documentreader/Helpers.java +0 -259
- package/android/src/main/java/com/regula/documentreader/JSONConstructor.java +0 -1119
- package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.java +0 -1153
- package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderPackage.java +0 -26
- package/android/src/main/java/com/regula/documentreader/RegulaConfig.java +0 -830
- package/example/.bundle/config +0 -2
- package/example/.eslintrc.js +0 -4
- package/example/.prettierrc.js +0 -7
- package/example/Gemfile +0 -6
- package/example/Gemfile.lock +0 -98
- package/example/__tests__/App.test.tsx +0 -17
- package/example/app.json +0 -4
- package/example/babel.config.js +0 -3
- package/example/jest.config.js +0 -3
- package/example/tsconfig.json +0 -3
- package/ios/RGLWRegulaConfig.h +0 -26
- package/ios/RGLWRegulaConfig.m +0 -1152
- package/ios/RNRegulaDocumentReader.xcodeproj/project.pbxproj +0 -304
- 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
|
+
}
|