anyline-ocr-react-native-module 44.1.1 → 46.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/anyline/reactnative/AnylineSDKPlugin.java +38 -2
  3. package/android/src/main/java/com/anyline/reactnative/ScanActivity.java +1 -1
  4. package/android/src/main/res/layout/activity_scan.xml +18 -6
  5. package/ios/ALJsonUIConfiguration.h +1 -1
  6. package/ios/ALNFCScanViewController.m +77 -70
  7. package/ios/ALPluginScanViewController.m +8 -5
  8. package/ios/AnylineReact.podspec +1 -1
  9. package/ios/AnylineSDKPlugin.m +80 -41
  10. package/package.json +8 -7
  11. package/.idea/modules.xml +0 -8
  12. package/.idea/plugin.iml +0 -9
  13. package/.idea/vcs.xml +0 -6
  14. package/android/.gradle/6.7/executionHistory/executionHistory.lock +0 -0
  15. package/android/.gradle/6.7/fileChanges/last-build.bin +0 -0
  16. package/android/.gradle/6.7/fileHashes/fileHashes.bin +0 -0
  17. package/android/.gradle/6.7/fileHashes/fileHashes.lock +0 -0
  18. package/android/.gradle/6.7/gc.properties +0 -0
  19. package/android/.gradle/7.0/dependencies-accessors/dependencies-accessors.lock +0 -0
  20. package/android/.gradle/7.0/dependencies-accessors/gc.properties +0 -0
  21. package/android/.gradle/7.0/executionHistory/executionHistory.lock +0 -0
  22. package/android/.gradle/7.0/fileChanges/last-build.bin +0 -0
  23. package/android/.gradle/7.0/fileHashes/fileHashes.bin +0 -0
  24. package/android/.gradle/7.0/fileHashes/fileHashes.lock +0 -0
  25. package/android/.gradle/7.0/gc.properties +0 -0
  26. package/android/.gradle/7.3/checksums/checksums.lock +0 -0
  27. package/android/.gradle/7.3/dependencies-accessors/dependencies-accessors.lock +0 -0
  28. package/android/.gradle/7.3/dependencies-accessors/gc.properties +0 -0
  29. package/android/.gradle/7.3/fileChanges/last-build.bin +0 -0
  30. package/android/.gradle/7.3/fileHashes/fileHashes.lock +0 -0
  31. package/android/.gradle/7.3/gc.properties +0 -0
  32. package/android/.gradle/7.4/checksums/checksums.lock +0 -0
  33. package/android/.gradle/7.4/checksums/md5-checksums.bin +0 -0
  34. package/android/.gradle/7.4/checksums/sha1-checksums.bin +0 -0
  35. package/android/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
  36. package/android/.gradle/7.4/dependencies-accessors/gc.properties +0 -0
  37. package/android/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
  38. package/android/.gradle/7.4/fileChanges/last-build.bin +0 -0
  39. package/android/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
  40. package/android/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
  41. package/android/.gradle/7.4/fileHashes/resourceHashesCache.bin +0 -0
  42. package/android/.gradle/7.4/gc.properties +0 -0
  43. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  44. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  45. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  46. package/android/.gradle/checksums/checksums.lock +0 -0
  47. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  48. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  49. package/android/.gradle/configuration-cache/gc.properties +0 -0
  50. package/android/.gradle/vcs-1/gc.properties +0 -0
  51. package/android/.idea/compiler.xml +0 -6
  52. package/android/.idea/gradle.xml +0 -19
  53. package/android/.idea/jarRepositories.xml +0 -40
  54. package/android/.idea/misc.xml +0 -10
  55. package/android/.idea/vcs.xml +0 -7
  56. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  57. package/android/local.properties +0 -8
@@ -69,7 +69,7 @@ repositories {
69
69
 
70
70
  dependencies {
71
71
  implementation fileTree(dir: "libs", include: ["*.jar"])
72
- implementation 'io.anyline:anylinesdk:44.1.0'
72
+ implementation 'io.anyline:anylinesdk:46.1.0'
73
73
  implementation "com.facebook.react:react-native:+" // from node_modules
74
74
  implementation("com.google.android.material:material:1.4.0-rc01")
75
75
  implementation 'androidx.multidex:multidex:2.0.1'
@@ -65,6 +65,16 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
65
65
  promise.resolve(at.nineyards.anyline.BuildConfig.VERSION_NAME);
66
66
  }
67
67
 
68
+ @ReactMethod
69
+ public void licenseKeyExpiryDate(final Promise promise) {
70
+ try {
71
+ promise.resolve(String.valueOf(AnylineSdk.getExpiryDate()));
72
+ } catch (LicenseException e) {
73
+ e.printStackTrace();
74
+ promise.reject(E_ERROR, e.getMessage());
75
+ }
76
+ }
77
+
68
78
  @ReactMethod
69
79
  @Deprecated
70
80
  public void setupScanViewWithConfigJson(String config, String scanMode, Callback onResultReact, Callback onErrorReact) {
@@ -98,6 +108,22 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
98
108
  }
99
109
  }
100
110
 
111
+ @ReactMethod
112
+ public void setupAnylineSDK(String license, final Promise promise) {
113
+ try {
114
+ AnylineSdk.init(license, reactContext);
115
+ this.license = license;
116
+ if (promise != null) {
117
+ promise.resolve(true);
118
+ }
119
+ } catch (LicenseException e) {
120
+ e.printStackTrace();
121
+ if (promise != null) {
122
+ promise.reject(E_ERROR, e.getMessage());
123
+ }
124
+ }
125
+ }
126
+
101
127
  @ReactMethod
102
128
  public void initSdk(String license) {
103
129
  try {
@@ -182,7 +208,18 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
182
208
 
183
209
  configObject = new JSONObject(this.config);
184
210
 
185
- license = configObject.get("license").toString();
211
+ if (this.license == null || this.license.isEmpty()) {
212
+ if (configObject.has("license")) {
213
+ //if there is a license on JSON config then this license will be
214
+ //used to init or re-init the SDK
215
+ AnylineSdk.init(configObject.getString("license"), reactContext);
216
+ license = configObject.get("license").toString();
217
+ }
218
+ else {
219
+ throw new JSONException("No License in config. Please check your configuration.");
220
+ }
221
+ }
222
+
186
223
  JSONObject optionsJSONObject = configObject.optJSONObject("options");
187
224
 
188
225
  if (optionsJSONObject != null) {
@@ -198,7 +235,6 @@ class AnylineSDKPlugin extends ReactContextBaseJavaModule implements ResultRepor
198
235
  ResultReporter.setListener(this);
199
236
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
200
237
 
201
- AnylineSdk.init(configObject.getString("license"), reactContext);
202
238
  reactContext.startActivityForResult(intent, 1111, intent.getExtras());
203
239
  }
204
240
 
@@ -288,7 +288,7 @@ public class ScanActivity extends AppCompatActivity {
288
288
 
289
289
  if (feedbackConfig != null) {
290
290
  CoordinatorLayout.LayoutParams feedbackLayoutParams =
291
- new CoordinatorLayout.LayoutParams(rect.width(), scanView.getHeight());
291
+ new CoordinatorLayout.LayoutParams(rect.width(), scanView.getHeight() - rect.bottom);
292
292
  feedbackLayoutParams.setMargins(rect.left, rect.bottom, rect.right, scanView.getBottom());
293
293
  binding.layoutBrightDistanceFeedback.setVisibility(View.VISIBLE);
294
294
  binding.layoutBrightDistanceFeedback.setLayoutParams(feedbackLayoutParams);
@@ -52,21 +52,33 @@
52
52
  android:layout_height="wrap_content"
53
53
  android:visibility="gone"
54
54
  android:layout_centerHorizontal="true"
55
- android:gravity="center_horizontal"
56
- android:paddingTop="100px"
55
+ android:layout_gravity="top"
56
+ android:gravity="top|center_horizontal"
57
+ android:paddingTop="20dp"
58
+ android:paddingBottom="5dp"
57
59
  android:orientation="vertical">
58
60
  <ImageView
59
61
  android:id="@+id/imageview_bright_distance_feedback"
60
- android:layout_width="50dp"
61
- android:layout_height="50dp"
62
- android:layout_marginVertical="5dp" />
62
+ android:layout_width="wrap_content"
63
+ android:layout_height="wrap_content"
64
+ android:gravity="top|center_horizontal"
65
+ android:scaleType="centerInside"
66
+ android:layout_weight="2"
67
+ android:layout_marginVertical="5dp"/>
63
68
  <TextView
64
69
  android:id="@+id/textview_bright_distance_feedback"
65
70
  android:layout_width="wrap_content"
66
71
  android:layout_height="wrap_content"
72
+ android:gravity="top|center_horizontal"
67
73
  android:text=""
68
74
  android:textColor="@color/white"
69
- android:textSize="14sp" />
75
+ android:textSize="14sp"
76
+ android:layout_weight="0"/>
77
+ <LinearLayout
78
+ android:layout_width="match_parent"
79
+ android:layout_height="wrap_content"
80
+ android:layout_weight="3"
81
+ android:orientation="vertical"/>
70
82
  </LinearLayout>
71
83
 
72
84
  <ImageView
@@ -41,7 +41,7 @@ typedef NS_ENUM(NSUInteger, ALButtonType) {
41
41
  @property (nonatomic, assign) CGFloat segmentXPositionOffset;
42
42
  @property (nonatomic, assign) CGFloat segmentYPositionOffset;
43
43
 
44
- @property (nonatomic, strong) NSString *labelText;
44
+ @property (nonatomic, copy) NSString *labelText;
45
45
  @property (nonatomic, assign) CGFloat labelSize;
46
46
  @property (nonatomic, strong) UIColor *labelColor;
47
47
  @property (nonatomic, assign) CGFloat labelXPositionOffset;
@@ -69,62 +69,69 @@ API_AVAILABLE(ios(13.0))
69
69
 
70
70
  - (void)viewDidLoad {
71
71
  [super viewDidLoad];
72
-
73
- // NOTE: NFCDetector can throw an exception if the AnylineSDK isn't initialized first
74
- // as it will check the scope value of the license
75
- NSError *error = nil;
76
- [AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
77
- if ([self showErrorAlertIfNeeded:error]) {
78
- return;
72
+
73
+ // NOTE: NFCDetector can throw an exception if the AnylineSDK isn't initialized
74
+ // first as it will check the scope value of the license.
75
+ //
76
+ // If already initialized, happily move along. Otherwise, make a license key
77
+ // check here.
78
+ NSError *error;
79
+ BOOL isInitialized = [ALLicenseUtil sharedInstance].isLicenseValid;
80
+ if (!isInitialized) {
81
+ [AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
82
+ if ([self showErrorAlertIfNeeded:error]) {
83
+ return;
84
+ }
79
85
  }
80
-
86
+
81
87
  if (@available(iOS 13.0, *)) {
82
88
  self.nfcDetector = [self.class getNFCDetectorWithDelegate:self error:&error];
83
89
  } else {
84
90
  error = [ALPluginHelper errorWithMessage:@"iOS 13.0 or newer is required to scan with MRZ / NFC."];
85
91
  }
92
+
86
93
  if ([self showErrorAlertIfNeeded:error]) {
87
94
  return;
88
95
  }
89
-
96
+
90
97
  [self.view addSubview:self.scanView];
91
-
98
+
92
99
  self.resultDict = [[NSMutableDictionary alloc] init];
93
100
  self.detectedBarcodes = [NSMutableArray array];
94
-
101
+
95
102
  self.scanView = [ALScanViewFactory withJSONDictionary:self.config delegate:self error:&error];
96
103
  self.scanView.delegate = self;
97
-
104
+
98
105
  [self configureMRZPlugin];
99
-
106
+
100
107
  if ([self showErrorAlertIfNeeded:error]) {
101
108
  return;
102
109
  }
103
-
110
+
104
111
  self.mrzScanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
105
-
112
+
106
113
  self.scanView.supportedNativeBarcodeFormats = self.uiConfig.nativeBarcodeFormats;
107
114
  self.scanView.delegate = self;
108
115
  self.detectedBarcodes = [NSMutableArray array];
109
116
 
110
117
  [self.view addSubview:self.scanView];
111
-
118
+
112
119
  self.scanView.translatesAutoresizingMaskIntoConstraints = false;
113
120
  [self.scanView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor].active = YES;
114
121
  [self.scanView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor].active = YES;
115
122
  [self.scanView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor].active = YES;
116
123
  [self.scanView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor].active = YES;
117
-
124
+
118
125
  [self.scanView startCamera];
119
-
126
+
120
127
  [self setupHintView];
121
-
128
+
122
129
  self.doneButton = [ALPluginHelper createButtonForViewController:self config:self.uiConfig];
123
130
  }
124
131
 
125
132
  - (void)viewDidAppear:(BOOL)animated {
126
133
  [super viewDidAppear:animated];
127
-
134
+
128
135
  NSError *error;
129
136
  [self startMRZScanning:&error];
130
137
  [self showErrorAlertIfNeeded:error];
@@ -146,41 +153,41 @@ API_AVAILABLE(ios(13.0))
146
153
  }
147
154
 
148
155
  - (void)configureMRZPlugin {
149
-
156
+
150
157
  ALScanViewPlugin *scanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
151
158
  if (![scanViewPlugin isKindOfClass:ALScanViewPlugin.class]) {
152
159
  return;
153
160
  }
154
-
161
+
155
162
  ALCutoutConfig *cutoutConfig = scanViewPlugin.scanViewPluginConfig.cutoutConfig;
156
163
  ALScanFeedbackConfig *scanFeedbackConfig = scanViewPlugin.scanViewPluginConfig.scanFeedbackConfig;
157
-
164
+
158
165
  ALPluginConfig *pluginConfig = scanViewPlugin.scanPlugin.scanPluginConfig.pluginConfig;
159
166
  ALMrzConfig *mrzConfig = pluginConfig.mrzConfig;
160
-
167
+
161
168
  // a bit lengthy but this is how you properly change the config (mrzFieldScanOptions and mrzMinFieldConfidences)
162
169
  // taking into account the readonly config fields
163
170
  mrzConfig.mrzFieldScanOptions = [[ALMrzFieldScanOptions alloc] init];
164
-
171
+
165
172
  mrzConfig.mrzFieldScanOptions.vizAddress = ALMrzScanOption.mrzScanOptionDefault;
166
173
  mrzConfig.mrzFieldScanOptions.vizDateOfIssue = ALMrzScanOption.mrzScanOptionDefault;
167
174
  mrzConfig.mrzFieldScanOptions.vizSurname = ALMrzScanOption.mrzScanOptionDefault;
168
175
  mrzConfig.mrzFieldScanOptions.vizGivenNames = ALMrzScanOption.mrzScanOptionDefault;
169
176
  mrzConfig.mrzFieldScanOptions.vizDateOfBirth = ALMrzScanOption.mrzScanOptionDefault;
170
177
  mrzConfig.mrzFieldScanOptions.vizDateOfExpiry = ALMrzScanOption.mrzScanOptionDefault;
171
-
178
+
172
179
  mrzConfig.mrzMinFieldConfidences = [[ALMrzMinFieldConfidences alloc] init];
173
180
  mrzConfig.mrzMinFieldConfidences.documentNumber = @(90);
174
181
  mrzConfig.mrzMinFieldConfidences.dateOfBirth = @(90);
175
182
  mrzConfig.mrzMinFieldConfidences.dateOfExpiry = @(90);
176
-
183
+
177
184
  NSError *error;
178
185
  ALScanViewPluginConfig *scanViewPluginConfig = [ALScanViewPluginConfig withScanPluginConfig:[ALScanPluginConfig withPluginConfig:pluginConfig]
179
186
  cutoutConfig:cutoutConfig
180
187
  scanFeedbackConfig:scanFeedbackConfig];
181
188
  ALScanViewPlugin *updatedScanViewPlugin = [[ALScanViewPlugin alloc] initWithConfig:scanViewPluginConfig error:&error];
182
189
  [self.scanView setScanViewPlugin:updatedScanViewPlugin error:&error];
183
-
190
+
184
191
  // the delegate binding was lost when you recreated the ScanPlugin it so you have to bring it back here
185
192
  scanViewPlugin = (ALScanViewPlugin *)self.scanView.scanViewPlugin;
186
193
  scanViewPlugin.scanPlugin.delegate = self;
@@ -189,30 +196,30 @@ API_AVAILABLE(ios(13.0))
189
196
  // MARK: - ALIDPluginDelegate
190
197
 
191
198
  - (void)scanPlugin:(ALScanPlugin *)scanPlugin resultReceived:(ALScanResult *)scanResult {
192
-
199
+
193
200
  CGFloat compressionQuality = self.quality / 100.0f;
194
-
201
+
195
202
  // ACO just a failsafe for when cancelOnResult is not true
196
203
  [self stopMRZScanning];
197
-
204
+
198
205
  self.resultDict = [NSMutableDictionary dictionaryWithDictionary:scanResult.resultDictionary];
199
-
206
+
200
207
  NSString *imagePath = [ALPluginHelper saveImageToFileSystem:scanResult.croppedImage
201
208
  compressionQuality:compressionQuality];
202
209
  self.resultDict[@"imagePath"] = imagePath;
203
-
210
+
204
211
  imagePath = [ALPluginHelper saveImageToFileSystem:scanResult.fullSizeImage
205
212
  compressionQuality:compressionQuality];
206
-
213
+
207
214
  self.resultDict[@"fullImagePath"] = imagePath;
208
-
215
+
209
216
  ALMrzResult *MRZResult = scanResult.pluginResult.mrzResult;
210
217
  NSString *passportNumber = [MRZResult.documentNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
211
-
218
+
212
219
  self.dateOfBirth = [ALPluginHelper formattedStringToDate:MRZResult.dateOfBirthObject];
213
-
220
+
214
221
  self.dateOfExpiry = [ALPluginHelper formattedStringToDate:MRZResult.dateOfExpiryObject];
215
-
222
+
216
223
  NSMutableString *passportNumberForNFC = [passportNumber mutableCopy];
217
224
  NSRange passportNumberRange = [MRZResult.mrzString rangeOfString:passportNumber];
218
225
  if (passportNumberRange.location != NSNotFound) {
@@ -220,21 +227,21 @@ API_AVAILABLE(ios(13.0))
220
227
  [passportNumberForNFC appendString:@"<"];
221
228
  }
222
229
  }
223
-
230
+
224
231
  self.passportNumberForNFC = passportNumberForNFC;
225
-
232
+
226
233
  [self.nfcDetector startNfcDetectionWithPassportNumber:self.passportNumberForNFC
227
234
  dateOfBirth:self.dateOfBirth
228
235
  expirationDate:self.dateOfExpiry];
229
236
  }
230
237
 
231
238
  - (void)handleResult:(id _Nullable)resultObj {
232
-
239
+
233
240
  NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionaryWithDictionary:resultObj];
234
241
  if (self.detectedBarcodes.count) {
235
242
  resultDictionary[@"nativeBarcodesDetected"] = self.detectedBarcodes;
236
243
  }
237
-
244
+
238
245
  NSObject<ALScanViewPluginBase> *scanViewPluginBase = self.scanView.scanViewPlugin;
239
246
  if ([scanViewPluginBase isKindOfClass:ALScanViewPlugin.class]) {
240
247
  ALScanViewPlugin *scanViewPlugin = (ALScanViewPlugin *)scanViewPluginBase;
@@ -251,7 +258,7 @@ API_AVAILABLE(ios(13.0))
251
258
 
252
259
  - (void)doneButtonPressed:(id)sender {
253
260
  [self stopMRZScanning];
254
-
261
+
255
262
  __weak __block typeof(self) weakSelf = self;
256
263
  [self dismissViewControllerAnimated:YES completion:^{
257
264
  weakSelf.callback(nil, @"Canceled");
@@ -261,11 +268,11 @@ API_AVAILABLE(ios(13.0))
261
268
  // MARK: - ALNFCDetectorDelegate
262
269
 
263
270
  - (void)nfcSucceededWithResult:(ALNFCResult * _Nonnull)nfcResult API_AVAILABLE(ios(13.0)) {
264
-
271
+
265
272
  // DataGroup1
266
273
  NSMutableDictionary *dictResultDataGroup1 = [[NSMutableDictionary alloc] init];
267
-
268
-
274
+
275
+
269
276
  [dictResultDataGroup1 setValue:[ALPluginHelper stringForDate:nfcResult.dataGroup1.dateOfBirth]
270
277
  forKey:@"dateOfBirth"];
271
278
  [dictResultDataGroup1 setValue:[ALPluginHelper stringForDate:nfcResult.dataGroup1.dateOfExpiry]
@@ -277,9 +284,9 @@ API_AVAILABLE(ios(13.0))
277
284
  [dictResultDataGroup1 setValue:nfcResult.dataGroup1.issuingStateCode forKey:@"issuingStateCode"];
278
285
  [dictResultDataGroup1 setValue:nfcResult.dataGroup1.lastName forKey:@"lastName"];
279
286
  [dictResultDataGroup1 setValue:nfcResult.dataGroup1.nationality forKey:@"nationality"];
280
-
287
+
281
288
  [self.resultDict setObject:dictResultDataGroup1 forKey:@"dataGroup1"];
282
-
289
+
283
290
  // DataGroup2
284
291
  // ACO: we don't put the path into a separate 'dataGroup' category for the wrapper
285
292
  NSString *imagePath = [ALPluginHelper saveImageToFileSystem:nfcResult.dataGroup2.faceImage
@@ -287,25 +294,25 @@ API_AVAILABLE(ios(13.0))
287
294
  if (imagePath) {
288
295
  [self.resultDict setValue:imagePath forKey:@"imagePath"];
289
296
  }
290
-
297
+
291
298
  // SOD (Passport metadata)
292
299
  NSMutableDictionary *dictResultSOD = [[NSMutableDictionary alloc] init];
293
-
300
+
294
301
  [dictResultSOD setValue:nfcResult.sod.issuerCertificationAuthority forKey:@"issuerCertificationAuthority"];
295
302
  [dictResultSOD setValue:nfcResult.sod.issuerCountry forKey:@"issuerCountry"];
296
303
  [dictResultSOD setValue:nfcResult.sod.issuerOrganization forKey:@"issuerOrganization"];
297
304
  [dictResultSOD setValue:nfcResult.sod.issuerOrganizationalUnit forKey:@"issuerOrganizationalUnit"];
298
305
  [dictResultSOD setValue:nfcResult.sod.ldsHashAlgorithm forKey:@"ldsHashAlgorithm"];
299
-
306
+
300
307
  // ACO need to disable this because AppStoreConnect produces a warning with this enabled:
301
308
  // https://anyline.atlassian.net/browse/SDKY-1509?focusedCommentId=71554
302
309
  // [dictResultSOB setValue:nfcResult.sod.signatureAlgorithm forKey:@"signatureAlgorithm"];
303
-
310
+
304
311
  [dictResultSOD setValue:nfcResult.sod.validFromString forKey:@"validFromString"];
305
312
  [dictResultSOD setValue:nfcResult.sod.validUntilString forKey:@"validUntilString"];
306
-
313
+
307
314
  [self.resultDict setObject:dictResultSOD forKey:@"sod"];
308
-
315
+
309
316
  __weak __block typeof(self) weakSelf = self;
310
317
  dispatch_async(dispatch_get_main_queue(), ^{
311
318
  [weakSelf handleResult:weakSelf.resultDict];
@@ -340,20 +347,20 @@ API_AVAILABLE(ios(13.0))
340
347
 
341
348
  - (void)scanView:(ALScanView *)scanView updatedCutoutWithPluginID:(NSString *)pluginID
342
349
  frame:(CGRect)frame {
343
-
350
+
344
351
  if (CGRectIsEmpty(frame)) {
345
352
  return;
346
353
  }
347
-
354
+
348
355
  self.hintView.hidden = NO;
349
-
356
+
350
357
  CGFloat xOffset = self.uiConfig.labelXPositionOffset;
351
358
  CGFloat yOffset = self.uiConfig.labelYPositionOffset;
352
-
359
+
353
360
  // takes into account that frame reported for a cutout is in relation to
354
361
  // its scan view's coordinate system
355
362
  yOffset += [self.scanView convertRect:frame toView:self.scanView.superview].origin.y;
356
-
363
+
357
364
  self.labelHorizontalOffsetConstraint.constant = xOffset;
358
365
  self.labelVerticalOffsetConstraint.constant = yOffset;
359
366
  }
@@ -397,31 +404,31 @@ API_AVAILABLE(ios(13.0))
397
404
  // MARK: - User Interface
398
405
 
399
406
  - (void)setupHintView {
400
-
407
+
401
408
  UIView *hintView = [[UIView alloc] initWithFrame:CGRectZero];
402
409
  hintView.layer.cornerRadius = 8;
403
410
  hintView.layer.masksToBounds = true;
404
411
  hintView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
405
-
412
+
406
413
  hintView.translatesAutoresizingMaskIntoConstraints = NO;
407
414
  [self.view addSubview:hintView];
408
-
415
+
409
416
  self.labelHorizontalOffsetConstraint = [hintView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant:0];
410
-
417
+
411
418
  // at 0, the bottom of the label (container) should be touching the cutout top when the updatedCutoutRect report
412
419
  // is made
413
420
  self.labelVerticalOffsetConstraint = [hintView.bottomAnchor constraintEqualToAnchor:self.view.topAnchor constant:0];
414
-
421
+
415
422
  self.labelHorizontalOffsetConstraint.active = YES;
416
423
  self.labelVerticalOffsetConstraint.active = YES;
417
-
424
+
418
425
  UILabel *hintViewLabel = [[UILabel alloc] initWithFrame:CGRectZero];
419
-
426
+
420
427
  hintViewLabel.text = @"Scan MRZ";
421
428
  if (self.uiConfig.labelText.length) {
422
429
  hintViewLabel.text = self.uiConfig.labelText;
423
430
  }
424
-
431
+
425
432
  hintViewLabel.font = [UIFont fontWithName:@"HelveticaNeue"
426
433
  size:self.uiConfig.labelSize];
427
434
  hintViewLabel.textColor = self.uiConfig.labelColor;
@@ -429,16 +436,16 @@ API_AVAILABLE(ios(13.0))
429
436
  hintViewLabel.translatesAutoresizingMaskIntoConstraints = NO;
430
437
  [hintViewLabel sizeToFit];
431
438
  [hintView addSubview:hintViewLabel];
432
-
439
+
433
440
  [hintViewLabel.centerXAnchor constraintEqualToAnchor:hintView.centerXAnchor].active = YES;
434
441
  [hintViewLabel.centerYAnchor constraintEqualToAnchor:hintView.centerYAnchor].active = YES;
435
-
442
+
436
443
  NSLayoutConstraint *cnst = [hintView.widthAnchor constraintGreaterThanOrEqualToAnchor:hintViewLabel.widthAnchor
437
444
  constant:20];
438
445
  cnst.active = YES;
439
446
  cnst = [hintView.heightAnchor constraintEqualToAnchor:hintViewLabel.heightAnchor constant:20];
440
447
  cnst.active = YES;
441
-
448
+
442
449
  self.hintView = hintView;
443
450
  self.hintViewLabel = hintViewLabel;
444
451
  }
@@ -66,11 +66,14 @@
66
66
 
67
67
  self.view.backgroundColor = [UIColor blackColor];
68
68
 
69
- // ACO is there an equivalent place to that of an AppDelegate on which this could be added?
70
- [AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
71
-
72
- if ([self showErrorAlertIfNeeded:error]) {
73
- return;
69
+ // Make an isInitialized check. If already initialized, happily move along.
70
+ // Otherwise, make a license key check here.
71
+ BOOL isInitialized = [ALLicenseUtil sharedInstance].isLicenseValid;
72
+ if (!isInitialized) {
73
+ [AnylineSDK setupWithLicenseKey:self.licenseKey error:&error];
74
+ if ([self showErrorAlertIfNeeded:error]) {
75
+ return;
76
+ }
74
77
  }
75
78
 
76
79
  self.scanView = [ALScanViewFactory withJSONDictionary:self.config
@@ -19,7 +19,7 @@ Pod::Spec.new do |s|
19
19
  s.source = { :git => "https://github.com/Anyline/anyline-ocr-react-native-module.git", :tag => "#{s.version}" }
20
20
 
21
21
  s.source_files = "*.{h,m}"
22
- s.dependency "Anyline", "~> 44.1.0"
22
+ s.dependency "Anyline", "~> 46"
23
23
  s.dependency "React"
24
24
 
25
25
  end
@@ -10,8 +10,8 @@
10
10
 
11
11
  @property (nonatomic, strong) ALScanViewPluginConfig *conf;
12
12
 
13
- @property (nonatomic, strong) NSString *callbackId;
14
- @property (nonatomic, strong) NSString *appKey;
13
+ @property (nonatomic, copy) NSString *callbackId;
14
+ @property (nonatomic, copy) NSString *appKey;
15
15
  @property (nonatomic, assign) BOOL nativeBarcodeScanning;
16
16
  @property (nonatomic, strong) NSDictionary *jsonConfigDictionary;
17
17
  @property (nonatomic, strong) NSDictionary *ocrConfigDict;
@@ -20,8 +20,10 @@
20
20
  @property (nonatomic, strong) RCTResponseSenderBlock onResultCallback;
21
21
  @property (nonatomic, strong) RCTResponseSenderBlock onErrorCallback;
22
22
 
23
- @property (nonatomic, strong) NSString *config;
24
- @property (nonatomic, strong) NSString *returnMethod;
23
+ @property (nonatomic, copy) NSString *config;
24
+ @property (nonatomic, copy) NSString *licenseKey;
25
+
26
+ @property (nonatomic, copy) NSString *returnMethod;
25
27
 
26
28
  @end
27
29
 
@@ -32,8 +34,7 @@
32
34
  }
33
35
 
34
36
  RCT_EXPORT_MODULE();
35
- - (UIView *)view
36
- {
37
+ - (UIView *)view {
37
38
  return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
38
39
  }
39
40
 
@@ -54,6 +55,32 @@ RCT_EXPORT_METHOD(setup:(NSString *)config scanMode:(NSString *)scanMode onResul
54
55
  [self initView:scanMode];
55
56
  }
56
57
 
58
+ RCT_EXPORT_METHOD(setupAnylineSDK:(NSString *)licenseKey
59
+ resolver:(RCTPromiseResolveBlock)resolve
60
+ rejecter:(RCTPromiseRejectBlock)reject) {
61
+
62
+ _resolveBlock = resolve;
63
+ _rejectBlock = reject;
64
+ self.returnMethod = @"promise";
65
+ self.licenseKey = licenseKey;
66
+
67
+ NSError *error;
68
+ BOOL success = [AnylineSDK setupWithLicenseKey:licenseKey error:&error];
69
+
70
+ NSString *errorString = nil;
71
+ NSDictionary *successObj = nil;
72
+
73
+ if (!success) {
74
+ NSLog(@"error: %@", error.localizedDescription);
75
+ errorString = @"Unable to initialize the Anyline SDK. Please check your license key.";
76
+ [self returnError:errorString];
77
+ return;
78
+ }
79
+
80
+ successObj = @{ @"success": @(true) };
81
+ [self returnSuccess:@"success"];
82
+ }
83
+
57
84
  RCT_EXPORT_METHOD(setupPromise:(NSString *)config scanMode:(NSString *)scanMode resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
58
85
  _resolveBlock = resolve;
59
86
  _rejectBlock = reject;
@@ -63,25 +90,38 @@ RCT_EXPORT_METHOD(setupPromise:(NSString *)config scanMode:(NSString *)scanMode
63
90
  }
64
91
 
65
92
  RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
66
- resolve(AnylineSDK.versionNumber);
93
+ resolve(AnylineSDK.versionNumber);
94
+ }
95
+
96
+ RCT_EXPORT_METHOD(licenseKeyExpiryDate:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
97
+ BOOL isInitialized = [[ALLicenseUtil sharedInstance] isLicenseValid];
98
+ if (!isInitialized) {
99
+ // not `reject`, as this will require the method to be used in a try-catch
100
+ resolve(nil);
101
+ return;
102
+ }
103
+ resolve([AnylineSDK licenseExpirationDate]);
67
104
  }
68
105
 
69
106
  - (void)initView:(NSString *)scanMode {
70
107
  NSData *data = [self.config dataUsingEncoding:NSUTF8StringEncoding];
71
- if(!data) {
72
- [NSException raise:@"Config could not be loaded from disk" format:@"Config could not be loaded from disk"];
108
+ if (!data) {
109
+ [NSException raise:@"Config could not be loaded from disk" format:@"Config could not be loaded from disk"];
73
110
  }
74
111
 
75
- NSError * error = nil;
112
+ NSError *error = nil;
76
113
  id dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
77
-
78
- if(error) {
79
- [NSException raise:@"Config could not be parsed to JSON" format:@"Config could not be parsed to JSON: %@", error.localizedDescription];
114
+
115
+ if (error) {
116
+ [NSException raise:@"Config could not be parsed to JSON" format:@"Config could not be parsed to JSON: %@", error.localizedDescription];
80
117
  }
81
118
  NSDictionary *optionsDictionary = [dictionary objectForKey:@"options"];
82
119
  self.jsonConfigDictionary = dictionary;
83
120
 
84
121
  self.appKey = [dictionary objectForKey:@"license"];
122
+ if (!self.appKey) {
123
+ self.appKey = [dictionary objectForKey:@"licenseKey"];
124
+ }
85
125
 
86
126
  BOOL nativeBarcodeScanning = [[optionsDictionary objectForKey:@"nativeBarcodeEnabled"] boolValue];
87
127
  self.nativeBarcodeScanning = nativeBarcodeScanning ? nativeBarcodeScanning : NO;
@@ -96,25 +136,25 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
96
136
  if ([[scanMode uppercaseString] isEqualToString:[@"scan" uppercaseString]]) {
97
137
  BOOL isNFC = [optionsDictionary objectForKey:@"enableNFCWithMRZ"];
98
138
  if (isNFC) {
99
- if (@available(iOS 13.0, *)) {
100
- if ([ALNFCDetector readingAvailable]) {
101
- ALNFCScanViewController *nfcScanViewController = [[ALNFCScanViewController alloc] initWithLicensekey:self.appKey
102
- configuration:dictionary
103
- uiConfig:self.jsonUIConf
104
- finished:^(id _Nullable callbackObj, NSString * _Nullable errorString) {
105
- [self returnCallback:callbackObj andErrorString:errorString];
106
- }];
107
-
108
- if(nfcScanViewController != nil){
109
- [nfcScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
110
- [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:nfcScanViewController animated:YES completion:nil];
111
- }
112
- } else {
113
- [self returnError:@"NFC passport reading is not supported on this device or app."];
114
- }
115
- } else {
116
- [self returnError:@"NFC passport reading is only supported on iOS 13 and later."];
117
- }
139
+ if (@available(iOS 13.0, *)) {
140
+ if ([ALNFCDetector readingAvailable]) {
141
+ ALNFCScanViewController *nfcScanViewController = [[ALNFCScanViewController alloc] initWithLicensekey:self.appKey
142
+ configuration:dictionary
143
+ uiConfig:self.jsonUIConf
144
+ finished:^(id _Nullable callbackObj, NSString * _Nullable errorString) {
145
+ [self returnCallback:callbackObj andErrorString:errorString];
146
+ }];
147
+
148
+ if (nfcScanViewController != nil){
149
+ [nfcScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
150
+ [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:nfcScanViewController animated:YES completion:nil];
151
+ }
152
+ } else {
153
+ [self returnError:@"NFC passport reading is not supported on this device or app."];
154
+ }
155
+ } else {
156
+ [self returnError:@"NFC passport reading is only supported on iOS 13 and later."];
157
+ }
118
158
  } else {
119
159
  ALPluginScanViewController *pluginScanViewController =
120
160
  [[ALPluginScanViewController alloc] initWithLicensekey:self.appKey
@@ -123,7 +163,7 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
123
163
  [self returnCallback:callbackObj andErrorString:errorString];
124
164
  }];
125
165
 
126
- if(pluginScanViewController != nil){
166
+ if (pluginScanViewController != nil){
127
167
  [pluginScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
128
168
  [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:pluginScanViewController animated:YES completion:nil];
129
169
  }
@@ -136,7 +176,7 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
136
176
  [self returnCallback:callbackObj andErrorString:errorString];
137
177
  }];
138
178
 
139
- if(pluginScanViewController != nil){
179
+ if (pluginScanViewController != nil){
140
180
  [pluginScanViewController setModalPresentationStyle: UIModalPresentationFullScreen];
141
181
  [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:pluginScanViewController animated:YES completion:nil];
142
182
  }
@@ -180,7 +220,6 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
180
220
 
181
221
  }
182
222
 
183
- //(id _Nullable callbackObj, NSString * _Nullable errorString)
184
223
  - (void)returnCallback:(id _Nullable)callbackObj andErrorString:(NSString * _Nullable)errorString {
185
224
  NSString *resultStr;
186
225
  NSError *error;
@@ -198,18 +237,18 @@ RCT_EXPORT_METHOD(getSDKVersion:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
198
237
  }
199
238
  }
200
239
 
201
- - (void)returnSuccess:(NSString *)result{
202
- if([self.returnMethod isEqualToString:@"callback"]) {
240
+ - (void)returnSuccess:(NSString *)result {
241
+ if ([self.returnMethod isEqualToString:@"callback"]) {
203
242
  self.onResultCallback(@[result]);
204
- } else if([self.returnMethod isEqualToString:@"promise"]) {
243
+ } else if ([self.returnMethod isEqualToString:@"promise"]) {
205
244
  _resolveBlock(result);
206
245
  }
207
246
  }
208
247
 
209
- - (void)returnError:(NSString *)error{
210
- if([self.returnMethod isEqualToString:@"callback"]) {
248
+ - (void)returnError:(NSString *)error {
249
+ if ([self.returnMethod isEqualToString:@"callback"]) {
211
250
  self.onErrorCallback(@[error]);
212
- } else if([self.returnMethod isEqualToString:@"promise"]) {
251
+ } else if ([self.returnMethod isEqualToString:@"promise"]) {
213
252
  _rejectBlock(@"ANYLINE_ERROR", error, nil);
214
253
  }
215
254
  }
package/package.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
- "_from": "anyline-ocr-react-native-module@^44.1.0",
2
+ "_from": "anyline-ocr-react-native-module@^46.1.0",
3
+ "_id": "anyline-ocr-react-native-module@^46.1.0",
3
4
  "_inBundle": false,
4
5
  "_integrity": "sha512-BGi9zNkSsoxXywDBIqzgBRvKUBniQOJHDKBrozZubKthZNRBAj8Ry5tW0Me0yLXt/fauME//hbC0wsenfPJZqw==",
5
6
  "_location": "/anyline-ocr-react-native-module",
@@ -7,19 +8,19 @@
7
8
  "_requested": {
8
9
  "type": "range",
9
10
  "registry": true,
10
- "raw": "anyline-ocr-react-native-module@^44.1.0",
11
+ "raw": "anyline-ocr-react-native-module@^46.1.0",
11
12
  "name": "anyline-ocr-react-native-module",
12
13
  "escapedName": "anyline-ocr-react-native-module",
13
- "rawSpec": "^44.1.0",
14
+ "rawSpec": "^46.1.0",
14
15
  "saveSpec": null,
15
- "fetchSpec": "^44.1.0"
16
+ "fetchSpec": "^46.1.0"
16
17
  },
17
18
  "_requiredBy": [
18
19
  "/"
19
20
  ],
20
- "_resolved": "https://registry.npmjs.org/anyline-ocr-react-native-module/-/anyline-ocr-react-native-module-44.1.0.tgz",
21
+ "_resolved": "https://registry.npmjs.org/anyline-ocr-react-native-module/-/anyline-ocr-react-native-module-44.1.2.tgz",
21
22
  "_shasum": "bacbcd260cc662244f59393ed81a6edba009b52c",
22
- "_spec": "anyline-ocr-react-native-module@^44.1.0",
23
+ "_spec": "anyline-ocr-react-native-module@^46.1.0",
23
24
  "_where": "/Users/amiransari/Projects/anyline-ocr-react-native-module1/example/RNExampleApp",
24
25
  "bugs": {
25
26
  "url": "https://github.com/Anyline/anyline-ocr-react-native-module/issues"
@@ -46,5 +47,5 @@
46
47
  "type": "git",
47
48
  "url": "git+https://github.com/Anyline/anyline-ocr-react-native-module.git"
48
49
  },
49
- "version": "44.1.1"
50
+ "version": "46.1.0"
50
51
  }
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/plugin.iml" filepath="$PROJECT_DIR$/.idea/plugin.iml" />
6
- </modules>
7
- </component>
8
- </project>
package/.idea/plugin.iml DELETED
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="JAVA_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
5
- <content url="file://$MODULE_DIR$" />
6
- <orderEntry type="inheritedJdk" />
7
- <orderEntry type="sourceFolder" forTests="false" />
8
- </component>
9
- </module>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
- </component>
6
- </project>
File without changes
File without changes
File without changes
File without changes
@@ -1,2 +0,0 @@
1
- #Thu Jan 12 14:36:20 CET 2023
2
- gradle.version=6.7
File without changes
File without changes
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="CompilerConfiguration">
4
- <bytecodeTargetLevel target="11" />
5
- </component>
6
- </project>
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="GradleMigrationSettings" migrationVersion="1" />
4
- <component name="GradleSettings">
5
- <option name="linkedExternalProjectsSettings">
6
- <GradleProjectSettings>
7
- <option name="testRunner" value="GRADLE" />
8
- <option name="distributionType" value="DEFAULT_WRAPPED" />
9
- <option name="externalProjectPath" value="$PROJECT_DIR$" />
10
- <option name="gradleJvm" value="Embedded JDK" />
11
- <option name="modules">
12
- <set>
13
- <option value="$PROJECT_DIR$" />
14
- </set>
15
- </option>
16
- </GradleProjectSettings>
17
- </option>
18
- </component>
19
- </project>
@@ -1,40 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="RemoteRepositoriesConfiguration">
4
- <remote-repository>
5
- <option name="id" value="central" />
6
- <option name="name" value="Maven Central repository" />
7
- <option name="url" value="https://repo1.maven.org/maven2" />
8
- </remote-repository>
9
- <remote-repository>
10
- <option name="id" value="jboss.community" />
11
- <option name="name" value="JBoss Community repository" />
12
- <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
13
- </remote-repository>
14
- <remote-repository>
15
- <option name="id" value="maven" />
16
- <option name="name" value="maven" />
17
- <option name="url" value="https://anylinesdk.blob.core.windows.net/testing/" />
18
- </remote-repository>
19
- <remote-repository>
20
- <option name="id" value="BintrayJCenter" />
21
- <option name="name" value="BintrayJCenter" />
22
- <option name="url" value="https://jcenter.bintray.com/" />
23
- </remote-repository>
24
- <remote-repository>
25
- <option name="id" value="Google" />
26
- <option name="name" value="Google" />
27
- <option name="url" value="https://dl.google.com/dl/android/maven2/" />
28
- </remote-repository>
29
- <remote-repository>
30
- <option name="id" value="maven" />
31
- <option name="name" value="maven" />
32
- <option name="url" value="https://anylinesdk.blob.core.windows.net/maven/" />
33
- </remote-repository>
34
- <remote-repository>
35
- <option name="id" value="MavenRepo" />
36
- <option name="name" value="MavenRepo" />
37
- <option name="url" value="https://repo.maven.apache.org/maven2/" />
38
- </remote-repository>
39
- </component>
40
- </project>
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ExternalStorageConfigurationManager" enabled="true" />
4
- <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
5
- <output url="file://$PROJECT_DIR$/build/classes" />
6
- </component>
7
- <component name="ProjectType">
8
- <option name="id" value="Android" />
9
- </component>
10
- </project>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
5
- <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
6
- </component>
7
- </project>
@@ -1,13 +0,0 @@
1
- arguments=
2
- auto.sync=false
3
- build.scans.enabled=false
4
- connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
5
- connection.project.dir=
6
- eclipse.preferences.version=1
7
- gradle.user.home=
8
- java.home=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
9
- jvm.arguments=
10
- offline.mode=false
11
- override.workspace.settings=true
12
- show.console.view=true
13
- show.executions.view=true
@@ -1,8 +0,0 @@
1
- ## This file must *NOT* be checked into Version Control Systems,
2
- # as it contains information specific to your local configuration.
3
- #
4
- # Location of the SDK. This is only used by Gradle.
5
- # For customization when using a Version Control System, please read the
6
- # header note.
7
- #Wed Nov 16 08:15:22 CET 2022
8
- sdk.dir=/Users/patrickfekete/Library/Android/sdk