@regulaforensics/cordova-plugin-document-reader-api 6.5.0 → 6.6.1

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.
@@ -9,10 +9,12 @@ import android.content.IntentFilter;
9
9
  import android.graphics.Bitmap;
10
10
  import android.nfc.NfcAdapter;
11
11
  import android.nfc.tech.IsoDep;
12
- import androidx.annotation.NonNull;
13
12
  import android.os.Bundle;
14
13
  import android.util.Base64;
15
14
 
15
+ import androidx.annotation.NonNull;
16
+
17
+ import com.regula.documentreader.api.completions.ICheckDatabaseUpdate;
16
18
  import com.regula.documentreader.api.completions.IDocumentReaderCompletion;
17
19
  import com.regula.documentreader.api.completions.IDocumentReaderInitCompletion;
18
20
  import com.regula.documentreader.api.completions.IDocumentReaderPrepareCompletion;
@@ -23,13 +25,16 @@ import com.regula.documentreader.api.completions.ITccParamsCompletion;
23
25
  import com.regula.documentreader.api.enums.DocReaderAction;
24
26
  import com.regula.documentreader.api.errors.DocumentReaderException;
25
27
  import com.regula.documentreader.api.internal.core.CoreScenarioUtil;
28
+ import com.regula.documentreader.api.params.BleDeviceConfig;
26
29
  import com.regula.documentreader.api.params.DocReaderConfig;
27
30
  import com.regula.documentreader.api.params.ImageInputData;
28
31
  import com.regula.documentreader.api.internal.params.ImageInputParam;
29
32
  import com.regula.documentreader.api.params.rfid.PKDCertificate;
30
33
  import com.regula.documentreader.api.params.rfid.authorization.PAResourcesIssuer;
31
34
  import com.regula.documentreader.api.params.rfid.authorization.TAChallenge;
35
+ import com.regula.documentreader.api.results.DocumentReaderGraphicField;
32
36
  import com.regula.documentreader.api.results.DocumentReaderResults;
37
+ import com.regula.documentreader.api.results.DocumentReaderTextField;
33
38
  import com.regula.documentreader.api.internal.parser.DocReaderResultsJsonParser;
34
39
 
35
40
  import org.apache.cordova.CallbackContext;
@@ -57,9 +62,15 @@ public class DocumentReader extends CordovaPlugin {
57
62
  private IRfidPKDCertificateCompletion taCertificateCompletion;
58
63
  private IRfidTASignatureCompletion taSignatureCompletion;
59
64
  private final static String rfidNotificationCompletionEvent = "rfidNotificationCompletionEvent";
65
+
60
66
  private final static String paCertificateCompletionEvent = "paCertificateCompletionEvent";
61
67
  private final static String taCertificateCompletionEvent = "taCertificateCompletionEvent";
62
68
  private final static String taSignatureCompletionEvent = "taSignatureCompletionEvent";
69
+
70
+ private final static String bleOnServiceConnectedEvent = "bleOnServiceConnectedEvent";
71
+ private final static String bleOnServiceDisconnectedEvent = "bleOnServiceDisconnectedEvent";
72
+ private final static String bleOnDeviceReadyEvent = "bleOnDeviceReadyEvent";
73
+
63
74
  private static int databaseDownloadProgress = 0;
64
75
 
65
76
  private Context getContext() {
@@ -118,13 +129,13 @@ public class DocumentReader extends CordovaPlugin {
118
129
  }
119
130
 
120
131
  private void sendIRfidNotificationCompletion(int notification, Bundle value) {
121
- PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, rfidNotificationCompletionEvent + JSONConstructor.generateRfidNotificationCompletion(notification, value).toString());
132
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, rfidNotificationCompletionEvent + JSONConstructor.generateRfidNotificationCompletion(notification, value));
122
133
  pluginResult.setKeepCallback(true);
123
134
  callbackContext.sendPluginResult(pluginResult);
124
135
  }
125
136
 
126
137
  private void sendPACertificateCompletion(byte[] serialNumber, PAResourcesIssuer issuer) {
127
- PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, paCertificateCompletionEvent + JSONConstructor.generatePACertificateCompletion(serialNumber, issuer).toString());
138
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, paCertificateCompletionEvent + JSONConstructor.generatePACertificateCompletion(serialNumber, issuer));
128
139
  pluginResult.setKeepCallback(true);
129
140
  callbackContext.sendPluginResult(pluginResult);
130
141
  }
@@ -135,7 +146,23 @@ public class DocumentReader extends CordovaPlugin {
135
146
  callbackContext.sendPluginResult(pluginResult);
136
147
  }
137
148
  private void sendTASignatureCompletion(TAChallenge challenge) {
138
- PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, taSignatureCompletionEvent + JSONConstructor.generateTAChallenge(challenge).toString());
149
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, taSignatureCompletionEvent + JSONConstructor.generateTAChallenge(challenge));
150
+ pluginResult.setKeepCallback(true);
151
+ callbackContext.sendPluginResult(pluginResult);
152
+ }
153
+ private void sendBleOnServiceConnectedEvent(boolean isBleManagerConnected) {
154
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, bleOnServiceConnectedEvent + isBleManagerConnected);
155
+ pluginResult.setKeepCallback(true);
156
+ callbackContext.sendPluginResult(pluginResult);
157
+ }
158
+
159
+ private void sendBleOnServiceDisconnectedEvent() {
160
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, bleOnServiceDisconnectedEvent);
161
+ pluginResult.setKeepCallback(true);
162
+ callbackContext.sendPluginResult(pluginResult);
163
+ }
164
+ private void sendBleOnDeviceReadyEvent() {
165
+ PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, bleOnDeviceReadyEvent);
139
166
  pluginResult.setKeepCallback(true);
140
167
  callbackContext.sendPluginResult(pluginResult);
141
168
  }
@@ -168,6 +195,18 @@ public class DocumentReader extends CordovaPlugin {
168
195
  case "initializeReaderAutomatically":
169
196
  initializeReaderAutomatically(callback);
170
197
  break;
198
+ case "isBlePermissionsGranted":
199
+ isBlePermissionsGranted(callback);
200
+ break;
201
+ case "startBluetoothService":
202
+ startBluetoothService(callback);
203
+ break;
204
+ case "initializeReaderBleDeviceConfig":
205
+ initializeReaderBleDeviceConfig(callback);
206
+ break;
207
+ case "getTag":
208
+ getTag(callback);
209
+ break;
171
210
  case "getAPIVersion":
172
211
  getAPIVersion(callback);
173
212
  break;
@@ -288,6 +327,12 @@ public class DocumentReader extends CordovaPlugin {
288
327
  case "setCameraSessionIsPaused":
289
328
  setCameraSessionIsPaused(callback, args(0));
290
329
  break;
330
+ case "setTag":
331
+ setTag(callback, args(0));
332
+ break;
333
+ case "checkDatabaseUpdate":
334
+ checkDatabaseUpdate(callback, args(0));
335
+ break;
291
336
  case "getScenario":
292
337
  getScenario(callback, args(0));
293
338
  break;
@@ -351,8 +396,60 @@ public class DocumentReader extends CordovaPlugin {
351
396
  case "recognizeImagesWithImageInputs":
352
397
  recognizeImagesWithImageInputs(callback, args(0));
353
398
  break;
399
+ case "getTextFieldValueByType":
400
+ getTextFieldValueByType(callback, args(0), args(1));
401
+ break;
402
+ case "getTextFieldValueByTypeLcid":
403
+ getTextFieldValueByTypeLcid(callback, args(0), args(1), args(2));
404
+ break;
405
+ case "getTextFieldValueByTypeSource":
406
+ getTextFieldValueByTypeSource(callback, args(0), args(1), args(2));
407
+ break;
408
+ case "getTextFieldValueByTypeLcidSource":
409
+ getTextFieldValueByTypeLcidSource(callback, args(0), args(1), args(2), args(3));
410
+ break;
411
+ case "getTextFieldValueByTypeSourceOriginal":
412
+ getTextFieldValueByTypeSourceOriginal(callback, args(0), args(1), args(2), args(3));
413
+ break;
414
+ case "getTextFieldValueByTypeLcidSourceOriginal":
415
+ getTextFieldValueByTypeLcidSourceOriginal(callback, args(0), args(1), args(2), args(3), args(4));
416
+ break;
417
+ case "getTextFieldByType":
418
+ getTextFieldByType(callback, args(0), args(1));
419
+ break;
420
+ case "getTextFieldByTypeLcid":
421
+ getTextFieldByTypeLcid(callback, args(0), args(1), args(2));
422
+ break;
423
+ case "getGraphicFieldByTypeSource":
424
+ getGraphicFieldByTypeSource(callback, args(0), args(1), args(2));
425
+ break;
426
+ case "getGraphicFieldByTypeSourcePageIndex":
427
+ getGraphicFieldByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3));
428
+ break;
429
+ case "getGraphicFieldByTypeSourcePageIndexLight":
430
+ getGraphicFieldByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4));
431
+ break;
432
+ case "getGraphicFieldImageByType":
433
+ getGraphicFieldImageByType(callback, args(0), args(1));
434
+ break;
435
+ case "getGraphicFieldImageByTypeSource":
436
+ getGraphicFieldImageByTypeSource(callback, args(0), args(1), args(2));
437
+ break;
438
+ case "getGraphicFieldImageByTypeSourcePageIndex":
439
+ getGraphicFieldImageByTypeSourcePageIndex(callback, args(0), args(1), args(2), args(3));
440
+ break;
441
+ case "getGraphicFieldImageByTypeSourcePageIndexLight":
442
+ getGraphicFieldImageByTypeSourcePageIndexLight(callback, args(0), args(1), args(2), args(3), args(4));
443
+ break;
444
+ case "getContainers":
445
+ getContainers(callback, args(0), args(1));
446
+ break;
447
+ case "getEncryptedContainers":
448
+ getEncryptedContainers(callback, args(0));
449
+ break;
354
450
  }
355
- } catch (Exception ignored) {
451
+ } catch (Exception e) {
452
+ e.printStackTrace();
356
453
  }
357
454
  return true;
358
455
  }
@@ -396,6 +493,37 @@ public class DocumentReader extends CordovaPlugin {
396
493
  callback.success("already initialized");
397
494
  }
398
495
 
496
+ private void isBlePermissionsGranted(Callback callback) {
497
+ callback.success(BluetoothUtil.Companion.isBlePermissionsGranted(getActivity()));
498
+ }
499
+
500
+ private void startBluetoothService(Callback callback) {
501
+ BluetoothUtil.Companion.startBluetoothService(
502
+ getActivity(),
503
+ isBleManagerConnected -> {
504
+ sendBleOnServiceConnectedEvent(isBleManagerConnected);
505
+ return null;
506
+ },
507
+ () -> {
508
+ sendBleOnServiceDisconnectedEvent();
509
+ return null;
510
+ },
511
+ () -> {
512
+ sendBleOnDeviceReadyEvent();
513
+ return null;
514
+ }
515
+ );
516
+ callback.success();
517
+ }
518
+
519
+ private void initializeReaderBleDeviceConfig(Callback callback) {
520
+ if (BluetoothUtil.Companion.getBleManager() == null) callback.error("bleManager is null");
521
+ if (!Instance().isReady())
522
+ Instance().initializeReader(getContext(), new BleDeviceConfig(BluetoothUtil.Companion.getBleManager()), getInitCompletion(callback));
523
+ else
524
+ callback.success("already initialized");
525
+ }
526
+
399
527
  private void getAvailableScenarios(Callback callback) throws JSONException {
400
528
  callback.success(JSONConstructor.generateList(Instance().availableScenarios, JSONConstructor::generateDocumentReaderScenario).toString());
401
529
  }
@@ -512,6 +640,20 @@ public class DocumentReader extends CordovaPlugin {
512
640
  callback.success();
513
641
  }
514
642
 
643
+ private void getTag(Callback callback) {
644
+ callback.success(Instance().tag);
645
+ }
646
+
647
+ private void setTag(Callback callback, String tag) {
648
+ Instance().tag = tag;
649
+ callback.success();
650
+ }
651
+
652
+ private void checkDatabaseUpdate(Callback callback, String databaseId) {
653
+ Instance().checkDatabaseUpdate(getContext(), databaseId, getCheckDatabaseUpdateCompletion(callback));
654
+ callback.success();
655
+ }
656
+
515
657
  private void startNewPage(Callback callback) {
516
658
  Instance().startNewPage();
517
659
  callback.success();
@@ -553,7 +695,7 @@ public class DocumentReader extends CordovaPlugin {
553
695
  }
554
696
 
555
697
  private void cancelDBUpdate(Callback callback) {
556
- callback.success(Instance().cancelDBUpdate());
698
+ callback.success(Instance().cancelDBUpdate(getContext()));
557
699
  }
558
700
 
559
701
  private void resetConfiguration(Callback callback) {
@@ -686,20 +828,131 @@ public class DocumentReader extends CordovaPlugin {
686
828
  callback.success();
687
829
  }
688
830
 
689
- private void setCameraSessionIsPaused(Callback callback, @SuppressWarnings("unused") boolean ignored) {
690
- callback.error("setCameraSessionIsPaused() is an ios-only method");
691
- }
692
-
693
831
  private void setRfidDelegate(Callback callback, int delegate) {
694
832
  rfidDelegate = delegate;
695
833
  callback.success();
696
834
  }
697
835
 
836
+ private void getTextFieldValueByType(Callback callback, String raw, int fieldType) {
837
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
838
+ callback.success(results.getTextFieldValueByType(fieldType));
839
+ }
840
+
841
+ private void getTextFieldValueByTypeLcid(Callback callback, String raw, int fieldType, int lcid) {
842
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
843
+ callback.success(results.getTextFieldValueByType(fieldType, lcid));
844
+ }
845
+
846
+ private void getTextFieldValueByTypeSource(Callback callback, String raw, int fieldType, int source) {
847
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
848
+ callback.success(results.getTextFieldValueByTypeAndSource(fieldType, source));
849
+ }
850
+
851
+ private void getTextFieldValueByTypeLcidSource(Callback callback, String raw, int fieldType, int lcid, int source) {
852
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
853
+ callback.success(results.getTextFieldValueByType(fieldType, lcid, source));
854
+ }
855
+
856
+ private void getTextFieldValueByTypeSourceOriginal(Callback callback, String raw, int fieldType, int source, boolean original) {
857
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
858
+ callback.success(results.getTextFieldValueByTypeAndSource(fieldType, source, original));
859
+ }
860
+
861
+ private void getTextFieldValueByTypeLcidSourceOriginal(Callback callback, String raw, int fieldType, int lcid, int source, boolean original) {
862
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
863
+ callback.success(results.getTextFieldValueByType(fieldType, lcid, source, original));
864
+ }
865
+
866
+ private void getTextFieldByType(Callback callback, String raw, int fieldType) {
867
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
868
+ DocumentReaderTextField result = results.getTextFieldByType(fieldType);
869
+ if (result == null)
870
+ callback.success(null);
871
+ else
872
+ callback.success(JSONConstructor.generateDocumentReaderTextField(result, getContext()).toString());
873
+ }
874
+
875
+ private void getTextFieldByTypeLcid(Callback callback, String raw, int fieldType, int lcid) {
876
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
877
+ DocumentReaderTextField result = results.getTextFieldByType(fieldType, lcid);
878
+ if (result == null)
879
+ callback.success(null);
880
+ else
881
+ callback.success(JSONConstructor.generateDocumentReaderTextField(result, getContext()).toString());
882
+ }
883
+
884
+ private void getGraphicFieldByTypeSource(Callback callback, String raw, int fieldType, int source) {
885
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
886
+ DocumentReaderGraphicField result = results.getGraphicFieldByType(fieldType, source);
887
+ if (result == null)
888
+ callback.success(null);
889
+ else
890
+ callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
891
+ }
892
+
893
+ private void getGraphicFieldByTypeSourcePageIndex(Callback callback, String raw, int fieldType, int source, int pageIndex) {
894
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
895
+ DocumentReaderGraphicField result = results.getGraphicFieldByType(fieldType, source, pageIndex);
896
+ if (result == null)
897
+ callback.success(null);
898
+ else
899
+ callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
900
+ }
901
+
902
+ private void getGraphicFieldByTypeSourcePageIndexLight(Callback callback, String raw, int fieldType, int source, int pageIndex, int light) {
903
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
904
+ DocumentReaderGraphicField result = results.getGraphicFieldByType(fieldType, source, pageIndex, light);
905
+ if (result == null)
906
+ callback.success(null);
907
+ else
908
+ callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
909
+ }
910
+
911
+ private void getGraphicFieldImageByType(Callback callback, String raw, int fieldType) {
912
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
913
+ callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType)));
914
+ }
915
+
916
+ private void getGraphicFieldImageByTypeSource(Callback callback, String raw, int fieldType, int source) {
917
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
918
+ callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source)));
919
+ }
920
+
921
+ private void getGraphicFieldImageByTypeSourcePageIndex(Callback callback, String raw, int fieldType, int source, int pageIndex) {
922
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
923
+ callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex)));
924
+ }
925
+
926
+ private void getGraphicFieldImageByTypeSourcePageIndexLight(Callback callback, String raw, int fieldType, int source, int pageIndex, int light) {
927
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
928
+ callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex, light)));
929
+ }
930
+
931
+ @SuppressLint("WrongConstant")
932
+ private void getContainers(Callback callback, String raw, JSONArray resultType) {
933
+ try {
934
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
935
+ callback.success(results.getContainers(JSONConstructor.intArrayFromJSON(resultType)));
936
+ } catch (JSONException e) {
937
+ e.printStackTrace();
938
+ callback.error(e.toString());
939
+ }
940
+ }
941
+
942
+ private void getEncryptedContainers(Callback callback, String raw) {
943
+ DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
944
+ callback.success(results.getEncryptedContainers());
945
+ }
946
+
947
+ private void setCameraSessionIsPaused(Callback callback, @SuppressWarnings("unused") boolean ignored) {
948
+ callback.error("setCameraSessionIsPaused() is an ios-only method");
949
+ }
950
+
698
951
  private void getCameraSessionIsPaused(Callback callback) {
699
952
  callback.error("getCameraSessionIsPaused() is an ios-only method");
700
953
  }
701
954
 
702
- private void stopRFIDReaderWithErrorMessage(Callback callback, String message) {
955
+ private void stopRFIDReaderWithErrorMessage(Callback callback, @SuppressWarnings("unused") String message) {
703
956
  callback.error("stopRFIDReaderWithErrorMessage() is an ios-only method");
704
957
  }
705
958
 
@@ -755,6 +1008,10 @@ public class DocumentReader extends CordovaPlugin {
755
1008
  };
756
1009
  }
757
1010
 
1011
+ private ICheckDatabaseUpdate getCheckDatabaseUpdateCompletion(Callback callback) {
1012
+ return (database) -> callback.success(JSONConstructor.generateDocReaderDocumentsDatabase(database));
1013
+ }
1014
+
758
1015
  private ITccParamsCompletion getTCCParamsCompletion(Callback callback) {
759
1016
  return (success, error) -> {
760
1017
  if (success)
@@ -31,13 +31,12 @@ class Helpers {
31
31
  return result;
32
32
  }
33
33
 
34
- static BitmapDrawable drawableFromBase64(String base64, Context context)
35
- {
34
+ static BitmapDrawable drawableFromBase64(String base64, Context context) {
36
35
  byte[] decodedByte = Base64.decode(base64, 0);
37
- Bitmap bitmap = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
36
+ Bitmap bitmap = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
38
37
  float density = context.getResources().getDisplayMetrics().density;
39
- int width = (int)(bitmap.getWidth()*density);
40
- int height = (int)(bitmap.getHeight()*density);
38
+ int width = (int) (bitmap.getWidth() * density);
39
+ int height = (int) (bitmap.getHeight() * density);
41
40
  return new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, width, height, false));
42
41
  }
43
42
 
@@ -64,6 +63,8 @@ class Helpers {
64
63
  }
65
64
 
66
65
  static String bitmapToBase64String(Bitmap bitmap) {
66
+ if(bitmap == null) return null;
67
+
67
68
  ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
68
69
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
69
70
  byte[] byteArray = byteArrayOutputStream.toByteArray();