@regulaforensics/cordova-plugin-document-reader-api 9.1.337-rc → 9.1.339-rc

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.
@@ -1,4 +1,5 @@
1
1
  @file:SuppressLint("MissingPermission")
2
+ @file:Suppress("EnumValuesSoftDeprecate")
2
3
 
3
4
  package com.regula.plugin.documentreader
4
5
 
@@ -30,12 +31,14 @@ import com.regula.documentreader.api.enums.LCID
30
31
  import com.regula.documentreader.api.enums.eImageQualityCheckType
31
32
  import com.regula.documentreader.api.enums.eLDS_ParsingErrorCodes
32
33
  import com.regula.documentreader.api.enums.eLDS_ParsingNotificationCodes
34
+ import com.regula.documentreader.api.enums.eMDLDeviceEngagement
33
35
  import com.regula.documentreader.api.enums.eRFID_DataFile_Type
34
36
  import com.regula.documentreader.api.enums.eRFID_ErrorCodes
35
37
  import com.regula.documentreader.api.enums.eVisualFieldType
36
38
  import com.regula.documentreader.api.errors.DocReaderRfidException
37
39
  import com.regula.documentreader.api.errors.DocumentReaderException
38
40
  import com.regula.documentreader.api.internal.core.CoreScenarioUtil
41
+ import com.regula.documentreader.api.params.mdl.DataRetrieval
39
42
  import com.regula.documentreader.api.results.DocumentReaderNotification
40
43
  import com.regula.documentreader.api.results.DocumentReaderResults
41
44
  import com.regula.documentreader.api.results.DocumentReaderResults.fromRawResults
@@ -45,7 +48,7 @@ import org.json.JSONObject
45
48
  import com.regula.plugin.documentreader.Convert.toBase64
46
49
  import com.regula.plugin.documentreader.Convert.toByteArray
47
50
 
48
- fun methodCall(method: String, callback: (Any?) -> Unit): Any? = when (method) {
51
+ fun methodCall(method: String, callback: (Any?) -> Unit): Any = when (method) {
49
52
  "getDocumentReaderIsReady" -> getDocumentReaderIsReady(callback)
50
53
  "getDocumentReaderStatus" -> getDocumentReaderStatus(callback)
51
54
  "getRfidSessionStatus" -> getRfidSessionStatus(callback)
@@ -95,6 +98,13 @@ fun methodCall(method: String, callback: (Any?) -> Unit): Any? = when (method) {
95
98
  "btDeviceRequestFlashing" -> btDeviceRequestFlashing()
96
99
  "btDeviceRequestFlashingFullIR" -> btDeviceRequestFlashingFullIR()
97
100
  "btDeviceRequestTurnOffAll" -> btDeviceRequestTurnOffAll()
101
+ "startReadMDl" -> startReadMDl(args(0), args(1), callback)
102
+ "startEngageDevice" -> startEngageDevice(args(0), callback)
103
+ "engageDeviceNFC" -> engageDeviceNFC(callback)
104
+ "engageDeviceData" -> engageDeviceData(args(0), callback)
105
+ "startRetrieveData" -> startRetrieveData(args(0), args(1), callback)
106
+ "retrieveDataNFC" -> retrieveDataNFC(args(0), callback)
107
+ "retrieveDataBLE" -> retrieveDataBLE(args(0), args(1), callback)
98
108
  "setLocalizationDictionary" -> setLocalizationDictionary(args(0))
99
109
  "getLicense" -> getLicense(callback)
100
110
  "getAvailableScenarios" -> getAvailableScenarios(callback)
@@ -220,12 +230,12 @@ fun checkDatabaseUpdate(callback: Callback, databaseID: String) = Instance().che
220
230
  @Suppress("DEPRECATION")
221
231
  fun scan(config: JSONObject) {
222
232
  stopBackgroundRFID()
223
- Instance().showScanner(context, scannerConfigFromJSON(config), IDocumentReaderCompletion(completion))
233
+ Instance().showScanner(activity, scannerConfigFromJSON(config), IDocumentReaderCompletion(completion))
224
234
  }
225
235
 
226
236
  fun startScanner(config: JSONObject) {
227
237
  stopBackgroundRFID()
228
- Instance().startScanner(context, scannerConfigFromJSON(config), IDocumentReaderCompletion(completion))
238
+ Instance().startScanner(activity, scannerConfigFromJSON(config), IDocumentReaderCompletion(completion))
229
239
  }
230
240
 
231
241
  fun recognize(config: JSONObject) {
@@ -244,7 +254,7 @@ fun startRFIDReader(onRequestPACertificates: Boolean, onRequestTACertificates: B
244
254
  onRequestTACertificates,
245
255
  onRequestTASignature
246
256
  )
247
- Instance().startRFIDReader(context, rfidReaderCompletion, requestType.getRfidReaderRequest())
257
+ Instance().startRFIDReader(activity, rfidReaderCompletion, requestType.getRfidReaderRequest())
248
258
  }
249
259
 
250
260
  fun readRFID(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean, onRequestTASignature: Boolean) {
@@ -253,7 +263,7 @@ fun readRFID(onRequestPACertificates: Boolean, onRequestTACertificates: Boolean,
253
263
  onRequestTACertificates,
254
264
  onRequestTASignature
255
265
  )
256
- startForegroundDispatch()
266
+ startForegroundDispatch("readRFID")
257
267
  }
258
268
 
259
269
  fun stopRFIDReader() {
@@ -287,6 +297,47 @@ fun clearPKDCertificates() = Instance().clearPKDCertificates()
287
297
 
288
298
  fun startNewSession() = Instance().startNewSession()
289
299
 
300
+ fun startReadMDl(type: Int, dataRetrieval: JSONObject, callback: Callback) {
301
+ stopBackgroundRFID()
302
+ Instance().startReadMDL(activity, eMDLDeviceEngagement.values()[type], dataRetrievalFromJSON(dataRetrieval)!!) { v1, v2, v3 -> callback(generateCompletion(v1, v2, v3)) }
303
+ }
304
+
305
+ fun startEngageDevice(type: Int, callback: Callback) {
306
+ stopBackgroundRFID()
307
+ Instance().startEngageDevice(activity, eMDLDeviceEngagement.values()[type]) { v1, v2 -> callback(generateDeviceEngagementCompletion(v1, v2)) }
308
+ }
309
+
310
+ lateinit var engageDeviceNFCCallback: Callback
311
+ fun engageDeviceNFC(callback: Callback) {
312
+ engageDeviceNFCCallback = callback
313
+ stopBackgroundRFID()
314
+ startForegroundDispatch("engageDeviceNFC")
315
+ }
316
+
317
+ fun engageDeviceData(data: String, callback: Callback) {
318
+ stopBackgroundRFID()
319
+ Instance().engageDeviceData(data) { v1, v2 -> callback(generateDeviceEngagementCompletion(v1, v2)) }
320
+ }
321
+
322
+ fun startRetrieveData(dataRetrieval: JSONObject, deviceEngagement: JSONObject, callback: Callback) {
323
+ stopBackgroundRFID()
324
+ Instance().startRetrieveData(activity, deviceEngagementFromJSON(deviceEngagement)!!, dataRetrievalFromJSON(dataRetrieval)!!){ v1, v2, v3 -> callback(generateCompletion(v1, v2, v3)) }
325
+ }
326
+
327
+ lateinit var retrieveDataNFCCallback: Callback
328
+ lateinit var retrieveDataNFCProp: DataRetrieval
329
+ fun retrieveDataNFC(dataRetrieval: JSONObject, callback: Callback) {
330
+ retrieveDataNFCCallback = callback
331
+ retrieveDataNFCProp = dataRetrievalFromJSON(dataRetrieval)!!
332
+ stopBackgroundRFID()
333
+ startForegroundDispatch("retrieveDataNFC")
334
+ }
335
+
336
+ fun retrieveDataBLE(dataRetrieval: JSONObject, deviceEngagement: JSONObject, callback: Callback) {
337
+ stopBackgroundRFID()
338
+ Instance().retrieveDataBLE(context, deviceEngagementFromJSON(deviceEngagement)!!, dataRetrievalFromJSON(dataRetrieval)!!){ v1, v2, v3 -> callback(generateCompletion(v1, v2, v3)) }
339
+ }
340
+
290
341
  fun setLocalizationDictionary(dictionary: JSONObject) {
291
342
  localizationCallbacks = LocalizationCallbacks { if (dictionary.has(it)) dictionary.getString(it) else null }
292
343
  Instance().setLocalizationCallback(localizationCallbacks)
@@ -527,19 +578,22 @@ var requestType = RfidReaderRequestType(
527
578
  @Suppress("DEPRECATION", "MissingPermission")
528
579
  fun newIntent(intent: Intent): Boolean {
529
580
  if (intent.action != NfcAdapter.ACTION_TECH_DISCOVERED) return false
530
- Instance().readRFID(
531
- IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)),
532
- rfidReaderCompletion,
533
- requestType.getRfidReaderRequest()
534
- )
581
+ val isoDep = IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG))
582
+ when (nfcFunction) {
583
+ "readRFID" -> Instance().readRFID(isoDep, rfidReaderCompletion, requestType.getRfidReaderRequest())
584
+ "engageDeviceNFC" -> Instance().engageDeviceNFC(isoDep) { v1, v2 -> engageDeviceNFCCallback(generateDeviceEngagementCompletion(v1, v2)) }
585
+ "retrieveDataNFC" -> Instance().retrieveDataNFC(isoDep, retrieveDataNFCProp) { v1, v2, v3 -> retrieveDataNFCCallback(generateCompletion(v1, v2, v3)) }
586
+ }
535
587
  return true
536
588
  }
537
589
 
538
590
  var backgroundRFIDEnabled = false
591
+ var nfcFunction = ""
539
592
  lateinit var lifecycleObserver: LifecycleEventObserver
540
593
 
541
- fun startForegroundDispatch() {
594
+ fun startForegroundDispatch(tag: String) {
542
595
  backgroundRFIDEnabled = true
596
+ nfcFunction = tag
543
597
  val filters: Array<IntentFilter?> = arrayOfNulls(1)
544
598
  filters[0] = IntentFilter()
545
599
  filters[0]!!.addAction(NfcAdapter.ACTION_TECH_DISCOVERED)
@@ -12,7 +12,9 @@ import android.util.Base64
12
12
  import org.json.JSONArray
13
13
  import org.json.JSONObject
14
14
  import java.io.ByteArrayOutputStream
15
+ import java.lang.reflect.Constructor
15
16
  import kotlin.math.sqrt
17
+ import kotlin.reflect.KClass
16
18
 
17
19
  fun List<*>.toJson(): JSONArray {
18
20
  val result = JSONArray()
@@ -105,6 +107,18 @@ fun IntArray?.toJson() = this?.let {
105
107
  result
106
108
  }
107
109
 
110
+ fun JSONArray.toLongArray(): LongArray {
111
+ val result = LongArray(length())
112
+ for (i in 0 until length()) result[i] = getLong(i)
113
+ return result
114
+ }
115
+
116
+ fun LongArray.toJson(): JSONArray {
117
+ val result = JSONArray()
118
+ for (i in indices) result.put(i, this[i])
119
+ return result
120
+ }
121
+
108
122
  fun JSONObject.forEach(action: (String, Any) -> Unit) {
109
123
  val keys: Iterator<String> = keys()
110
124
  while (keys.hasNext()) {
@@ -123,6 +137,11 @@ fun JSONObject.getIntOrNull(name: String): Int? {
123
137
  return null
124
138
  }
125
139
 
140
+ fun JSONObject.getLongOrNull(name: String): Long? {
141
+ if (has(name) && get(name).toString() != "null") return getLong(name)
142
+ return null
143
+ }
144
+
126
145
  fun JSONObject.getDoubleOrNull(name: String): Double? {
127
146
  if (has(name) && get(name).toString() != "null") return getDouble(name)
128
147
  return null
@@ -138,6 +157,49 @@ fun JSONObject.getStringOrNull(name: String): String? {
138
157
  return null
139
158
  }
140
159
 
160
+ fun <T : Any> KClass<T>.constructor(vararg argTypes: KClass<*>): Constructor<T> {
161
+ val types = mutableListOf<Class<*>>()
162
+ for (argType in argTypes) types.add(argType.java)
163
+ return java.getDeclaredConstructor(*types.toTypedArray())
164
+ }
165
+
166
+ fun <T : Any> Constructor<T>.instantiate(vararg args: Any?): T {
167
+ isAccessible = true
168
+ return newInstance(*args)
169
+ }
170
+
171
+ fun <T : Any> T.setPrivateProperty(varName: String, data: Any?) {
172
+ try {
173
+ setPrivateProperty(javaClass, varName, data)
174
+ } catch (_: java.lang.Exception) {
175
+ try {
176
+ setPrivateProperty(javaClass.superclass!!, varName, data)
177
+ } catch (_: java.lang.Exception) {
178
+ }
179
+ }
180
+ }
181
+
182
+ fun <T : Any> T.setPrivateProperty(clazz: Class<T>, varName: String, data: Any?) = clazz.getDeclaredField(varName).let {
183
+ it.isAccessible = true
184
+ it.set(this, data)
185
+ }
186
+
187
+ fun <T : Any> T.getPrivateProperty(varName: String): Any? {
188
+ var clazz: Class<*>? = this.javaClass
189
+ while (clazz != null) {
190
+ try {
191
+ val field = clazz.getDeclaredField(varName)
192
+ field.isAccessible = true
193
+ return field.get(this)
194
+ } catch (_: NoSuchFieldException) {
195
+ clazz = clazz.superclass
196
+ }
197
+ }
198
+ throw NoSuchFieldException(
199
+ "Field '$varName' not found in class hierarchy of ${this.javaClass.name}"
200
+ )
201
+ }
202
+
141
203
  internal object Convert {
142
204
  fun String?.toByteArray(): ByteArray? {
143
205
  var str = this ?: return null
@@ -6,7 +6,7 @@ repositories {
6
6
 
7
7
  dependencies {
8
8
  //noinspection GradleDependency
9
- implementation ('com.regula.documentreader:api:9.1.12214'){
9
+ implementation ('com.regula.documentreader:api:9.1.12240'){
10
10
  transitive = true
11
11
  }
12
12
  }
@@ -35,6 +35,7 @@
35
35
  functionality.singleResult = [[options valueForKey:@"singleResult"] boolValue];
36
36
  if(options[@"torchTurnedOn"]) functionality.torchTurnedOn = [options[@"torchTurnedOn"] boolValue];
37
37
  if(options[@"preventScreenRecording"]) functionality.preventScreenRecording = [options[@"preventScreenRecording"] boolValue];
38
+ if(options[@"homeIndicatorAutoHide"]) functionality.homeIndicatorAutoHide = [options[@"homeIndicatorAutoHide"] boolValue];
38
39
 
39
40
  // Int
40
41
  if([options valueForKey:@"showCaptureButtonDelayFromDetect"] != nil)
@@ -61,6 +62,7 @@
61
62
  // Float
62
63
  if([options valueForKey:@"zoomFactor"] != nil)
63
64
  functionality.zoomFactor = [[options valueForKey:@"zoomFactor"] floatValue];
65
+ if(options[@"mdlTimeout"]) functionality.mDLTimeout = [options[@"mdlTimeout"] doubleValue];
64
66
 
65
67
  // Custom
66
68
  // in android - cameraSize
@@ -90,6 +92,7 @@
90
92
  result[@"singleResult"] = [NSNumber numberWithBool:functionality.singleResult];
91
93
  result[@"torchTurnedOn"] = @(functionality.torchTurnedOn);
92
94
  result[@"preventScreenRecording"] = @(functionality.preventScreenRecording);
95
+ result[@"homeIndicatorAutoHide"] = @(functionality.homeIndicatorAutoHide);
93
96
 
94
97
  // Int
95
98
  result[@"showCaptureButtonDelayFromDetect"] = [NSNumber numberWithDouble:functionality.showCaptureButtonDelayFromDetect];
@@ -107,6 +110,7 @@
107
110
 
108
111
  // Float
109
112
  result[@"zoomFactor"] = [NSNumber numberWithFloat:functionality.zoomFactor];
113
+ result[@"mdlTimeout"] = @(functionality.mDLTimeout);
110
114
 
111
115
  // Custom
112
116
  // in android - cameraSize
@@ -256,8 +260,8 @@
256
260
  processParams.documentGroupFilter = [options mutableArrayValueForKey:@"documentGroupFilter"];
257
261
  if([options valueForKey:@"lcidIgnoreFilter"] != nil)
258
262
  processParams.lcidIgnoreFilter = [options mutableArrayValueForKey:@"lcidIgnoreFilter"];
259
- if([options valueForKey:@"lcidFilter"] != nil)
260
- processParams.lcidFilter = [options mutableArrayValueForKey:@"lcidFilter"];
263
+ if (options[@"lcidFilter"]) processParams.lcidFilter = options[@"lcidFilter"];
264
+ if (options[@"fieldTypesIgnoreFilter"]) processParams.fieldTypesIgnoreFilter = options[@"fieldTypesIgnoreFilter"];
261
265
 
262
266
  // JSONObject
263
267
  if (options[@"customParams"]) processParams.customParams = options[@"customParams"];
@@ -357,6 +361,7 @@
357
361
  result[@"documentGroupFilter"] = processParams.documentGroupFilter;
358
362
  result[@"lcidIgnoreFilter"] = processParams.lcidIgnoreFilter;
359
363
  result[@"lcidFilter"] = processParams.lcidFilter;
364
+ result[@"fieldTypesIgnoreFilter"] = processParams.fieldTypesIgnoreFilter;
360
365
  result[@"mrzFormatsFilter"] = processParams.mrzFormatsFilter;
361
366
  result[@"resultTypeOutput"] = processParams.resultTypeOutput;
362
367
 
@@ -454,6 +459,7 @@
454
459
  if(options[@"activityIndicatorPortraitPositionMultiplier"]) customization.activityIndicatorPortraitPositionMultiplier = [options[@"activityIndicatorPortraitPositionMultiplier"] floatValue];
455
460
  if(options[@"activityIndicatorLandscapePositionMultiplier"]) customization.activityIndicatorLandscapePositionMultiplier = [options[@"activityIndicatorLandscapePositionMultiplier"] floatValue];
456
461
  if(options[@"cameraPreviewVerticalPositionMultiplier"]) customization.previewLayerPositionMultiplier = [options[@"cameraPreviewVerticalPositionMultiplier"] floatValue];
462
+ if(options[@"multipageButtonPositionMultiplier"]) customization.multipageButtonPositionMultiplier = [options[@"multipageButtonPositionMultiplier"] floatValue];
457
463
 
458
464
  // Drawable
459
465
  if([options valueForKey:@"multipageAnimationFrontImage"] != nil)
@@ -568,6 +574,7 @@
568
574
  result[@"activityIndicatorPortraitPositionMultiplier"] = [NSNumber numberWithFloat:customization.activityIndicatorPortraitPositionMultiplier];
569
575
  result[@"activityIndicatorLandscapePositionMultiplier"] = [NSNumber numberWithFloat:customization.activityIndicatorLandscapePositionMultiplier];
570
576
  result[@"cameraPreviewVerticalPositionMultiplier"] = [NSNumber numberWithFloat:customization.previewLayerPositionMultiplier];
577
+ result[@"multipageButtonPositionMultiplier"] = [NSNumber numberWithFloat:customization.multipageButtonPositionMultiplier];
571
578
 
572
579
  // Drawable
573
580
  result[@"multipageAnimationFrontImage"] = [RGLWJSONConstructor base64WithImage:customization.multipageAnimationFrontImage];
@@ -20,6 +20,7 @@
20
20
  +(NSString* _Nullable)generateCompletion:(NSNumber*_Nonnull)action :(RGLDocumentReaderResults*_Nullable)results :(NSError*_Nullable)error;
21
21
  +(NSString* _Nonnull)generatePACertificateCompletion:(NSData *_Nullable)serialNumber :(RGLPAResourcesIssuer *_Nullable)issuer;
22
22
  +(NSString* _Nullable)generateFinalizePackageCompletion:(NSNumber*_Nonnull)action :(RGLTransactionInfo*_Nullable)info :(NSError*_Nullable)error;
23
+ +(NSString* _Nullable)generateDeviceEngagementCompletion:(RGLDeviceEngagement* _Nullable)deviceEngagement :(NSError* _Nullable)error;
23
24
 
24
25
  +(RGLConfig* _Nullable)configFromJson:(NSDictionary* _Nullable)input;
25
26
  +(NSDictionary* _Nullable)generateConfig:(RGLConfig* _Nullable)input;
@@ -126,6 +127,10 @@
126
127
  +(NSDictionary* _Nullable)generateBytesData:(RGLBytesData* _Nullable)input;
127
128
  +(RGLVDSNCData* _Nullable)vdsncDataFromJson:(NSDictionary* _Nullable)input;
128
129
  +(NSDictionary* _Nullable)generateVDSNCData:(RGLVDSNCData* _Nullable)input;
130
+ +(RGLDocFeature* _Nullable)docFeatureFromJson:(NSDictionary* _Nullable)input;
131
+ +(NSDictionary* _Nullable)generateDocFeature:(RGLDocFeature* _Nullable)input;
132
+ +(RGLVDSData* _Nullable)vdsDataFromJson:(NSDictionary* _Nullable)input;
133
+ +(NSDictionary* _Nullable)generateVDSData:(RGLVDSData* _Nullable)input;
129
134
  +(RGLOpticalStatus* _Nullable)opticalStatusFromJson:(NSDictionary* _Nullable)input;
130
135
  +(NSDictionary* _Nullable)generateOpticalStatus:(RGLOpticalStatus* _Nullable)input;
131
136
  +(RGLRFIDSessionDataStatus* _Nullable)rfidSessionDataStatusFromJson:(NSDictionary* _Nullable)input;
@@ -175,6 +180,20 @@
175
180
  +(NSDictionary* _Nullable)generateTCCParams:(RGLTCCParams* _Nullable)input;
176
181
  +(RGLTransactionInfo* _Nullable)transactionInfoFromJson:(NSDictionary* _Nullable)input;
177
182
  +(NSDictionary* _Nullable)generateTransactionInfo:(RGLTransactionInfo* _Nullable)input;
183
+ +(RGLDetailsAge* _Nullable)detailsAgeFromJson:(NSDictionary* _Nullable)input;
184
+ +(NSDictionary* _Nullable)generateDetailsAge:(RGLDetailsAge* _Nullable)input;
185
+ +(RGLDeviceRetrievalMethod* _Nullable)deviceRetrievalMethodFromJson:(NSDictionary* _Nullable)input;
186
+ +(NSDictionary* _Nullable)generateDeviceRetrievalMethod:(RGLDeviceRetrievalMethod* _Nullable)input;
187
+ +(RGLDocumentRequest18013MDL* _Nullable)documentRequest18013MDLFromJson:(NSDictionary* _Nullable)input;
188
+ +(NSDictionary* _Nullable)generateDocumentRequest18013MDL:(RGLDocumentRequest18013MDL* _Nullable)input;
189
+ +(RGLDataRetrieval* _Nullable)dataRetrievalFromJson:(NSDictionary* _Nullable)input;
190
+ +(NSDictionary* _Nullable)generateDataRetrieval:(RGLDataRetrieval* _Nullable)input;
191
+ +(RGLDeviceEngagement* _Nullable)deviceEngagementFromJson:(NSDictionary* _Nullable)input;
192
+ +(NSDictionary* _Nullable)generateDeviceEngagement:(RGLDeviceEngagement* _Nullable)input;
193
+ +(RGLNameSpaceMDL* _Nullable)nameSpaceMDLFromJson:(NSDictionary* _Nullable)input;
194
+ +(NSDictionary* _Nullable)generateNameSpaceMDL:(RGLNameSpaceMDL* _Nullable)input;
195
+ +(RGLDocumentRequestMDL* _Nullable)documentRequestMDLFromJson:(NSDictionary* _Nullable)input;
196
+ +(NSDictionary* _Nullable)generateDocumentRequestMDL:(RGLDocumentRequestMDL* _Nullable)input;
178
197
 
179
198
  @end
180
199