@regulaforensics/react-native-document-reader-api 6.8.1 → 6.9.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.
Files changed (75) hide show
  1. package/RNDocumentReaderApi.podspec +1 -1
  2. package/android/build.gradle +18 -1
  3. package/android/src/main/java/com/regula/documentreader/BluetoothUtil.kt +6 -6
  4. package/android/src/main/java/com/regula/documentreader/Helpers.java +117 -3
  5. package/android/src/main/java/com/regula/documentreader/JSONConstructor.java +182 -261
  6. package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.java +142 -125
  7. package/android/src/main/java/com/regula/documentreader/RegulaConfig.java +114 -26
  8. package/example/.bundle/config +2 -0
  9. package/example/.eslintrc.js +1 -1
  10. package/example/.prettierrc.js +2 -2
  11. package/example/.watchmanconfig +1 -1
  12. package/example/App.tsx +358 -0
  13. package/example/Gemfile +6 -0
  14. package/example/Gemfile.lock +98 -0
  15. package/example/__tests__/{App-test.js → App.test.tsx} +3 -0
  16. package/example/android/app/build.gradle +77 -59
  17. package/example/android/app/src/debug/AndroidManifest.xml +1 -1
  18. package/example/android/app/src/debug/java/com/regula/dr/fullrfid/ReactNativeFlipper.java +7 -4
  19. package/example/android/app/src/main/AndroidManifest.xml +4 -9
  20. package/example/android/app/src/main/java/com/regula/dr/fullrfid/MainActivity.java +17 -0
  21. package/example/android/app/src/main/java/com/regula/dr/fullrfid/MainApplication.java +17 -36
  22. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
  23. package/example/android/app/src/main/res/values/styles.xml +2 -2
  24. package/example/android/app/src/release/java/com/regula/dr/fullrfid/ReactNativeFlipper.java +20 -0
  25. package/example/android/build.gradle +7 -18
  26. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  27. package/example/android/gradle/wrapper/gradle-wrapper.properties +2 -1
  28. package/example/android/gradle.properties +42 -2
  29. package/example/android/gradlew +164 -105
  30. package/example/android/gradlew.bat +92 -89
  31. package/example/android/settings.gradle +2 -1
  32. package/example/app.json +1 -1
  33. package/example/ios/.xcode.env +11 -0
  34. package/example/ios/DocumentReader/AppDelegate.h +2 -4
  35. package/example/ios/DocumentReader/AppDelegate.mm +26 -0
  36. package/example/ios/DocumentReader/DocumentReader.entitlements +0 -1
  37. package/example/ios/DocumentReader/Images.xcassets/AppIcon.appiconset/Contents.json +30 -15
  38. package/example/ios/DocumentReader/Info.plist +8 -4
  39. package/example/ios/DocumentReader/main.m +2 -1
  40. package/example/ios/DocumentReader.xcodeproj/project.pbxproj +134 -96
  41. package/example/ios/DocumentReaderTests/DocumentReaderTests.m +14 -13
  42. package/example/ios/Podfile +45 -15
  43. package/example/jest.config.js +3 -0
  44. package/example/metro.config.js +18 -15
  45. package/example/package-lock.json +13091 -0
  46. package/example/package.json +32 -22
  47. package/example/tsconfig.json +3 -0
  48. package/index.d.ts +426 -3015
  49. package/index.js +253 -2954
  50. package/ios/RGLWJSONConstructor.h +8 -6
  51. package/ios/RGLWJSONConstructor.m +109 -92
  52. package/ios/RGLWRegulaConfig.h +2 -1
  53. package/ios/RGLWRegulaConfig.m +139 -41
  54. package/ios/RNRegulaDocumentReader.m +55 -42
  55. package/package.json +1 -1
  56. package/example/.buckconfig +0 -6
  57. package/example/.editorconfig +0 -3
  58. package/example/.flowconfig +0 -65
  59. package/example/.gitattributes +0 -3
  60. package/example/App.js +0 -399
  61. package/example/android/app/BUCK +0 -55
  62. package/example/android/app/_BUCK +0 -55
  63. package/example/android/app/build_defs.bzl +0 -19
  64. package/example/android/app/src/main/assets/index.android.bundle +0 -636
  65. package/example/android/app/src/main/res/drawable-mdpi/images_id.png +0 -0
  66. package/example/android/app/src/main/res/drawable-mdpi/images_portrait.png +0 -0
  67. package/example/android/app/src/main/res/drawable-mdpi/node_modules_reactnativecheckbox_img_ic_check_box.png +0 -0
  68. package/example/android/app/src/main/res/drawable-mdpi/node_modules_reactnativecheckbox_img_ic_check_box_outline_blank.png +0 -0
  69. package/example/android/app/src/main/res/drawable-mdpi/node_modules_reactnativecheckbox_img_ic_indeterminate_check_box.png +0 -0
  70. package/example/android/app/src/main/res/drawable-xhdpi/node_modules_reactnativecheckbox_img_ic_check_box.png +0 -0
  71. package/example/android/app/src/main/res/drawable-xhdpi/node_modules_reactnativecheckbox_img_ic_check_box_outline_blank.png +0 -0
  72. package/example/android/app/src/main/res/drawable-xxhdpi/node_modules_reactnativecheckbox_img_ic_check_box.png +0 -0
  73. package/example/android/app/src/main/res/drawable-xxhdpi/node_modules_reactnativecheckbox_img_ic_check_box_outline_blank.png +0 -0
  74. package/example/ios/DocumentReader/AppDelegate.m +0 -62
  75. package/example/ios/DocumentReader/Base.lproj/LaunchScreen.xib +0 -42
@@ -1,7 +1,12 @@
1
1
  package com.regula.documentreader;
2
2
 
3
+ import static com.regula.documentreader.api.DocumentReader.Instance;
4
+ import static com.regula.documentreader.Helpers.*;
5
+ import static com.regula.documentreader.JSONConstructor.*;
6
+
3
7
  import android.annotation.SuppressLint;
4
8
  import android.app.Activity;
9
+ import android.app.LocaleManager;
5
10
  import android.app.PendingIntent;
6
11
  import android.content.Context;
7
12
  import android.content.Intent;
@@ -12,9 +17,12 @@ import android.graphics.Bitmap;
12
17
  import android.nfc.NfcAdapter;
13
18
  import android.nfc.tech.IsoDep;
14
19
  import android.os.Build;
15
- import android.os.Bundle;
20
+ import android.os.LocaleList;
16
21
  import android.util.Base64;
17
22
 
23
+ import androidx.annotation.NonNull;
24
+ import androidx.annotation.Nullable;
25
+
18
26
  import com.facebook.react.bridge.ActivityEventListener;
19
27
  import com.facebook.react.bridge.Arguments;
20
28
  import com.facebook.react.bridge.LifecycleEventListener;
@@ -29,55 +37,56 @@ import com.regula.documentreader.api.completions.ICheckDatabaseUpdate;
29
37
  import com.regula.documentreader.api.completions.IDocumentReaderCompletion;
30
38
  import com.regula.documentreader.api.completions.IDocumentReaderInitCompletion;
31
39
  import com.regula.documentreader.api.completions.IDocumentReaderPrepareCompletion;
32
- import com.regula.documentreader.api.completions.IRfidPKDCertificateCompletion;
33
- import com.regula.documentreader.api.completions.IRfidReaderRequest;
34
- import com.regula.documentreader.api.completions.IRfidTASignatureCompletion;
35
- import com.regula.documentreader.api.completions.ITccParamsCompletion;
40
+ import com.regula.documentreader.api.completions.rfid.IRfidPKDCertificateCompletion;
41
+ import com.regula.documentreader.api.completions.rfid.IRfidReaderCompletion;
42
+ import com.regula.documentreader.api.completions.rfid.IRfidReaderRequest;
43
+ import com.regula.documentreader.api.completions.rfid.IRfidTASignatureCompletion;
44
+ import com.regula.documentreader.api.completions.rfid.ITccParamsCompletion;
36
45
  import com.regula.documentreader.api.enums.DocReaderAction;
46
+ import com.regula.documentreader.api.errors.DocReaderRfidException;
37
47
  import com.regula.documentreader.api.errors.DocumentReaderException;
38
48
  import com.regula.documentreader.api.internal.core.CoreScenarioUtil;
49
+ import com.regula.documentreader.api.internal.params.ImageInputParam;
50
+ import com.regula.documentreader.api.internal.parser.DocReaderResultsJsonParser;
39
51
  import com.regula.documentreader.api.params.BleDeviceConfig;
40
52
  import com.regula.documentreader.api.params.DocReaderConfig;
41
53
  import com.regula.documentreader.api.params.ImageInputData;
42
- import com.regula.documentreader.api.internal.params.ImageInputParam;
43
54
  import com.regula.documentreader.api.params.rfid.PKDCertificate;
44
55
  import com.regula.documentreader.api.params.rfid.authorization.PAResourcesIssuer;
45
56
  import com.regula.documentreader.api.params.rfid.authorization.TAChallenge;
46
57
  import com.regula.documentreader.api.results.DocumentReaderGraphicField;
58
+ import com.regula.documentreader.api.results.DocumentReaderNotification;
47
59
  import com.regula.documentreader.api.results.DocumentReaderResults;
48
60
  import com.regula.documentreader.api.results.DocumentReaderTextField;
49
- import com.regula.documentreader.api.internal.parser.DocReaderResultsJsonParser;
50
61
 
51
62
  import org.json.JSONArray;
52
63
  import org.json.JSONException;
53
64
  import org.json.JSONObject;
54
65
 
55
- import java.io.File;
56
66
  import java.io.IOException;
57
67
  import java.io.InputStream;
58
68
  import java.util.ArrayList;
59
69
  import java.util.List;
60
70
  import java.util.Locale;
61
71
 
62
- import static com.regula.documentreader.api.DocumentReader.Instance;
63
-
64
- import androidx.annotation.NonNull;
65
-
66
- @SuppressWarnings({"ConstantConditions", "RedundantSuppression", "MissingPermission"})
72
+ @SuppressWarnings({"ConstantConditions", "RedundantSuppression", "MissingPermission", "deprecation"})
67
73
  public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule implements ActivityEventListener, LifecycleEventListener {
68
- private final static String prepareDatabaseProgressChangeEvent = "prepareDatabaseProgressChangeEvent";
69
- private final static String completionEvent = "completionEvent";
70
- private final static String videoEncoderCompletionEvent = "videoEncoderCompletionEvent";
71
- private final static String rfidNotificationCompletionEvent = "rfidNotificationCompletionEvent";
74
+ private final static String eventDatabaseProgress = "prepareDatabaseProgressChangeEvent";
75
+ private final static String eventCompletion = "completionEvent";
76
+
77
+ private final static String rfidOnProgressEvent = "rfidNotificationCompletionEvent";
78
+ private final static String rfidOnChipDetectedEvent = "rfidOnChipDetectedEvent";
79
+ private final static String rfidOnRetryReadChipEvent = "rfidOnRetryReadChipEvent";
72
80
 
73
- private final static String paCertificateCompletionEvent = "paCertificateCompletionEvent";
74
- private final static String taCertificateCompletionEvent = "taCertificateCompletionEvent";
75
- private final static String taSignatureCompletionEvent = "taSignatureCompletionEvent";
81
+ private final static String eventPACertificateCompletion = "paCertificateCompletionEvent";
82
+ private final static String eventTACertificateCompletion = "taCertificateCompletionEvent";
83
+ private final static String eventTASignatureCompletion = "taSignatureCompletionEvent";
76
84
 
77
85
  private final static String bleOnServiceConnectedEvent = "bleOnServiceConnectedEvent";
78
86
  private final static String bleOnServiceDisconnectedEvent = "bleOnServiceDisconnectedEvent";
79
87
  private final static String bleOnDeviceReadyEvent = "bleOnDeviceReadyEvent";
80
88
 
89
+ private final static String eventVideoEncoderCompletion = "videoEncoderCompletionEvent";
81
90
  private final static String onCustomButtonTappedEvent = "onCustomButtonTappedEvent";
82
91
 
83
92
  private static int databaseDownloadProgress = 0;
@@ -101,6 +110,17 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
101
110
  return "RNRegulaDocumentReader";
102
111
  }
103
112
 
113
+ @ReactMethod
114
+ @SuppressWarnings("unused")
115
+ public void addListener(String eventName) {
116
+ }
117
+
118
+ @ReactMethod
119
+ @SuppressWarnings("unused")
120
+ public void removeListeners(Integer count) {
121
+ }
122
+
123
+
104
124
  private Context getContext() {
105
125
  return reactContext.getCurrentActivity();
106
126
  }
@@ -116,7 +136,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
116
136
  @Override
117
137
  public void onNewIntent(Intent intent) {
118
138
  if (intent.getAction() != null && intent.getAction().equals(NfcAdapter.ACTION_TECH_DISCOVERED) && backgroundRFIDEnabled)
119
- Instance().readRFID(IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)), getCompletion());
139
+ Instance().readRFID(IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)), getRfidReaderCompletion());
120
140
  }
121
141
 
122
142
  @Override
@@ -150,56 +170,17 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
150
170
  return (T) data.get(index);
151
171
  }
152
172
 
153
- static void send(ReactContext reactContext, String event, String data) {
173
+ private void sendEvent(String event, Object data) {
154
174
  WritableMap map = Arguments.createMap();
155
- map.putString("msg", data);
175
+ String result;
176
+ if (data instanceof JSONObject || data instanceof JSONArray)
177
+ result = data.toString();
178
+ else
179
+ result = (String) data;
180
+ map.putString("msg", result);
156
181
  reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event, map);
157
182
  }
158
183
 
159
- private void sendProgress(int progress) {
160
- send(reactContext, prepareDatabaseProgressChangeEvent, progress + "");
161
- }
162
-
163
- private void sendCompletion(int action, DocumentReaderResults results, DocumentReaderException error) {
164
- send(reactContext, completionEvent, JSONConstructor.generateCompletion(action, results, error, getContext()).toString());
165
- }
166
-
167
- private void sendVideoEncoderCompletion(String sessionId, File file) {
168
- send(reactContext, videoEncoderCompletionEvent, JSONConstructor.generateVideoEncoderCompletion(sessionId, file).toString());
169
- }
170
-
171
- private void sendIRfidNotificationCompletion(int notification, Bundle value) {
172
- send(reactContext, rfidNotificationCompletionEvent, JSONConstructor.generateRfidNotificationCompletion(notification, value).toString());
173
- }
174
-
175
- private void sendPACertificateCompletion(byte[] serialNumber, PAResourcesIssuer issuer) {
176
- send(reactContext, paCertificateCompletionEvent, JSONConstructor.generatePACertificateCompletion(serialNumber, issuer).toString());
177
- }
178
-
179
- private void sendTACertificateCompletion(String keyCAR) {
180
- send(reactContext, taCertificateCompletionEvent, keyCAR);
181
- }
182
-
183
- private void sendTASignatureCompletion(TAChallenge challenge) {
184
- send(reactContext, taSignatureCompletionEvent, JSONConstructor.generateTAChallenge(challenge).toString());
185
- }
186
-
187
- private void sendBleOnServiceConnectedEvent(boolean isBleManagerConnected) {
188
- send(reactContext, bleOnServiceConnectedEvent, isBleManagerConnected +"");
189
- }
190
-
191
- private void sendBleOnServiceDisconnectedEvent() {
192
- send(reactContext, bleOnServiceDisconnectedEvent, "");
193
- }
194
-
195
- private void sendBleOnDeviceReadyEvent() {
196
- send(reactContext, bleOnDeviceReadyEvent, "");
197
- }
198
-
199
- private void sendOnCustomButtonTappedEvent(int tag) {
200
- send(reactContext, onCustomButtonTappedEvent, tag + "");
201
- }
202
-
203
184
  private interface Callback {
204
185
  void success(Object o);
205
186
 
@@ -373,8 +354,11 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
373
354
  case "checkDatabaseUpdate":
374
355
  checkDatabaseUpdate(callback, args(0));
375
356
  break;
376
- case "getScenario":
377
- getScenario(callback, args(0));
357
+ case "scan":
358
+ scan(callback, args(0));
359
+ break;
360
+ case "recognize":
361
+ recognize(callback, args(0));
378
362
  break;
379
363
  case "recognizeImages":
380
364
  recognizeImages(callback, args(0));
@@ -436,9 +420,6 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
436
420
  case "recognizeImagesWithImageInputs":
437
421
  recognizeImagesWithImageInputs(callback, args(0));
438
422
  break;
439
- case "setOnCustomButtonTappedListener":
440
- setOnCustomButtonTappedListener(callback);
441
- break;
442
423
  case "setLanguage":
443
424
  setLanguage(callback, args(0));
444
425
  break;
@@ -545,15 +526,15 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
545
526
  BluetoothUtil.Companion.startBluetoothService(
546
527
  getActivity(),
547
528
  isBleManagerConnected -> {
548
- sendBleOnServiceConnectedEvent(isBleManagerConnected);
529
+ sendEvent(bleOnServiceConnectedEvent, isBleManagerConnected);
549
530
  return null;
550
531
  },
551
532
  () -> {
552
- sendBleOnServiceDisconnectedEvent();
533
+ sendEvent(bleOnServiceDisconnectedEvent, "");
553
534
  return null;
554
535
  },
555
536
  () -> {
556
- sendBleOnDeviceReadyEvent();
537
+ sendEvent(bleOnDeviceReadyEvent, "");
557
538
  return null;
558
539
  }
559
540
  );
@@ -570,12 +551,12 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
570
551
  }
571
552
 
572
553
  private void getAvailableScenarios(Callback callback) throws JSONException {
573
- callback.success(JSONConstructor.generateList(Instance().availableScenarios, JSONConstructor::generateDocumentReaderScenario).toString());
554
+ callback.success(generateList(Instance().availableScenarios, JSONConstructor::generateDocumentReaderScenario).toString());
574
555
  }
575
556
 
576
557
  private void parseCoreResults(Callback callback, String json) {
577
558
  DocumentReaderResults results = (DocumentReaderResults) DocReaderResultsJsonParser.parseCoreResults(json).get("docReaderResults");
578
- callback.success(JSONConstructor.generateDocumentReaderResults(results, getContext()).toString());
559
+ callback.success(generateDocumentReaderResults(results, getContext()).toString());
579
560
  }
580
561
 
581
562
  private void getAPIVersion(Callback callback) {
@@ -615,7 +596,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
615
596
  }
616
597
 
617
598
  private void setTCCParams(Callback callback, final JSONObject params) {
618
- Instance().setTccParams(JSONConstructor.TCCParamsFromJSON(params), getTCCParamsCompletion(callback));
599
+ Instance().setTccParams(TCCParamsFromJSON(params), getTCCParamsCompletion(callback));
619
600
  }
620
601
 
621
602
  private void deinitializeReader(Callback callback) {
@@ -636,11 +617,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
636
617
  }
637
618
 
638
619
  private void selectedScenario(Callback callback) {
639
- callback.success(JSONConstructor.generateCoreDetailedScenario(CoreScenarioUtil.getScenario(Instance().processParams().getScenario())).toString());
640
- }
641
-
642
- private void getScenario(Callback callback, String scenario) {
643
- callback.success(JSONConstructor.generateCoreDetailedScenario(CoreScenarioUtil.getScenario(scenario)).toString());
620
+ callback.success(generateDocumentReaderScenario(CoreScenarioUtil.getScenario(Instance().processParams().getScenario())).toString());
644
621
  }
645
622
 
646
623
  private void getLicenseExpiryDate(Callback callback) {
@@ -654,7 +631,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
654
631
  if (Instance().license().getCountryFilter() == null)
655
632
  callback.error("null");
656
633
  else
657
- callback.success(JSONConstructor.generateList(Instance().license().getCountryFilter()).toString());
634
+ callback.success(generateList(Instance().license().getCountryFilter()).toString());
658
635
  }
659
636
 
660
637
  private void licenseIsRfidAvailable(Callback callback) {
@@ -675,7 +652,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
675
652
 
676
653
  private void initializeReader(Callback callback, JSONObject config) {
677
654
  if (!Instance().isReady())
678
- Instance().initializeReader(getContext(), JSONConstructor.DocReaderConfigFromJSON(config), getInitCompletion(callback));
655
+ Instance().initializeReader(getContext(), DocReaderConfigFromJSON(config), getInitCompletion(callback));
679
656
  else
680
657
  callback.success("already initialized");
681
658
  }
@@ -704,6 +681,16 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
704
681
  callback.success();
705
682
  }
706
683
 
684
+ private void scan(@SuppressWarnings("unused") Callback callback, JSONObject config) {
685
+ stopBackgroundRFID();
686
+ Instance().showScanner(getContext(), ScannerConfigFromJSON(config), getCompletion());
687
+ }
688
+
689
+ private void recognize(@SuppressWarnings("unused") Callback callback, JSONObject config) {
690
+ stopBackgroundRFID();
691
+ Instance().recognize(getContext(), RecognizeConfigFromJSON(config), getCompletion());
692
+ }
693
+
707
694
  private void recognizeImageWithOpts(Callback callback, String base64Image, final JSONObject opts) throws JSONException {
708
695
  RegulaConfig.setConfig(Instance(), opts, getContext());
709
696
  recognizeImage(callback, base64Image);
@@ -723,7 +710,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
723
710
  stopBackgroundRFID();
724
711
  Bitmap[] images = new Bitmap[base64Images.length()];
725
712
  for (int i = 0; i < images.length; i++)
726
- images[i] = Helpers.bitmapFromBase64(base64Images.getString(i));
713
+ images[i] = bitmapFromBase64(base64Images.getString(i));
727
714
  Instance().recognizeImages(images, getCompletion());
728
715
  }
729
716
 
@@ -731,7 +718,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
731
718
  stopBackgroundRFID();
732
719
  ImageInputData[] images = new ImageInputData[base64Images.length()];
733
720
  for (int i = 0; i < images.length; i++)
734
- images[i] = JSONConstructor.ImageInputDataFromJSON(base64Images.getJSONObject(i));
721
+ images[i] = ImageInputDataFromJSON(base64Images.getJSONObject(i));
735
722
  Instance().recognizeImages(images, getCompletion());
736
723
  }
737
724
 
@@ -795,12 +782,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
795
782
 
796
783
  private void startRFIDReader(@SuppressWarnings("unused") Callback callback) {
797
784
  stopBackgroundRFID();
798
- IRfidReaderRequest delegate = null;
799
- if (rfidDelegate == RFIDDelegate.NO_PA)
800
- delegate = getIRfidReaderRequestNoPA();
801
- if (rfidDelegate == RFIDDelegate.FULL)
802
- delegate = getIRfidReaderRequest();
803
- Instance().startRFIDReader(getContext(), getCompletion(), delegate, this::sendIRfidNotificationCompletion);
785
+ Instance().startRFIDReader(getContext(), getRfidReaderCompletion(), getRfidReaderRequest());
804
786
  }
805
787
 
806
788
  private void stopRFIDReader(Callback callback) {
@@ -836,18 +818,18 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
836
818
  startForegroundDispatch(getActivity());
837
819
  }
838
820
 
839
- private void setOnCustomButtonTappedListener(Callback callback) {
840
- Instance().setOnClickListener(view -> sendOnCustomButtonTappedEvent((int) view.getTag()));
841
- callback.success();
842
- }
843
-
844
821
  private void setLanguage(Callback callback, String language) {
845
- Locale locale = new Locale(language);
846
- Locale.setDefault(locale);
847
- Resources resources = getContext().getResources();
848
- Configuration config = resources.getConfiguration();
849
- config.setLocale(locale);
850
- resources.updateConfiguration(config, resources.getDisplayMetrics());
822
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
823
+ LocaleManager localeManager = (LocaleManager) getContext().getSystemService(Context.LOCALE_SERVICE);
824
+ localeManager.setApplicationLocales(new LocaleList(Locale.forLanguageTag(language)));
825
+ } else {
826
+ Locale locale = new Locale(language);
827
+ Locale.setDefault(locale);
828
+ Resources resources = getContext().getResources();
829
+ Configuration config = resources.getConfiguration();
830
+ config.setLocale(locale);
831
+ resources.updateConfiguration(config, resources.getDisplayMetrics());
832
+ }
851
833
  callback.success();
852
834
  }
853
835
 
@@ -929,7 +911,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
929
911
  if (result == null)
930
912
  callback.success(null);
931
913
  else
932
- callback.success(JSONConstructor.generateDocumentReaderTextField(result, getContext()).toString());
914
+ callback.success(generateDocumentReaderTextField(result, getContext()).toString());
933
915
  }
934
916
 
935
917
  private void textFieldByTypeLcid(Callback callback, String raw, int fieldType, int lcid) {
@@ -938,7 +920,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
938
920
  if (result == null)
939
921
  callback.success(null);
940
922
  else
941
- callback.success(JSONConstructor.generateDocumentReaderTextField(result, getContext()).toString());
923
+ callback.success(generateDocumentReaderTextField(result, getContext()).toString());
942
924
  }
943
925
 
944
926
  private void graphicFieldByTypeSource(Callback callback, String raw, int fieldType, int source) {
@@ -947,7 +929,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
947
929
  if (result == null)
948
930
  callback.success(null);
949
931
  else
950
- callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
932
+ callback.success(generateDocumentReaderGraphicField(result, getContext()).toString());
951
933
  }
952
934
 
953
935
  private void graphicFieldByTypeSourcePageIndex(Callback callback, String raw, int fieldType, int source, int pageIndex) {
@@ -956,7 +938,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
956
938
  if (result == null)
957
939
  callback.success(null);
958
940
  else
959
- callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
941
+ callback.success(generateDocumentReaderGraphicField(result, getContext()).toString());
960
942
  }
961
943
 
962
944
  private void graphicFieldByTypeSourcePageIndexLight(Callback callback, String raw, int fieldType, int source, int pageIndex, int light) {
@@ -965,34 +947,34 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
965
947
  if (result == null)
966
948
  callback.success(null);
967
949
  else
968
- callback.success(JSONConstructor.generateDocumentReaderGraphicField(result, getContext()).toString());
950
+ callback.success(generateDocumentReaderGraphicField(result, getContext()).toString());
969
951
  }
970
952
 
971
953
  private void graphicFieldImageByType(Callback callback, String raw, int fieldType) {
972
954
  DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
973
- callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType)));
955
+ callback.success(bitmapToBase64String(results.getGraphicFieldImageByType(fieldType)));
974
956
  }
975
957
 
976
958
  private void graphicFieldImageByTypeSource(Callback callback, String raw, int fieldType, int source) {
977
959
  DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
978
- callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source)));
960
+ callback.success(bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source)));
979
961
  }
980
962
 
981
963
  private void graphicFieldImageByTypeSourcePageIndex(Callback callback, String raw, int fieldType, int source, int pageIndex) {
982
964
  DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
983
- callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex)));
965
+ callback.success(bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex)));
984
966
  }
985
967
 
986
968
  private void graphicFieldImageByTypeSourcePageIndexLight(Callback callback, String raw, int fieldType, int source, int pageIndex, int light) {
987
969
  DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
988
- callback.success(Helpers.bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex, light)));
970
+ callback.success(bitmapToBase64String(results.getGraphicFieldImageByType(fieldType, source, pageIndex, light)));
989
971
  }
990
972
 
991
973
  @SuppressLint("WrongConstant")
992
974
  private void containers(Callback callback, String raw, JSONArray resultType) {
993
975
  try {
994
976
  DocumentReaderResults results = DocumentReaderResults.fromRawResults(raw);
995
- callback.success(results.getContainers(JSONConstructor.intArrayFromJSON(resultType)));
977
+ callback.success(results.getContainers(intArrayFromJSON(resultType)));
996
978
  } catch (JSONException e) {
997
979
  e.printStackTrace();
998
980
  callback.error(e.toString());
@@ -1032,24 +1014,50 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
1032
1014
 
1033
1015
  private IDocumentReaderCompletion getCompletion() {
1034
1016
  return (action, results, error) -> {
1035
- sendCompletion(action, results, error);
1017
+ sendEvent(eventCompletion, generateCompletion(action, results, error, getContext()));
1036
1018
  if (action == DocReaderAction.ERROR || action == DocReaderAction.CANCEL || (action == DocReaderAction.COMPLETE && results != null && results.rfidResult == 1))
1037
1019
  stopBackgroundRFID();
1038
1020
  };
1039
1021
  }
1040
1022
 
1023
+ private IRfidReaderCompletion getRfidReaderCompletion() {
1024
+ return new IRfidReaderCompletion() {
1025
+ @Override
1026
+ public void onCompleted(int action, @Nullable DocumentReaderResults results, @Nullable DocumentReaderException error) {
1027
+ sendEvent(eventCompletion, generateCompletion(action, results, error, getContext()));
1028
+ if (action == DocReaderAction.ERROR || action == DocReaderAction.CANCEL || (action == DocReaderAction.COMPLETE && results != null && results.rfidResult == 1))
1029
+ stopBackgroundRFID();
1030
+ }
1031
+
1032
+ @Override
1033
+ public void onChipDetected() {
1034
+ sendEvent(rfidOnChipDetectedEvent, "");
1035
+ }
1036
+
1037
+ @Override
1038
+ public void onRetryReadChip(@NonNull DocReaderRfidException error) {
1039
+ sendEvent(rfidOnRetryReadChipEvent, generateRegulaException(error));
1040
+ }
1041
+
1042
+ @Override
1043
+ public void onProgress(@Nullable DocumentReaderNotification notification) {
1044
+ sendEvent(rfidOnProgressEvent, generateDocumentReaderNotification(notification));
1045
+ }
1046
+ };
1047
+ }
1048
+
1041
1049
  private IDocumentReaderPrepareCompletion getPrepareCompletion(Callback callback) {
1042
1050
  return new IDocumentReaderPrepareCompletion() {
1043
1051
  @Override
1044
1052
  public void onPrepareProgressChanged(int progress) {
1045
1053
  if (progress != databaseDownloadProgress) {
1046
- sendProgress(progress);
1054
+ sendEvent(eventDatabaseProgress, progress + "");
1047
1055
  databaseDownloadProgress = progress;
1048
1056
  }
1049
1057
  }
1050
1058
 
1051
1059
  @Override
1052
- public void onPrepareCompleted(boolean status, DocumentReaderException error) {
1060
+ public void onPrepareCompleted(boolean status, @Nullable DocumentReaderException error) {
1053
1061
  if (status)
1054
1062
  callback.success("database prepared");
1055
1063
  else
@@ -1061,7 +1069,8 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
1061
1069
  private IDocumentReaderInitCompletion getInitCompletion(Callback callback) {
1062
1070
  return (success, error) -> {
1063
1071
  if (success) {
1064
- Instance().setVideoEncoderCompletion(this::sendVideoEncoderCompletion);
1072
+ Instance().setVideoEncoderCompletion((sessionId, file) -> sendEvent(eventVideoEncoderCompletion, generateVideoEncoderCompletion(sessionId, file)));
1073
+ Instance().setOnClickListener(view -> sendEvent(onCustomButtonTappedEvent, view.getTag()));
1065
1074
  callback.success("init completed");
1066
1075
  } else
1067
1076
  callback.error("Init failed:" + error);
@@ -1069,7 +1078,7 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
1069
1078
  }
1070
1079
 
1071
1080
  private ICheckDatabaseUpdate getCheckDatabaseUpdateCompletion(Callback callback) {
1072
- return (database) -> callback.success(JSONConstructor.generateDocReaderDocumentsDatabase(database));
1081
+ return (database) -> callback.success(generateDocReaderDocumentsDatabase(database));
1073
1082
  }
1074
1083
 
1075
1084
  private ITccParamsCompletion getTCCParamsCompletion(Callback callback) {
@@ -1086,20 +1095,19 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
1086
1095
  @Override
1087
1096
  public void onRequestPACertificates(byte[] serialNumber, PAResourcesIssuer issuer, @NonNull IRfidPKDCertificateCompletion completion) {
1088
1097
  paCertificateCompletion = completion;
1089
- completion.onCertificatesReceived(new PKDCertificate[0]);
1090
- sendPACertificateCompletion(serialNumber, issuer);
1098
+ sendEvent(eventPACertificateCompletion, generatePACertificateCompletion(serialNumber, issuer));
1091
1099
  }
1092
1100
 
1093
1101
  @Override
1094
1102
  public void onRequestTACertificates(String keyCAR, @NonNull IRfidPKDCertificateCompletion completion) {
1095
1103
  taCertificateCompletion = completion;
1096
- sendTACertificateCompletion(keyCAR);
1104
+ sendEvent(eventTACertificateCompletion, keyCAR);
1097
1105
  }
1098
1106
 
1099
1107
  @Override
1100
1108
  public void onRequestTASignature(TAChallenge challenge, @NonNull IRfidTASignatureCompletion completion) {
1101
1109
  taSignatureCompletion = completion;
1102
- sendTASignatureCompletion(challenge);
1110
+ sendEvent(eventTASignatureCompletion, generateTAChallenge(challenge));
1103
1111
  }
1104
1112
  };
1105
1113
  }
@@ -1115,17 +1123,26 @@ public class RNRegulaDocumentReaderModule extends ReactContextBaseJavaModule imp
1115
1123
  @Override
1116
1124
  public void onRequestTACertificates(String keyCAR, @NonNull IRfidPKDCertificateCompletion completion) {
1117
1125
  taCertificateCompletion = completion;
1118
- sendTACertificateCompletion(keyCAR);
1126
+ sendEvent(eventTACertificateCompletion, keyCAR);
1119
1127
  }
1120
1128
 
1121
1129
  @Override
1122
1130
  public void onRequestTASignature(TAChallenge challenge, @NonNull IRfidTASignatureCompletion completion) {
1123
1131
  taSignatureCompletion = completion;
1124
- sendTASignatureCompletion(challenge);
1132
+ sendEvent(eventTASignatureCompletion, generateTAChallenge(challenge));
1125
1133
  }
1126
1134
  };
1127
1135
  }
1128
1136
 
1137
+ private IRfidReaderRequest getRfidReaderRequest() {
1138
+ IRfidReaderRequest delegate = null;
1139
+ if (rfidDelegate == RFIDDelegate.NO_PA)
1140
+ delegate = getIRfidReaderRequestNoPA();
1141
+ if (rfidDelegate == RFIDDelegate.FULL)
1142
+ delegate = getIRfidReaderRequest();
1143
+ return delegate;
1144
+ }
1145
+
1129
1146
  private static int rfidDelegate = RFIDDelegate.NULL;
1130
1147
 
1131
1148
  private static class RFIDDelegate {