@regulaforensics/cordova-plugin-document-reader-api 8.1.122-nightly → 8.1.131-nightly
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/example/config.xml +1 -1
- package/example/package.json +2 -2
- package/package.json +1 -1
- package/plugin.xml +11 -8
- package/src/android/BluetoothUtil.kt +7 -16
- package/src/android/Config.kt +154 -120
- package/src/android/DocumentReader.kt +20 -487
- package/src/android/JSONConstructor.kt +1270 -1719
- package/src/android/Main.kt +553 -0
- package/src/android/Utils.kt +73 -160
- package/src/android/build.gradle +1 -1
- package/src/ios/RGLWConfig.h +0 -8
- package/src/ios/RGLWConfig.m +44 -52
- package/src/ios/RGLWDocumentReader.h +3 -27
- package/src/ios/RGLWDocumentReader.m +11 -716
- package/src/ios/RGLWJSONConstructor.h +1 -8
- package/src/ios/RGLWJSONConstructor.m +12 -10
- package/src/ios/RGLWMain.h +36 -0
- package/src/ios/RGLWMain.m +591 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
@file:SuppressLint("MissingPermission")
|
|
2
|
+
|
|
3
|
+
package com.regula.plugin.documentreader
|
|
4
|
+
|
|
5
|
+
import android.annotation.SuppressLint
|
|
6
|
+
import android.app.PendingIntent
|
|
7
|
+
import android.content.Intent
|
|
8
|
+
import android.content.IntentFilter
|
|
9
|
+
import android.nfc.NfcAdapter
|
|
10
|
+
import android.nfc.tech.IsoDep
|
|
11
|
+
import android.os.Build
|
|
12
|
+
import androidx.lifecycle.Lifecycle
|
|
13
|
+
import androidx.lifecycle.LifecycleEventObserver
|
|
14
|
+
import com.regula.common.LocalizationCallbacks
|
|
15
|
+
import com.regula.documentreader.api.DocumentReader.Instance
|
|
16
|
+
import com.regula.documentreader.api.completions.IDocumentReaderCompletion
|
|
17
|
+
import com.regula.documentreader.api.completions.IDocumentReaderInitCompletion
|
|
18
|
+
import com.regula.documentreader.api.completions.IDocumentReaderPrepareDbCompletion
|
|
19
|
+
import com.regula.documentreader.api.completions.model.PrepareProgress
|
|
20
|
+
import com.regula.documentreader.api.completions.rfid.IRfidPKDCertificateCompletion
|
|
21
|
+
import com.regula.documentreader.api.completions.rfid.IRfidReaderCompletion
|
|
22
|
+
import com.regula.documentreader.api.completions.rfid.IRfidReaderRequest
|
|
23
|
+
import com.regula.documentreader.api.completions.rfid.IRfidTASignatureCompletion
|
|
24
|
+
import com.regula.documentreader.api.completions.rfid.certificates.IRfidPACertificates
|
|
25
|
+
import com.regula.documentreader.api.completions.rfid.certificates.IRfidTACertificates
|
|
26
|
+
import com.regula.documentreader.api.completions.rfid.certificates.IRfidTASignature
|
|
27
|
+
import com.regula.documentreader.api.enums.DocReaderAction
|
|
28
|
+
import com.regula.documentreader.api.enums.LCID
|
|
29
|
+
import com.regula.documentreader.api.enums.eImageQualityCheckType
|
|
30
|
+
import com.regula.documentreader.api.enums.eLDS_ParsingErrorCodes
|
|
31
|
+
import com.regula.documentreader.api.enums.eLDS_ParsingNotificationCodes
|
|
32
|
+
import com.regula.documentreader.api.enums.eRFID_DataFile_Type
|
|
33
|
+
import com.regula.documentreader.api.enums.eRFID_ErrorCodes
|
|
34
|
+
import com.regula.documentreader.api.enums.eVisualFieldType
|
|
35
|
+
import com.regula.documentreader.api.errors.DocReaderRfidException
|
|
36
|
+
import com.regula.documentreader.api.errors.DocumentReaderException
|
|
37
|
+
import com.regula.documentreader.api.internal.core.CoreScenarioUtil
|
|
38
|
+
import com.regula.documentreader.api.results.DocumentReaderNotification
|
|
39
|
+
import com.regula.documentreader.api.results.DocumentReaderResults
|
|
40
|
+
import com.regula.documentreader.api.results.DocumentReaderResults.fromRawResults
|
|
41
|
+
import com.regula.documentreader.api.results.DocumentReaderScenario
|
|
42
|
+
import org.json.JSONArray
|
|
43
|
+
import org.json.JSONObject
|
|
44
|
+
import com.regula.plugin.documentreader.Convert.toBase64
|
|
45
|
+
import com.regula.plugin.documentreader.Convert.toByteArray
|
|
46
|
+
|
|
47
|
+
fun methodCall(method: String, callback: (Any?) -> Unit): Any = when (method) {
|
|
48
|
+
"getDocumentReaderIsReady" -> getDocumentReaderIsReady(callback)
|
|
49
|
+
"getDocumentReaderStatus" -> getDocumentReaderStatus(callback)
|
|
50
|
+
"getTag" -> getTag(callback)
|
|
51
|
+
"setTag" -> setTag(argsNullable(0))
|
|
52
|
+
"getTenant" -> getTenant(callback)
|
|
53
|
+
"setTenant" -> setTenant(argsNullable(0))
|
|
54
|
+
"getEnv" -> getEnv(callback)
|
|
55
|
+
"setEnv" -> setEnv(argsNullable(0))
|
|
56
|
+
"getFunctionality" -> getFunctionality(callback)
|
|
57
|
+
"setFunctionality" -> setFunctionality(args(0))
|
|
58
|
+
"getProcessParams" -> getProcessParams(callback)
|
|
59
|
+
"setProcessParams" -> setProcessParams(args(0))
|
|
60
|
+
"getCustomization" -> getCustomization(callback)
|
|
61
|
+
"setCustomization" -> setCustomization(args(0))
|
|
62
|
+
"getRfidScenario" -> getRfidScenario(callback)
|
|
63
|
+
"setRfidScenario" -> setRfidScenario(args(0))
|
|
64
|
+
"resetConfiguration" -> resetConfiguration()
|
|
65
|
+
"initialize" -> initialize(callback, args(0))
|
|
66
|
+
"initializeReader" -> initialize(callback, args(0)) // deprecated
|
|
67
|
+
"deinitialize" -> deinitialize()
|
|
68
|
+
"prepareDatabase" -> prepareDatabase(callback, args(0))
|
|
69
|
+
"removeDatabase" -> removeDatabase(callback)
|
|
70
|
+
"runAutoUpdate" -> runAutoUpdate(callback, args(0))
|
|
71
|
+
"cancelDBUpdate" -> cancelDBUpdate(callback)
|
|
72
|
+
"checkDatabaseUpdate" -> checkDatabaseUpdate(callback, args(0))
|
|
73
|
+
"scan" -> scan(args(0))
|
|
74
|
+
"recognize" -> recognize(args(0))
|
|
75
|
+
"startNewPage" -> startNewPage()
|
|
76
|
+
"stopScanner" -> stopScanner()
|
|
77
|
+
"startRFIDReader" -> startRFIDReader(args(0), args(1), args(2))
|
|
78
|
+
"readRFID" -> readRFID(args(0), args(1), args(2))
|
|
79
|
+
"stopRFIDReader" -> stopRFIDReader()
|
|
80
|
+
"providePACertificates" -> providePACertificates(argsNullable(0))
|
|
81
|
+
"provideTACertificates" -> provideTACertificates(argsNullable(0))
|
|
82
|
+
"provideTASignature" -> provideTASignature(args(0))
|
|
83
|
+
"setTCCParams" -> setTCCParams(callback, args(0))
|
|
84
|
+
"addPKDCertificates" -> addPKDCertificates(args(0))
|
|
85
|
+
"clearPKDCertificates" -> clearPKDCertificates()
|
|
86
|
+
"startNewSession" -> startNewSession()
|
|
87
|
+
"connectBluetoothDevice" -> connectBluetoothDevice(callback)
|
|
88
|
+
"setLocalizationDictionary" -> setLocalizationDictionary(args(0))
|
|
89
|
+
"getLicense" -> getLicense(callback)
|
|
90
|
+
"getAvailableScenarios" -> getAvailableScenarios(callback)
|
|
91
|
+
"getIsRFIDAvailableForUse" -> getIsRFIDAvailableForUse(callback)
|
|
92
|
+
"isAuthenticatorAvailableForUse" -> isAuthenticatorAvailableForUse(callback)
|
|
93
|
+
"isAuthenticatorRFIDAvailableForUse" -> isAuthenticatorRFIDAvailableForUse(callback)
|
|
94
|
+
"getDocReaderVersion" -> getDocReaderVersion(callback)
|
|
95
|
+
"getDocReaderDocumentsDatabase" -> getDocReaderDocumentsDatabase(callback)
|
|
96
|
+
"textFieldValueByType" -> textFieldValueByType(callback, args(0), args(1))
|
|
97
|
+
"textFieldValueByTypeLcid" -> textFieldValueByTypeLcid(callback, args(0), args(1), args(2))
|
|
98
|
+
"textFieldValueByTypeSource" -> textFieldValueByTypeSource(callback, args(0), args(1), args(2))
|
|
99
|
+
"textFieldValueByTypeLcidSource" -> textFieldValueByTypeLcidSource(callback, args(0), args(1), args(2), args(3))
|
|
100
|
+
"textFieldValueByTypeSourceOriginal" -> textFieldValueByTypeSourceOriginal(callback, args(0), args(1), args(2), args(3))
|
|
101
|
+
"textFieldValueByTypeLcidSourceOriginal" -> textFieldValueByTypeLcidSourceOriginal(callback, args(0), args(1), args(2), args(3), args(4))
|
|
102
|
+
"textFieldByType" -> textFieldByType(callback, args(0), args(1))
|
|
103
|
+
"textFieldByTypeLcid" -> textFieldByTypeLcid(callback, args(0), args(1), args(2))
|
|
104
|
+
"graphicFieldByTypeSource" -> graphicFieldByTypeSource(callback, args(0), args(1), args(2))
|
|
105
|
+
"graphicFieldByTypeSourcePageIndex" -> graphicFieldByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3))
|
|
106
|
+
"graphicFieldByTypeSourcePageIndexLight" -> graphicFieldByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4))
|
|
107
|
+
"graphicFieldImageByType" -> graphicFieldImageByType(callback, args(0), args(1))
|
|
108
|
+
"graphicFieldImageByTypeSource" -> graphicFieldImageByTypeSource(callback, args(0), args(1), args(2))
|
|
109
|
+
"graphicFieldImageByTypeSourcePageIndex" -> graphicFieldImageByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3))
|
|
110
|
+
"graphicFieldImageByTypeSourcePageIndexLight" -> graphicFieldImageByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4))
|
|
111
|
+
"containers" -> containers(callback, args(0), args(1))
|
|
112
|
+
"encryptedContainers" -> encryptedContainers(callback, args(0))
|
|
113
|
+
"finalizePackage" -> finalizePackage(callback)
|
|
114
|
+
"endBackendTransaction" -> endBackendTransaction()
|
|
115
|
+
"getTranslation" -> getTranslation(callback, args(0), args(1))
|
|
116
|
+
else -> Unit
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
inline fun <reified T> args(index: Int) = argsNullable<T>(index)!!
|
|
120
|
+
typealias Callback = (Any?) -> Unit
|
|
121
|
+
|
|
122
|
+
const val completionEvent = "completion"
|
|
123
|
+
const val databaseProgressEvent = "database_progress"
|
|
124
|
+
|
|
125
|
+
const val rfidOnProgressEvent = "rfidOnProgressCompletion"
|
|
126
|
+
const val rfidOnChipDetectedEvent = "rfidOnChipDetectedEvent"
|
|
127
|
+
const val rfidOnRetryReadChipEvent = "rfidOnRetryReadChipEvent"
|
|
128
|
+
|
|
129
|
+
const val paCertificateCompletionEvent = "pa_certificate_completion"
|
|
130
|
+
const val taCertificateCompletionEvent = "ta_certificate_completion"
|
|
131
|
+
const val taSignatureCompletionEvent = "ta_signature_completion"
|
|
132
|
+
|
|
133
|
+
const val videoEncoderCompletionEvent = "video_encoder_completion"
|
|
134
|
+
const val onCustomButtonTappedEvent = "onCustomButtonTappedEvent"
|
|
135
|
+
|
|
136
|
+
fun getDocumentReaderIsReady(callback: Callback) = callback(Instance().isReady)
|
|
137
|
+
|
|
138
|
+
fun getDocumentReaderStatus(callback: Callback) = callback(Instance().status)
|
|
139
|
+
|
|
140
|
+
fun getTag(callback: Callback) = callback(Instance().tag)
|
|
141
|
+
|
|
142
|
+
fun setTag(tag: String?) = tag.let { Instance().tag = it }
|
|
143
|
+
|
|
144
|
+
fun getTenant(callback: Callback) = callback(Instance().tenant)
|
|
145
|
+
|
|
146
|
+
fun setTenant(tag: String?) = tag.let { Instance().tenant = it }
|
|
147
|
+
|
|
148
|
+
fun getEnv(callback: Callback) = callback(Instance().env)
|
|
149
|
+
|
|
150
|
+
fun setEnv(tag: String?) = tag.let { Instance().env = it }
|
|
151
|
+
|
|
152
|
+
fun getFunctionality(callback: Callback) = callback(getFunctionality(Instance().functionality()))
|
|
153
|
+
|
|
154
|
+
fun setFunctionality(functionality: JSONObject) = setFunctionality(Instance().functionality(), functionality)
|
|
155
|
+
|
|
156
|
+
fun getProcessParams(callback: Callback) = callback(getProcessParams(Instance().processParams()))
|
|
157
|
+
|
|
158
|
+
fun setProcessParams(processParams: JSONObject) = setProcessParams(Instance().processParams(), processParams)
|
|
159
|
+
|
|
160
|
+
fun getCustomization(callback: Callback) = callback(getCustomization(Instance().customization()))
|
|
161
|
+
|
|
162
|
+
fun setCustomization(customization: JSONObject) = setCustomization(Instance().customization(), customization)
|
|
163
|
+
|
|
164
|
+
fun getRfidScenario(callback: Callback) = callback(getRfidScenario(Instance().rfidScenario()))
|
|
165
|
+
|
|
166
|
+
fun setRfidScenario(rfidScenario: JSONObject) = setRfidScenario(Instance().rfidScenario(), rfidScenario)
|
|
167
|
+
|
|
168
|
+
fun resetConfiguration() = Instance().resetConfiguration()
|
|
169
|
+
|
|
170
|
+
fun initialize(callback: Callback, config: JSONObject) =
|
|
171
|
+
if (config.getBooleanOrNull("useBleDevice") != true)
|
|
172
|
+
Instance().initializeReader(context, initConfigFromJSON(config), initCompletion(callback))
|
|
173
|
+
else
|
|
174
|
+
Instance().initializeReader(context, initBleDeviceConfigFromJSON(config), initCompletion(callback))
|
|
175
|
+
|
|
176
|
+
fun deinitialize() = Instance().deinitializeReader()
|
|
177
|
+
|
|
178
|
+
fun prepareDatabase(callback: Callback, databaseID: String) = Instance().prepareDatabase(
|
|
179
|
+
context,
|
|
180
|
+
databaseID,
|
|
181
|
+
prepareCompletion(callback)
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
fun removeDatabase(callback: Callback) = callback(Instance().removeDatabase(context))
|
|
185
|
+
|
|
186
|
+
fun runAutoUpdate(callback: Callback, databaseID: String) = Instance().runAutoUpdate(
|
|
187
|
+
context,
|
|
188
|
+
databaseID,
|
|
189
|
+
prepareCompletion(callback)
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
fun cancelDBUpdate(callback: Callback) = callback(Instance().cancelDBUpdate(context))
|
|
193
|
+
|
|
194
|
+
fun checkDatabaseUpdate(callback: Callback, databaseID: String) = Instance().checkDatabaseUpdate(
|
|
195
|
+
context,
|
|
196
|
+
databaseID
|
|
197
|
+
) { callback(generateDocReaderDocumentsDatabase(it)) }
|
|
198
|
+
|
|
199
|
+
fun scan(config: JSONObject) {
|
|
200
|
+
stopBackgroundRFID()
|
|
201
|
+
Instance().showScanner(context, scannerConfigFromJSON(config), IDocumentReaderCompletion(completion))
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
fun recognize(config: JSONObject) {
|
|
205
|
+
stopBackgroundRFID()
|
|
206
|
+
Instance().recognize(recognizeConfigFromJSON(config), IDocumentReaderCompletion(completion))
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
fun startNewPage() = Instance().startNewPage()
|
|
210
|
+
|
|
211
|
+
fun stopScanner() = Instance().stopScanner(context)
|
|
212
|
+
|
|
213
|
+
fun startRFIDReader(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
|
|
214
|
+
stopBackgroundRFID()
|
|
215
|
+
requestType = RfidReaderRequestType(
|
|
216
|
+
onRequestPACertificates,
|
|
217
|
+
onRequestTACertificates,
|
|
218
|
+
onRequestTASignature
|
|
219
|
+
)
|
|
220
|
+
Instance().startRFIDReader(context, rfidReaderCompletion, requestType.getRfidReaderRequest())
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
fun readRFID(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
|
|
224
|
+
requestType = RfidReaderRequestType(
|
|
225
|
+
onRequestPACertificates,
|
|
226
|
+
onRequestTACertificates,
|
|
227
|
+
onRequestTASignature
|
|
228
|
+
)
|
|
229
|
+
startForegroundDispatch()
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
fun stopRFIDReader() {
|
|
233
|
+
Instance().stopRFIDReader(context)
|
|
234
|
+
stopBackgroundRFID()
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
fun providePACertificates(certificates: JSONArray?) = paCertificateCompletion.onCertificatesReceived(
|
|
238
|
+
certificates.toArray(::pkdCertificateFromJSON)
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
fun provideTACertificates(certificates: JSONArray?) = taCertificateCompletion.onCertificatesReceived(
|
|
242
|
+
certificates.toArray(::pkdCertificateFromJSON)
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
fun provideTASignature(signature: String?) = taSignatureCompletion.onSignatureReceived(
|
|
246
|
+
signature.toByteArray()
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
fun setTCCParams(callback: Callback, params: JSONObject) {
|
|
250
|
+
Instance().setTccParams(tccParamsFromJSON(params)) { success, error ->
|
|
251
|
+
callback(generateSuccessCompletion(success, error))
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
fun addPKDCertificates(certificates: JSONArray) = Instance().addPKDCertificates(
|
|
256
|
+
certificates.toList(::pkdCertificateFromJSON)!!
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
fun clearPKDCertificates() = Instance().clearPKDCertificates()
|
|
260
|
+
|
|
261
|
+
fun startNewSession() = Instance().startNewSession()
|
|
262
|
+
|
|
263
|
+
fun setLocalizationDictionary(dictionary: JSONObject) {
|
|
264
|
+
localizationCallbacks = LocalizationCallbacks { if (dictionary.has(it)) dictionary.getString(it) else null }
|
|
265
|
+
Instance().setLocalizationCallback(localizationCallbacks)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
fun getLicense(callback: Callback) = callback(generateLicense(Instance().license()))
|
|
269
|
+
|
|
270
|
+
fun getAvailableScenarios(callback: Callback) {
|
|
271
|
+
val scenarios: MutableList<DocumentReaderScenario> = ArrayList()
|
|
272
|
+
for (scenario: DocumentReaderScenario in Instance().availableScenarios)
|
|
273
|
+
scenarios.add(CoreScenarioUtil.getScenario(scenario.name))
|
|
274
|
+
callback(scenarios.toJsonNullable(::generateDocumentReaderScenario))
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
fun getIsRFIDAvailableForUse(callback: Callback) = callback(Instance().isRFIDAvailableForUse)
|
|
278
|
+
|
|
279
|
+
fun isAuthenticatorAvailableForUse(callback: Callback) = callback(Instance().isAuthenticatorAvailableForUse)
|
|
280
|
+
|
|
281
|
+
fun isAuthenticatorRFIDAvailableForUse(callback: Callback) = callback(Instance().isAuthenticatorRFIDAvailableForUse)
|
|
282
|
+
|
|
283
|
+
fun getDocReaderVersion(callback: Callback) = callback(generateDocReaderVersion(Instance().version))
|
|
284
|
+
|
|
285
|
+
fun getDocReaderDocumentsDatabase(callback: Callback) = callback(Instance().version?.let {
|
|
286
|
+
generateDocReaderDocumentsDatabase(it.database)
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
fun finalizePackage(callback: Callback) = Instance().finalizePackage { action, info, error ->
|
|
290
|
+
callback(generateFinalizePackageCompletion(action, info, error))
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
fun endBackendTransaction() = Instance().endBackendTransaction()
|
|
294
|
+
|
|
295
|
+
fun textFieldValueByType(
|
|
296
|
+
callback: Callback,
|
|
297
|
+
raw: String,
|
|
298
|
+
fieldType: Int
|
|
299
|
+
) = callback(fromRawResults(raw).getTextFieldValueByType(fieldType))
|
|
300
|
+
|
|
301
|
+
fun textFieldValueByTypeLcid(
|
|
302
|
+
callback: Callback,
|
|
303
|
+
raw: String,
|
|
304
|
+
fieldType: Int,
|
|
305
|
+
lcid: Int
|
|
306
|
+
) = callback(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid))
|
|
307
|
+
|
|
308
|
+
fun textFieldValueByTypeSource(
|
|
309
|
+
callback: Callback,
|
|
310
|
+
raw: String,
|
|
311
|
+
fieldType: Int,
|
|
312
|
+
source: Int
|
|
313
|
+
) = callback(fromRawResults(raw).getTextFieldValueByTypeAndSource(fieldType, source))
|
|
314
|
+
|
|
315
|
+
fun textFieldValueByTypeLcidSource(
|
|
316
|
+
callback: Callback,
|
|
317
|
+
raw: String,
|
|
318
|
+
fieldType: Int,
|
|
319
|
+
lcid: Int,
|
|
320
|
+
source: Int
|
|
321
|
+
) = callback(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid, source))
|
|
322
|
+
|
|
323
|
+
fun textFieldValueByTypeSourceOriginal(
|
|
324
|
+
callback: Callback,
|
|
325
|
+
raw: String,
|
|
326
|
+
fieldType: Int,
|
|
327
|
+
source: Int,
|
|
328
|
+
original: Boolean
|
|
329
|
+
) = callback(fromRawResults(raw).getTextFieldValueByTypeAndSource(fieldType, source, original))
|
|
330
|
+
|
|
331
|
+
fun textFieldValueByTypeLcidSourceOriginal(
|
|
332
|
+
callback: Callback,
|
|
333
|
+
raw: String,
|
|
334
|
+
fieldType: Int,
|
|
335
|
+
lcid: Int,
|
|
336
|
+
source: Int,
|
|
337
|
+
original: Boolean
|
|
338
|
+
) = callback(fromRawResults(raw).getTextFieldValueByType(fieldType, lcid, source, original))
|
|
339
|
+
|
|
340
|
+
fun textFieldByType(
|
|
341
|
+
callback: Callback,
|
|
342
|
+
raw: String,
|
|
343
|
+
fieldType: Int
|
|
344
|
+
) = callback(generateDocumentReaderTextField(fromRawResults(raw).getTextFieldByType(fieldType)))
|
|
345
|
+
|
|
346
|
+
fun textFieldByTypeLcid(
|
|
347
|
+
callback: Callback,
|
|
348
|
+
raw: String,
|
|
349
|
+
fieldType: Int,
|
|
350
|
+
lcid: Int
|
|
351
|
+
) = callback(generateDocumentReaderTextField(fromRawResults(raw).getTextFieldByType(fieldType, lcid)))
|
|
352
|
+
|
|
353
|
+
fun graphicFieldByTypeSource(
|
|
354
|
+
callback: Callback,
|
|
355
|
+
raw: String,
|
|
356
|
+
fieldType: Int,
|
|
357
|
+
source: Int
|
|
358
|
+
) = callback(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source)))
|
|
359
|
+
|
|
360
|
+
fun graphicFieldByTypeSourcePageIndex(
|
|
361
|
+
callback: Callback,
|
|
362
|
+
raw: String,
|
|
363
|
+
fieldType: Int,
|
|
364
|
+
source: Int,
|
|
365
|
+
pageIndex: Int
|
|
366
|
+
) = callback(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source, pageIndex)))
|
|
367
|
+
|
|
368
|
+
fun graphicFieldByTypeSourcePageIndexLight(
|
|
369
|
+
callback: Callback,
|
|
370
|
+
raw: String,
|
|
371
|
+
fieldType: Int,
|
|
372
|
+
source: Int,
|
|
373
|
+
pageIndex: Int,
|
|
374
|
+
light: Int
|
|
375
|
+
) = callback(generateDocumentReaderGraphicField(fromRawResults(raw).getGraphicFieldByType(fieldType, source, pageIndex, light)))
|
|
376
|
+
|
|
377
|
+
fun graphicFieldImageByType(
|
|
378
|
+
callback: Callback,
|
|
379
|
+
raw: String,
|
|
380
|
+
fieldType: Int
|
|
381
|
+
) = callback(fromRawResults(raw).getGraphicFieldImageByType(fieldType).toBase64())
|
|
382
|
+
|
|
383
|
+
fun graphicFieldImageByTypeSource(
|
|
384
|
+
callback: Callback,
|
|
385
|
+
raw: String,
|
|
386
|
+
fieldType: Int,
|
|
387
|
+
source: Int
|
|
388
|
+
) = callback(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source).toBase64())
|
|
389
|
+
|
|
390
|
+
fun graphicFieldImageByTypeSourcePageIndex(
|
|
391
|
+
callback: Callback,
|
|
392
|
+
raw: String,
|
|
393
|
+
fieldType: Int,
|
|
394
|
+
source: Int,
|
|
395
|
+
pageIndex: Int
|
|
396
|
+
) = callback(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source, pageIndex).toBase64())
|
|
397
|
+
|
|
398
|
+
fun graphicFieldImageByTypeSourcePageIndexLight(
|
|
399
|
+
callback: Callback,
|
|
400
|
+
raw: String,
|
|
401
|
+
fieldType: Int,
|
|
402
|
+
source: Int,
|
|
403
|
+
pageIndex: Int,
|
|
404
|
+
light: Int
|
|
405
|
+
) = callback(fromRawResults(raw).getGraphicFieldImageByType(fieldType, source, pageIndex, light).toBase64())
|
|
406
|
+
|
|
407
|
+
fun containers(
|
|
408
|
+
callback: Callback,
|
|
409
|
+
raw: String,
|
|
410
|
+
resultType: JSONArray
|
|
411
|
+
) = callback(fromRawResults(raw).getContainers(resultType.toIntArray()!!))
|
|
412
|
+
|
|
413
|
+
fun encryptedContainers(
|
|
414
|
+
callback: Callback,
|
|
415
|
+
raw: String
|
|
416
|
+
) = callback(fromRawResults(raw).encryptedContainers)
|
|
417
|
+
|
|
418
|
+
fun getTranslation(callback: Callback, className: String, value: Int) = when (className) {
|
|
419
|
+
"RFIDErrorCodes" -> callback(eRFID_ErrorCodes.getTranslation(context, value))
|
|
420
|
+
"LDSParsingErrorCodes" -> callback(eLDS_ParsingErrorCodes.getTranslation(context, value))
|
|
421
|
+
"LDSParsingNotificationCodes" -> callback(eLDS_ParsingNotificationCodes.getTranslation(context, value))
|
|
422
|
+
"ImageQualityCheckType" -> callback(eImageQualityCheckType.getTranslation(context, value))
|
|
423
|
+
"RFIDDataFileType" -> callback(eRFID_DataFile_Type.getTranslation(context, value))
|
|
424
|
+
"VisualFieldType" -> callback(eVisualFieldType.getTranslation(context, value))
|
|
425
|
+
"LCID" -> callback(LCID.getTranslation(context, value))
|
|
426
|
+
else -> Unit
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// --------------------------------------------------------------------------------------------------------------------------
|
|
430
|
+
|
|
431
|
+
val completion = { action: Int, results: DocumentReaderResults?, error: DocumentReaderException? ->
|
|
432
|
+
sendEvent(completionEvent, generateCompletion(action, results, error))
|
|
433
|
+
if ((action == DocReaderAction.ERROR) ||
|
|
434
|
+
(action == DocReaderAction.CANCEL) ||
|
|
435
|
+
((action == DocReaderAction.COMPLETE) && (results?.rfidResult == 1))
|
|
436
|
+
) stopBackgroundRFID()
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
val rfidReaderCompletion = object : IRfidReaderCompletion() {
|
|
440
|
+
override fun onCompleted(action: Int, results: DocumentReaderResults?, error: DocumentReaderException?): Unit = completion(action, results, error)
|
|
441
|
+
override fun onChipDetected(): Unit = sendEvent(rfidOnChipDetectedEvent)
|
|
442
|
+
override fun onRetryReadChip(error: DocReaderRfidException) = sendEvent(rfidOnRetryReadChipEvent, generateRegulaException(error))
|
|
443
|
+
override fun onProgress(notification: DocumentReaderNotification) = sendEvent(rfidOnProgressEvent, generateDocumentReaderNotification(notification))
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
fun prepareCompletion(callback: Callback) = object : IDocumentReaderPrepareDbCompletion() {
|
|
447
|
+
override fun onPrepareProgressChanged(progress: PrepareProgress) = sendEvent(databaseProgressEvent, generatePrepareProgress(progress))
|
|
448
|
+
override fun onPrepareCompleted(success: Boolean, error: DocumentReaderException?) = callback(generateSuccessCompletion(success, error))
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
fun initCompletion(callback: Callback) = IDocumentReaderInitCompletion { success, error ->
|
|
452
|
+
if (success) {
|
|
453
|
+
Instance().setVideoEncoderCompletion { _, file -> sendEvent(videoEncoderCompletionEvent, file.path) }
|
|
454
|
+
Instance().setOnClickListener { sendEvent(onCustomButtonTappedEvent, it.tag) }
|
|
455
|
+
}
|
|
456
|
+
callback(generateSuccessCompletion(success, error))
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
lateinit var paCertificateCompletion: IRfidPKDCertificateCompletion
|
|
460
|
+
lateinit var taCertificateCompletion: IRfidPKDCertificateCompletion
|
|
461
|
+
lateinit var taSignatureCompletion: IRfidTASignatureCompletion
|
|
462
|
+
|
|
463
|
+
class RfidReaderRequestType(
|
|
464
|
+
val doPACertificates: Boolean,
|
|
465
|
+
val doTACertificates: Boolean,
|
|
466
|
+
val doTASignature: Boolean
|
|
467
|
+
) {
|
|
468
|
+
private val onRequestPACertificates = IRfidPACertificates { serialNumber, issuer, completion ->
|
|
469
|
+
paCertificateCompletion = completion
|
|
470
|
+
sendEvent(paCertificateCompletionEvent, generatePACertificateCompletion(serialNumber, issuer))
|
|
471
|
+
}
|
|
472
|
+
private val onRequestTACertificates = IRfidTACertificates { keyCAR, completion ->
|
|
473
|
+
taCertificateCompletion = completion
|
|
474
|
+
sendEvent(taCertificateCompletionEvent, keyCAR)
|
|
475
|
+
}
|
|
476
|
+
private val onRequestTASignature = IRfidTASignature { challenge, completion ->
|
|
477
|
+
taSignatureCompletion = completion
|
|
478
|
+
sendEvent(taSignatureCompletionEvent, generateTAChallenge(challenge))
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
fun getRfidReaderRequest(): IRfidReaderRequest? = when {
|
|
482
|
+
!doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTASignature)
|
|
483
|
+
!doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestTACertificates)
|
|
484
|
+
!doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestTACertificates, onRequestTASignature)
|
|
485
|
+
doPACertificates && !doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates)
|
|
486
|
+
doPACertificates && !doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTASignature)
|
|
487
|
+
doPACertificates && doTACertificates && !doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates)
|
|
488
|
+
doPACertificates && doTACertificates && doTASignature -> IRfidReaderRequest(onRequestPACertificates, onRequestTACertificates, onRequestTASignature)
|
|
489
|
+
else -> null
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
var requestType = RfidReaderRequestType(
|
|
494
|
+
doPACertificates = false,
|
|
495
|
+
doTACertificates = false,
|
|
496
|
+
doTASignature = false
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
@Suppress("DEPRECATION", "MissingPermission")
|
|
500
|
+
fun newIntent(intent: Intent): Boolean {
|
|
501
|
+
if (intent.action != NfcAdapter.ACTION_TECH_DISCOVERED) return false
|
|
502
|
+
Instance().readRFID(
|
|
503
|
+
IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)),
|
|
504
|
+
rfidReaderCompletion,
|
|
505
|
+
requestType.getRfidReaderRequest()
|
|
506
|
+
)
|
|
507
|
+
return true
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
var backgroundRFIDEnabled = false
|
|
511
|
+
lateinit var lifecycleObserver: LifecycleEventObserver
|
|
512
|
+
|
|
513
|
+
fun startForegroundDispatch() {
|
|
514
|
+
backgroundRFIDEnabled = true
|
|
515
|
+
val filters: Array<IntentFilter?> = arrayOfNulls(1)
|
|
516
|
+
filters[0] = IntentFilter()
|
|
517
|
+
filters[0]!!.addAction(NfcAdapter.ACTION_TECH_DISCOVERED)
|
|
518
|
+
filters[0]!!.addCategory(Intent.CATEGORY_DEFAULT)
|
|
519
|
+
val techList = arrayOf(arrayOf("android.nfc.tech.IsoDep"))
|
|
520
|
+
val intent = Intent(activity, activity.javaClass)
|
|
521
|
+
val flag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0
|
|
522
|
+
val pendingIntent = PendingIntent.getActivity(activity, 0, intent, flag)
|
|
523
|
+
|
|
524
|
+
if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED))
|
|
525
|
+
enableForegroundDispatch(pendingIntent, filters, techList)
|
|
526
|
+
lifecycleObserver = LifecycleEventObserver { _, event ->
|
|
527
|
+
if (backgroundRFIDEnabled) when (event) {
|
|
528
|
+
Lifecycle.Event.ON_RESUME -> enableForegroundDispatch(pendingIntent, filters, techList)
|
|
529
|
+
Lifecycle.Event.ON_PAUSE -> disableForegroundDispatch()
|
|
530
|
+
else -> Unit
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
activity.runOnUiThread { lifecycle.addObserver(lifecycleObserver) }
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
fun enableForegroundDispatch(
|
|
537
|
+
pendingIntent: PendingIntent,
|
|
538
|
+
filters: Array<IntentFilter?>,
|
|
539
|
+
techList: Array<Array<String>>
|
|
540
|
+
) = NfcAdapter.getDefaultAdapter(context).enableForegroundDispatch(activity, pendingIntent, filters, techList)
|
|
541
|
+
|
|
542
|
+
fun disableForegroundDispatch() = NfcAdapter.getDefaultAdapter(activity).disableForegroundDispatch(activity)
|
|
543
|
+
|
|
544
|
+
fun stopBackgroundRFID() {
|
|
545
|
+
if (!backgroundRFIDEnabled) return
|
|
546
|
+
backgroundRFIDEnabled = false
|
|
547
|
+
if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED))
|
|
548
|
+
disableForegroundDispatch()
|
|
549
|
+
activity.runOnUiThread { lifecycle.removeObserver(lifecycleObserver) }
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// Weak references
|
|
553
|
+
lateinit var localizationCallbacks: LocalizationCallbacks
|