barkoder-nativescript 1.6.4 → 1.6.7

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 (88) hide show
  1. package/barkoder-nativescript.android.ts +363 -5
  2. package/barkoder-nativescript.common.ts +11 -3
  3. package/barkoder-nativescript.ios.ts +354 -4
  4. package/package.json +1 -1
  5. package/platforms/android/barkoder.aar +0 -0
  6. package/platforms/ios/Barkoder.xcframework/Info.plist +5 -5
  7. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/Barkoder +0 -0
  8. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/Headers/iBarkoder.h +36 -4
  9. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/Info.plist +0 -0
  10. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/default.metallib +0 -0
  11. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/analytics/coremldata.bin +0 -0
  12. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/coremldata.bin +0 -0
  13. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/metadata.json +77 -0
  14. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/model/coremldata.bin +0 -0
  15. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.net +5331 -0
  16. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.shape +1740 -0
  17. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.weights +0 -0
  18. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_384x256_int8.mlmodelc/neural_network_optionals/coremldata.bin +0 -0
  19. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/analytics/coremldata.bin +0 -0
  20. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/coremldata.bin +0 -0
  21. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/metadata.json +77 -0
  22. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/model/coremldata.bin +0 -0
  23. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.net +5331 -0
  24. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.shape +1740 -0
  25. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.weights +0 -0
  26. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/n2_512x384_int8.mlmodelc/neural_network_optionals/coremldata.bin +0 -0
  27. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/Barkoder +0 -0
  28. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/Headers/iBarkoder.h +36 -4
  29. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/Info.plist +0 -0
  30. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/_CodeSignature/CodeResources +119 -53
  31. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/default.metallib +0 -0
  32. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/analytics/coremldata.bin +0 -0
  33. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/coremldata.bin +0 -0
  34. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/metadata.json +77 -0
  35. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/model/coremldata.bin +0 -0
  36. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.net +5331 -0
  37. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.shape +1740 -0
  38. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/model.espresso.weights +0 -0
  39. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_384x256_int8.mlmodelc/neural_network_optionals/coremldata.bin +0 -0
  40. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/analytics/coremldata.bin +0 -0
  41. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/coremldata.bin +0 -0
  42. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/metadata.json +77 -0
  43. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/model/coremldata.bin +0 -0
  44. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.net +5331 -0
  45. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.shape +1740 -0
  46. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/model.espresso.weights +0 -0
  47. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/n2_512x384_int8.mlmodelc/neural_network_optionals/coremldata.bin +0 -0
  48. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/BarkoderSDK +0 -0
  49. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Headers/BarkoderSDK-Swift.h +116 -12
  50. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Info.plist +0 -0
  51. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios.abi.json +2507 -1044
  52. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +54 -4
  53. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  54. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios.swiftinterface +54 -4
  55. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64/BarkoderSDK.framework/templates.json +32 -23
  56. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/BarkoderSDK +0 -0
  57. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Headers/BarkoderSDK-Swift.h +232 -24
  58. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Info.plist +0 -0
  59. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +2507 -1044
  60. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +54 -4
  61. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  62. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +54 -4
  63. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +2507 -1044
  64. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +54 -4
  65. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  66. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/Modules/BarkoderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +54 -4
  67. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/_CodeSignature/CodeResources +25 -25
  68. package/platforms/ios/BarkoderSDK.xcframework/ios-arm64_x86_64-simulator/BarkoderSDK.framework/templates.json +32 -23
  69. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_384x256.mlmodelc/analytics/coremldata.bin +0 -0
  70. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_384x256.mlmodelc/coremldata.bin +0 -0
  71. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_384x256.mlmodelc/metadata.json +0 -88
  72. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_384x256.mlmodelc/model.mil +0 -753
  73. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_384x256.mlmodelc/weights/weight.bin +0 -0
  74. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_512x384.mlmodelc/analytics/coremldata.bin +0 -0
  75. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_512x384.mlmodelc/coremldata.bin +0 -0
  76. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_512x384.mlmodelc/metadata.json +0 -88
  77. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_512x384.mlmodelc/model.mil +0 -753
  78. package/platforms/ios/Barkoder.xcframework/ios-arm64/Barkoder.framework/float16_512x384.mlmodelc/weights/weight.bin +0 -0
  79. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_384x256.mlmodelc/analytics/coremldata.bin +0 -0
  80. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_384x256.mlmodelc/coremldata.bin +0 -0
  81. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_384x256.mlmodelc/metadata.json +0 -88
  82. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_384x256.mlmodelc/model.mil +0 -753
  83. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_384x256.mlmodelc/weights/weight.bin +0 -0
  84. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_512x384.mlmodelc/analytics/coremldata.bin +0 -0
  85. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_512x384.mlmodelc/coremldata.bin +0 -0
  86. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_512x384.mlmodelc/metadata.json +0 -88
  87. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_512x384.mlmodelc/model.mil +0 -753
  88. package/platforms/ios/Barkoder.xcframework/ios-arm64_x86_64-simulator/Barkoder.framework/float16_512x384.mlmodelc/weights/weight.bin +0 -0
@@ -1,6 +1,6 @@
1
1
  import { BarkoderConstants } from "./barkoder-nativescript.common";
2
2
  import * as application from "@nativescript/core/application";
3
- import { View } from "@nativescript/core";
3
+ import { Color, View } from "@nativescript/core";
4
4
  import { BarkoderView } from "./barkoder-nativescript.common";
5
5
  import { ImageSource } from '@nativescript/core';
6
6
 
@@ -35,6 +35,9 @@ export class BarkoderViewAndroid extends View {
35
35
  this.nativeView = this.bkdView;
36
36
  }
37
37
 
38
+
39
+
40
+
38
41
  /**
39
42
  * Initiates the barcode scanning process, allowing the application to detect and decode barcodes from the device's camera feed
40
43
  */
@@ -44,16 +47,36 @@ export class BarkoderViewAndroid extends View {
44
47
  const resultCallback = new com.barkoder.interfaces.BarkoderResultCallback({
45
48
  scanningFinished: (
46
49
  results: any[],
47
- thumbnails: any[],
50
+ thumbnails: any, // not a true JS array!
48
51
  resultImage: any
49
52
  ) => {
53
+ // Convert native array to JS array first
54
+ const jsThumbnails = [];
55
+
56
+ if(thumbnails != null) {
57
+ for (let i = 0; i < thumbnails.length; i++) {
58
+ jsThumbnails.push(thumbnails[i]);
59
+ }
60
+ }
61
+
62
+
63
+ const convertedThumbnails = jsThumbnails.map((bitmap) => {
64
+ const imgSrc = new ImageSource();
65
+ imgSrc.setNativeSource(bitmap);
66
+ return imgSrc;
67
+ });
68
+
69
+ const convertedResultImage = new ImageSource();
70
+ convertedResultImage.setNativeSource(resultImage);
71
+
50
72
  BarkoderResultCallback.scanningFinished(
51
73
  results,
52
- thumbnails,
53
- resultImage
74
+ convertedThumbnails,
75
+ convertedResultImage
54
76
  );
55
77
  },
56
78
  });
79
+
57
80
  this.bkdView.startScanning(resultCallback);
58
81
  }
59
82
 
@@ -101,6 +124,10 @@ export class BarkoderViewAndroid extends View {
101
124
  this.bkdView.stopScanning();
102
125
  }
103
126
 
127
+ captureImage(): void {
128
+ this.bkdView.captureImage();
129
+ }
130
+
104
131
  pauseScanning(): void {
105
132
  this.bkdView.pauseScanning();
106
133
  }
@@ -127,6 +154,15 @@ export class BarkoderViewAndroid extends View {
127
154
  this.bkdView.setFlashEnabled(enabled);
128
155
  }
129
156
 
157
+ setARContinueScanningOnLimit(enabled: boolean): void {
158
+ this.bkdView.config.arConfig.setContinueScanningOnLimit(enabled);
159
+ }
160
+
161
+ setAREmitResultsAtSessionEndOnly(enabled: boolean): void {
162
+ this.bkdView.config.arConfig.emitResultsAtSessionEndOnly = enabled;
163
+ }
164
+
165
+
130
166
  /**
131
167
  * Retrieves the maximum available zoom factor for the device's camera
132
168
  */
@@ -244,6 +280,252 @@ export class BarkoderViewAndroid extends View {
244
280
  this.bkdView.config.setRegionOfInterestVisible(enabled);
245
281
  }
246
282
 
283
+
284
+
285
+
286
+
287
+ /**
288
+ * Configures the flash button with custom settings, supporting NativeScript types.
289
+ */
290
+ configureFlashButton(
291
+ visible: boolean,
292
+ position: number[],
293
+ iconSize: number,
294
+ tintColor: string | Color | null,
295
+ backgroundColor: string | Color | null,
296
+ cornerRadius: number,
297
+ padding: number,
298
+ useCustomIcon: boolean,
299
+ flashOnIconBase64: string,
300
+ flashOffIconBase64: string
301
+ ): void {
302
+
303
+ let nativeTintColor: java.lang.Integer = null;
304
+ if (tintColor != null) {
305
+ const color = (tintColor instanceof Color)
306
+ ? tintColor
307
+ : new Color(tintColor as string);
308
+ nativeTintColor = java.lang.Integer.valueOf(color.android);
309
+ }
310
+
311
+ let nativeBackgroundColor: java.lang.Integer = null;
312
+ if (backgroundColor != null) {
313
+ const color = (backgroundColor instanceof Color)
314
+ ? backgroundColor
315
+ : new Color(backgroundColor as string);
316
+ nativeBackgroundColor = java.lang.Integer.valueOf(color.android);
317
+ }
318
+
319
+ const nativePosition = java.lang.reflect.Array.newInstance(java.lang.Float.TYPE, 2);
320
+ nativePosition[0] = position[0];
321
+ nativePosition[1] = position[1];
322
+
323
+ let nativeFlashOnBitmap = null;
324
+ let nativeFlashOffBitmap = null;
325
+
326
+ if (useCustomIcon) {
327
+ nativeFlashOnBitmap = this.decodeBase64ToBitmap(flashOnIconBase64);
328
+ nativeFlashOffBitmap = this.decodeBase64ToBitmap(flashOffIconBase64);
329
+ }
330
+
331
+ this.bkdView.configureFlashButton(
332
+ visible,
333
+ nativePosition,
334
+ iconSize,
335
+ nativeTintColor,
336
+ nativeBackgroundColor,
337
+ cornerRadius,
338
+ padding,
339
+ useCustomIcon,
340
+ nativeFlashOnBitmap,
341
+ nativeFlashOffBitmap
342
+ );
343
+ }
344
+
345
+
346
+ private decodeBase64ToBitmap(base64String: string): android.graphics.Bitmap | null {
347
+ if (!base64String) {
348
+ return null;
349
+ }
350
+ try {
351
+ // 1. Decode the Base64 string into a byte array
352
+ const decodedBytes = android.util.Base64.decode(base64String, android.util.Base64.DEFAULT);
353
+
354
+ // 2. Use BitmapFactory to create a Bitmap from the byte array
355
+ const bitmap = android.graphics.BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
356
+
357
+ return bitmap;
358
+ } catch (e) {
359
+ console.error("Error decoding Base64 string to Bitmap:", e);
360
+ return null;
361
+ }
362
+ }
363
+
364
+ configureCloseButton(
365
+ visible: boolean,
366
+ position: number[],
367
+ iconSize: number,
368
+ tintColor: string | Color | null,
369
+ backgroundColor: string | Color | null,
370
+ cornerRadius: number,
371
+ padding: number,
372
+ useCustomIcon: boolean,
373
+ customIcon: string,
374
+ onCloseCallback?: () => void
375
+ ): void {
376
+ if (!this.bkdView) {
377
+ return;
378
+ }
379
+
380
+ // ✅ 1. Safely convert tintColor
381
+ let nativeTintColor: java.lang.Integer = null;
382
+ if (tintColor != null) {
383
+ const color = tintColor instanceof Color
384
+ ? tintColor
385
+ : new Color(tintColor as string);
386
+ nativeTintColor = java.lang.Integer.valueOf(color.android);
387
+ }
388
+
389
+ // ✅ 2. Safely convert backgroundColor
390
+ let nativeBackgroundColor: java.lang.Integer = null;
391
+ if (backgroundColor != null) {
392
+ const color = backgroundColor instanceof Color
393
+ ? backgroundColor
394
+ : new Color(backgroundColor as string);
395
+ nativeBackgroundColor = java.lang.Integer.valueOf(color.android);
396
+ }
397
+
398
+ // ✅ 3. Convert position to float[]
399
+ const nativePosition = java.lang.reflect.Array.newInstance(java.lang.Float.TYPE, 2);
400
+ nativePosition[0] = position[0];
401
+ nativePosition[1] = position[1];
402
+
403
+ // ✅ 4. Decode base64 icon if needed
404
+ let customIconBitmap = null;
405
+ if (useCustomIcon && customIcon) {
406
+ customIconBitmap = this.decodeBase64ToBitmap(customIcon);
407
+ }
408
+
409
+ // ✅ 5. Wrap the JS callback into a native Runnable
410
+ const nativeCallback = onCloseCallback
411
+ ? new java.lang.Runnable({
412
+ run: () => {
413
+ onCloseCallback();
414
+ }
415
+ })
416
+ : null;
417
+
418
+ // ✅ 6. Call native Android method
419
+ this.bkdView.configureCloseButton(
420
+ visible,
421
+ nativePosition,
422
+ iconSize,
423
+ nativeTintColor,
424
+ nativeBackgroundColor,
425
+ cornerRadius,
426
+ padding,
427
+ useCustomIcon,
428
+ customIconBitmap,
429
+ nativeCallback
430
+ );
431
+ }
432
+
433
+
434
+ configureZoomButton(
435
+ visible: boolean,
436
+ position: number[], // [xDp, yDp]
437
+ iconSize: number,
438
+ tintColor: string | Color | null,
439
+ backgroundColor: string | Color | null,
440
+ cornerRadius: number,
441
+ padding: number,
442
+ useCustomIcon: boolean,
443
+ zoomInIconBase64: string,
444
+ zoomOutIconBase64: string,
445
+ zoomedInFactor: number,
446
+ zoomedOutFactor: number
447
+ ): void {
448
+ if (!this.bkdView || !global.isAndroid) {
449
+ return;
450
+ }
451
+
452
+ // ✅ 1. Safely convert tintColor
453
+ let nativeTintColor: java.lang.Integer = null;
454
+ if (tintColor != null) {
455
+ const color = tintColor instanceof Color
456
+ ? tintColor
457
+ : new Color(tintColor as string);
458
+ nativeTintColor = java.lang.Integer.valueOf(color.android);
459
+ }
460
+
461
+ // ✅ 2. Safely convert backgroundColor
462
+ let nativeBackgroundColor: java.lang.Integer = null;
463
+ if (backgroundColor != null) {
464
+ const color = backgroundColor instanceof Color
465
+ ? backgroundColor
466
+ : new Color(backgroundColor as string);
467
+ nativeBackgroundColor = java.lang.Integer.valueOf(color.android);
468
+ }
469
+
470
+ // ✅ 3. Convert Position (JS number[] -> Java float[])
471
+ const nativePosition = java.lang.reflect.Array.newInstance(java.lang.Float.TYPE, 2);
472
+ nativePosition[0] = position[0];
473
+ nativePosition[1] = position[1];
474
+
475
+ // ✅ 4. Decode base64 icons if using custom icons
476
+ let nativeZoomInBitmap = null;
477
+ let nativeZoomOutBitmap = null;
478
+
479
+ if (useCustomIcon && zoomInIconBase64 && zoomOutIconBase64) {
480
+ nativeZoomInBitmap = this.decodeBase64ToBitmap(zoomInIconBase64);
481
+ nativeZoomOutBitmap = this.decodeBase64ToBitmap(zoomOutIconBase64);
482
+ }
483
+
484
+ // ✅ 5. Call native method
485
+ this.bkdView.configureZoomButton(
486
+ visible,
487
+ nativePosition,
488
+ iconSize,
489
+ nativeTintColor,
490
+ nativeBackgroundColor,
491
+ cornerRadius,
492
+ padding,
493
+ useCustomIcon,
494
+ nativeZoomInBitmap,
495
+ nativeZoomOutBitmap,
496
+ zoomedInFactor,
497
+ zoomedOutFactor
498
+ );
499
+ }
500
+
501
+
502
+ // --- Placeholder for a Conversion Utility (Not part of the core wrapper, but essential) ---
503
+ private convertToNativeBitmap(imageSource: any): any /* android.graphics.Bitmap */ {
504
+ if (!imageSource) {
505
+ return null;
506
+ }
507
+
508
+ // If the imageSource is already a native Bitmap (from a previous conversion/cache)
509
+ if (imageSource.android instanceof com.google.zxing.qrcode.encoder.ByteMatrix) { // Incorrect type, placeholder
510
+ // return imageSource.android;
511
+ }
512
+
513
+ // Example conversion (highly simplified - you'll need the correct NativeScript helpers)
514
+ /* if (imageSource instanceof ImageSource) {
515
+ const nativeBitmap = imageSource.android;
516
+ return nativeBitmap;
517
+ }
518
+ */
519
+
520
+ // For a robust wrapper, you would need to:
521
+ // 1. Check if the input is a file path, Base64 string, or an ImageSource object.
522
+ // 2. Use NativeScript's image-loading utilities to load and convert it to an
523
+ // `android.graphics.Bitmap`.
524
+
525
+ console.warn("Image conversion placeholder called. Replace with actual logic.");
526
+ return null; // Return null if conversion fails
527
+ }
528
+
247
529
  /**
248
530
  * Defines the Region of Interest (ROI) on the camera preview for barcode scanning, specifying an area where the application focuses on detecting barcodes
249
531
  */
@@ -478,7 +760,11 @@ export class BarkoderViewAndroid extends View {
478
760
  } else if (decodingSpeed == BarkoderConstants.DecodingSpeed.Normal) {
479
761
  this.bkdView.config.getDecoderConfig().decodingSpeed =
480
762
  com.barkoder.Barkoder.DecodingSpeed.Normal;
481
- } else {
763
+ } else if (decodingSpeed == BarkoderConstants.DecodingSpeed.Rigorous) {
764
+ this.bkdView.config.getDecoderConfig().decodingSpeed =
765
+ com.barkoder.Barkoder.DecodingSpeed.Rigorous;
766
+ }
767
+ else {
482
768
  console.log("Not avilbilable Decoding Speed");
483
769
  }
484
770
  }
@@ -504,6 +790,10 @@ export class BarkoderViewAndroid extends View {
504
790
  this.bkdView.config.getDecoderConfig().formattingType =
505
791
  com.barkoder.Barkoder.FormattingType.AAMVA;
506
792
  break;
793
+ case BarkoderConstants.FormattingType.SADL:
794
+ this.bkdView.config.getDecoderConfig().formattingType =
795
+ com.barkoder.Barkoder.FormattingType.SADL;
796
+ break;
507
797
  }
508
798
  }
509
799
 
@@ -662,6 +952,10 @@ export class BarkoderViewAndroid extends View {
662
952
  return this.bkdView.config.getDecoderConfig().KIX.enabled;
663
953
  case BarkoderConstants.DecoderType.JapanesePost:
664
954
  return this.bkdView.config.getDecoderConfig().JapanesePost.enabled;
955
+ case BarkoderConstants.DecoderType.MaxiCode:
956
+ return this.bkdView.config.getDecoderConfig().MaxiCode.enabled;
957
+ case BarkoderConstants.DecoderType.OCRText:
958
+ return this.bkdView.config.getDecoderConfig().OCRText.enabled;
665
959
  }
666
960
  }
667
961
 
@@ -707,6 +1001,8 @@ export class BarkoderViewAndroid extends View {
707
1001
  this.bkdView.config.getDecoderConfig().RoyalMail.enabled = false;
708
1002
  this.bkdView.config.getDecoderConfig().KIX.enabled = false;
709
1003
  this.bkdView.config.getDecoderConfig().JapanesePost.enabled = false;
1004
+ this.bkdView.config.getDecoderConfig().MaxiCode.enabled = false;
1005
+ this.bkdView.config.getDecoderConfig().OCRText.enabled = false;
710
1006
  decoders.forEach((dt: BarkoderConstants.DecoderType) => {
711
1007
  switch (dt) {
712
1008
  case BarkoderConstants.DecoderType.Aztec:
@@ -823,6 +1119,12 @@ export class BarkoderViewAndroid extends View {
823
1119
  case BarkoderConstants.DecoderType.JapanesePost:
824
1120
  this.bkdView.config.getDecoderConfig().JapanesePost.enabled = true;
825
1121
  break;
1122
+ case BarkoderConstants.DecoderType.MaxiCode:
1123
+ this.bkdView.config.getDecoderConfig().MaxiCode.enabled = true;
1124
+ break;
1125
+ case BarkoderConstants.DecoderType.OCRText:
1126
+ this.bkdView.config.getDecoderConfig().OCRText.enabled = true;
1127
+ break;
826
1128
  default:
827
1129
  break;
828
1130
  }
@@ -1072,6 +1374,10 @@ export class BarkoderViewAndroid extends View {
1072
1374
  this.bkdView.config.getDecoderConfig().maximumResultsCount = maximumResultsCount;
1073
1375
  }
1074
1376
 
1377
+ setARResultLimit(resultLimit: number): void {
1378
+ this.bkdView.config.arConfig.resultLimit = resultLimit;
1379
+ }
1380
+
1075
1381
  /**
1076
1382
  * Sets the delay in milliseconds for considering duplicate barcodes during scanning
1077
1383
  */
@@ -1079,6 +1385,29 @@ export class BarkoderViewAndroid extends View {
1079
1385
  this.bkdView.config.getDecoderConfig().duplicatesDelayMs = duplicateDelayMs;
1080
1386
  }
1081
1387
 
1388
+ getSadlImageFromExtra(extra: any): ImageSource | null {
1389
+ if (!extra || !global.isAndroid) {
1390
+ return null;
1391
+ }
1392
+
1393
+ try {
1394
+ const bitmap =
1395
+ com.barkoder.BarkoderHelper.sadlImage(extra);
1396
+
1397
+ if (!bitmap) {
1398
+ return null;
1399
+ }
1400
+
1401
+ const imageSource = new ImageSource();
1402
+ imageSource.setNativeSource(bitmap);
1403
+ return imageSource;
1404
+
1405
+ } catch (e) {
1406
+ console.error('Failed to extract SADL image:', e);
1407
+ return null;
1408
+ }
1409
+ }
1410
+
1082
1411
  /**
1083
1412
  * Sets the caching duration (in milliseconds) for multi-code results
1084
1413
  */
@@ -1107,6 +1436,26 @@ export class BarkoderViewAndroid extends View {
1107
1436
  return this.bkdView.config.getDecoderConfig().duplicatesDelayMs;
1108
1437
  }
1109
1438
 
1439
+ setARImageResultEnabled(enabled: boolean): void {
1440
+ this.bkdView.config.arConfig.imageResultEnabled = enabled
1441
+ }
1442
+
1443
+ setARBarcodeThumbnailOnResultEnabled(enabled: boolean): void {
1444
+ this.bkdView.config.arConfig.barcodeThumbnailOnResult = enabled
1445
+ }
1446
+
1447
+ isARImageResultEnabled(): any {
1448
+ return this.bkdView.config.arConfig.imageResultEnabled
1449
+ }
1450
+
1451
+ isARBarcodeThumbnailOnResultEnabled(): any {
1452
+ return this.bkdView.config.arConfig.barcodeThumbnailOnResult
1453
+ }
1454
+
1455
+ getCurrentZoomFactor(): any {
1456
+ return this.bkdView.getCurrentZoomFactor()
1457
+ }
1458
+
1110
1459
  /**
1111
1460
  * Sets whether the Direct Part Marking (DPM) mode for Datamatrix barcodes is enabled.
1112
1461
  */
@@ -1278,6 +1627,10 @@ export class BarkoderViewAndroid extends View {
1278
1627
  com.barkoder.Barkoder.SetCustomOption(this.bkdView.config.getDecoderConfig(), string, mode);
1279
1628
  }
1280
1629
 
1630
+ setCustomOptionGlobal(string: string, mode: number): void {
1631
+ com.barkoder.Barkoder.SetCustomOptionGlobal(string, mode);
1632
+ }
1633
+
1281
1634
  setDynamicExposure(mode : number) : void {
1282
1635
  this.bkdView.setDynamicExposure(mode);
1283
1636
  }
@@ -1522,3 +1875,8 @@ export class BarkoderViewAndroid extends View {
1522
1875
  }
1523
1876
  }
1524
1877
  }
1878
+ function bitmapToImageSource(bitmap: android.graphics.Bitmap): ImageSource {
1879
+ const imageSource = new ImageSource();
1880
+ imageSource.setNativeSource(bitmap); // This is the key method
1881
+ return imageSource;
1882
+ }
@@ -59,7 +59,9 @@ export enum DecoderType {
59
59
  AustralianPost = 35,
60
60
  RoyalMail = 36,
61
61
  KIX = 37,
62
- JapanesePost = 38
62
+ JapanesePost = 38,
63
+ MaxiCode = 39,
64
+ OCRText = 40
63
65
 
64
66
  }
65
67
 
@@ -67,13 +69,15 @@ export enum FormattingType {
67
69
  Disabled = 0,
68
70
  Automatic = 1,
69
71
  GS1 = 2,
70
- AAMVA = 3
72
+ AAMVA = 3,
73
+ SADL = 4
71
74
  }
72
75
 
73
76
  export enum DecodingSpeed {
74
77
  Fast = 0,
75
78
  Normal = 1,
76
- Slow = 2
79
+ Slow = 2,
80
+ Rigorous = 3
77
81
  }
78
82
 
79
83
  export enum BarkoderResolution {
@@ -235,6 +239,8 @@ export class DekoderConfig {
235
239
  royalMail?: BarcodeConfig;
236
240
  kix?: BarcodeConfig;
237
241
  japanasePost?: BarcodeConfig;
242
+ maxicode?: BarcodeConfig;
243
+ ocrText?: BarcodeConfig;
238
244
  general?: GeneralSettings;
239
245
 
240
246
  constructor(config: Partial<DekoderConfig>) {
@@ -282,6 +288,8 @@ export class DekoderConfig {
282
288
  'Royal Mail': this.royalMail?.toMap(),
283
289
  'KIX': this.kix?.toMap(),
284
290
  'Japanase Post': this.japanasePost?.toMap(),
291
+ 'MaxiCode': this.maxicode?.toMap(),
292
+ 'OCR Text': this.maxicode?.toMap(),
285
293
  'general': this.general?.toMap()
286
294
  }
287
295