react-native-okaycam 3.0.3 → 3.0.4

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.
@@ -44,7 +44,7 @@ repositories {
44
44
 
45
45
  dependencies {
46
46
  compileOnly "com.facebook.react:react-android"
47
- implementation('com.innov8tif.okaycam:OkayCam:3.0.6@aar') {
47
+ implementation('com.innov8tif.okaycam:OkayCam:3.0.9@aar') {
48
48
  transitive = true
49
49
  exclude group: "junit", module: "junit"
50
50
  exclude group: "org.hamcrest", module: "hamcrest-core"
@@ -18,23 +18,17 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
18
18
  import com.facebook.react.bridge.ReactMethod;
19
19
  import com.facebook.react.bridge.ReadableMap;
20
20
 
21
- import com.innov8tif.okaycam.cam.OkayCamDoc;
21
+ import com.innov8tif.okaycam.cam.OkayCamAutoDoc;
22
22
  import com.innov8tif.okaycam.config.CameraFacing;
23
- import com.innov8tif.okaycam.config.CaptureConfigPair;
24
23
  import com.innov8tif.okaycam.config.OkayCamBtnConfig;
25
24
  import com.innov8tif.okaycam.config.OkayCamCaptureConfig;
26
- import com.innov8tif.okaycam.config.OkayCamConfig;
27
- import com.innov8tif.okaycam.config.OkayCamFrameConfig;
28
- import com.innov8tif.okaycam.config.OkayCamInstruction;
29
- import com.innov8tif.okaycam.config.OkayCamInstructionRefImg;
30
- import com.innov8tif.okaycam.config.OkayCamLabelConfig;
31
- import com.innov8tif.okaycam.config.OkayCamPreviewConfig;
32
- import com.innov8tif.okaycam.config.OkayCamTimerConfig;
25
+ import com.innov8tif.okaycam.config.OkayCamAutoCaptureConfig;
33
26
  import com.innov8tif.okaycam.config.OkaySelfieConfig;
34
27
  import com.innov8tif.okaycam.config.OkaySelfieLabelConfig;
35
28
  import com.innov8tif.okaycam.config.OkaySelfieSwichBtnConfig;
36
29
  import com.innov8tif.okaycam.selfie.OkayCamSelfie;
37
30
  import com.innov8tif.okaycam.utils.BitmapUtils;
31
+ import com.innov8tif.okaycam.config.OkayCamAutoCaptureMode;
38
32
 
39
33
  import org.json.JSONException;
40
34
  import org.json.JSONObject;
@@ -65,85 +59,20 @@ public class RNOkayCamModule extends ReactContextBaseJavaModule {
65
59
  String LICENSE_KEY = configs.getString("license");
66
60
 
67
61
  Boolean base64 = configs.getBoolean("base64");
68
-
69
62
  ReadableMap userConfig = configs.getMap("config");
70
- ReadableMap topLabel = userConfig.getMap("topLabel");
71
- ReadableMap bottomLabel = userConfig.getMap("bottomLabel");
72
- ReadableMap frame = userConfig.getMap("frame");
73
- ReadableMap timer = userConfig.getMap("timer");
74
- ReadableMap confirmBtnConfig = userConfig.getMap("confirmBtnConfig");
75
- ReadableMap retakeBtnConfig = userConfig.getMap("retakeBtnConfig");
76
- ReadableMap captureConfigPair = userConfig.getMap("captureConfigPair");
77
- ReadableMap firstPhoto = captureConfigPair.getMap("firstPhoto");
78
- ReadableMap secondPhoto = captureConfigPair.getMap("secondPhoto");
79
- ReadableMap preview = userConfig.getMap("preview");
80
- ReadableMap instruction = userConfig.getMap("instruction");
63
+ OkayCamAutoCaptureConfig config = OkayCamAutoCaptureConfig.init();
81
64
 
82
- OkayCamConfig okayCamConfig = OkayCamConfig.init(this.getCurrentActivity());
65
+ // if (userConfig.getInt("width") != -1) {
66
+ // config.setWidth(userConfig.getInt("width"));
67
+ // }
83
68
 
84
- okayCamConfig.setShowOverlay(userConfig.getBoolean("showOverlay"));
85
- okayCamConfig.setShowPreviewInstruction(userConfig.getBoolean("showPreviewInstruction"));
86
- okayCamConfig.setTorchBtnEnabled(userConfig.getBoolean("torchBtnEnabled"));
87
- okayCamConfig.setCrop(userConfig.getBoolean("crop"));
88
-
89
- if (userConfig.getInt("width") != -1) {
90
- okayCamConfig.setWidth(userConfig.getInt("width"));
69
+ if (userConfig.getDouble("imageQuality") > 0.0) {
70
+ config.setImageQuality((float) userConfig.getDouble("imageQuality"));
91
71
  }
92
72
 
93
- okayCamConfig.setImageQuality((float) userConfig.getDouble("imageQuality"));
94
-
95
- okayCamConfig.setTopLabel(new OkayCamLabelConfig(
96
- topLabel.getString("text"),
97
- Color.parseColor(topLabel.getString("color")),
98
- topLabel.getInt("size")
99
- ));
100
-
101
- okayCamConfig.setBottomLabel(new OkayCamLabelConfig(
102
- bottomLabel.getString("text"),
103
- Color.parseColor(bottomLabel.getString("color")),
104
- bottomLabel.getInt("size")
105
- ));
106
-
107
- OkayCamFrameConfig frameConfig = getFrameConfig(frame);
108
- okayCamConfig.setFrame(frameConfig);
109
-
110
- okayCamConfig.setCaptureBtnColor(Color.parseColor(userConfig.getString("captureBtnColor")));
111
- okayCamConfig.setTimer(new OkayCamTimerConfig(
112
- Color.parseColor(timer.getString("backgroundColor")),
113
- Color.parseColor(timer.getString("textColor"))
114
- ));
115
-
116
- okayCamConfig.setConfirmBtnConfig(new OkayCamBtnConfig(
117
- Color.parseColor(confirmBtnConfig.getString("backgroundColor")),
118
- Color.parseColor(confirmBtnConfig.getString("contentColor"))
119
- ));
120
-
121
- okayCamConfig.setRetakeBtnConfig(new OkayCamBtnConfig(
122
- Color.parseColor(retakeBtnConfig.getString("backgroundColor")),
123
- Color.parseColor(retakeBtnConfig.getString("contentColor"))
124
- ));
125
-
126
- okayCamConfig.setCaptureConfig(new CaptureConfigPair(
127
- firstPhoto != null ? new OkayCamCaptureConfig(
128
- firstPhoto.getInt("delay"),
129
- firstPhoto.getBoolean("onFlash"),
130
- firstPhoto.getString("outputPath"),
131
- firstPhoto.hasKey("onImageQuality") ? firstPhoto.getBoolean("onImageQuality") : false
132
- ) : null,
133
- secondPhoto != null ? new OkayCamCaptureConfig(
134
- secondPhoto.getInt("delay"),
135
- secondPhoto.getBoolean("onFlash"),
136
- secondPhoto.getString("outputPath"),
137
- secondPhoto.hasKey("onImageQuality") ? secondPhoto.getBoolean("onImageQuality") : false
138
- ) : null
139
- ));
140
-
141
- okayCamConfig.setPreview(getPreviewConfig(preview, frameConfig));
142
- okayCamConfig.setInstruction(getInstructionConfig(instruction, frameConfig));
143
- okayCamConfig.setAutoCapture(userConfig.getBoolean("autoCapture"));
144
-
145
- OkayCamDoc.start(this.getCurrentActivity(), LICENSE_KEY, okayCamConfig, (success, images, exception) -> {
73
+ config.setMode(parseMode(userConfig.getString("mode")));
146
74
 
75
+ OkayCamAutoDoc.start(this.getCurrentActivity(), LICENSE_KEY, config, (success, images, exception) -> {
147
76
  if (success) {
148
77
  JSONObject results = new JSONObject();
149
78
  try {
@@ -173,290 +102,6 @@ public class RNOkayCamModule extends ReactContextBaseJavaModule {
173
102
  });
174
103
  }
175
104
 
176
- private OkayCamInstruction getInstructionConfig(ReadableMap instruction, OkayCamFrameConfig frameConfig) {
177
- if (instruction == null) return null;
178
- OkayCamLabelConfig title = mapToLabelConfig(instruction.getMap("title"));
179
-
180
- ReadableMap refMap1 = instruction.getMap("refImage1");
181
- OkayCamInstructionRefImg ref1 = mapToRef(refMap1, frameConfig, "instr1");
182
-
183
- ReadableMap refMap2 = instruction.getMap("refImage2");
184
- OkayCamInstructionRefImg ref2 = mapToRef(refMap2, frameConfig, "instr2");
185
-
186
-
187
- return new OkayCamInstruction(
188
- title,
189
- ref1,
190
- ref2
191
- );
192
- }
193
-
194
- private OkayCamInstructionRefImg mapToRef(ReadableMap refMap, OkayCamFrameConfig frameConfig, String fileName) {
195
- if (refMap == null) return null;
196
- OkayCamLabelConfig title = mapToLabelConfig(refMap.getMap("title"));
197
- String img1 = getImageFromJs(refMap.getString("img"), frameConfig, fileName);
198
-
199
- return new OkayCamInstructionRefImg(title, img1);
200
- }
201
-
202
- private String getImageFromJs(String refImage, OkayCamFrameConfig frameConfig, String fileName) {
203
- Size size = frameConfig.getSize();
204
- int frameWidth = size.getWidth();
205
- int frameHeight = size.getHeight();
206
-
207
- Bitmap contentBmp = null;
208
- try {
209
- if (refImage != null) {
210
- // In debug, the image is returned as URL
211
- if (BuildConfig.DEBUG) {
212
- InputStream inputStream = new URL(refImage).openStream();
213
-
214
- if (refImage.contains("svg")) {
215
-
216
- SVG svg = SVG.getFromInputStream(inputStream);
217
-
218
- svg.setDocumentWidth(frameWidth);
219
- svg.setDocumentHeight(frameHeight);
220
-
221
- if (svg.getDocumentWidth() != -1) {
222
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
223
- (int) Math.ceil(svg.getDocumentHeight()),
224
- Bitmap.Config.ARGB_8888);
225
-
226
- Canvas bmcanvas = new Canvas(contentBmp);
227
-
228
- // Render our document onto our canvas
229
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
230
- }
231
- } else {
232
- contentBmp = BitmapFactory.decodeStream(inputStream);
233
- }
234
- } else {
235
- // In release, the image is returned as raw (svg) or drawable (png, jpeg and etc)
236
- int resourceId = this.getCurrentActivity().getResources().getIdentifier(refImage, "raw", this.getCurrentActivity().getPackageName());
237
-
238
- if (resourceId != 0) {
239
- SVG svg = SVG.getFromResource(getReactApplicationContext(), resourceId);
240
-
241
- svg.setDocumentWidth(frameWidth);
242
- svg.setDocumentHeight(frameHeight);
243
-
244
- if (svg.getDocumentWidth() != -1) {
245
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
246
- (int) Math.ceil(svg.getDocumentHeight()),
247
- Bitmap.Config.ARGB_8888);
248
-
249
- Canvas bmcanvas = new Canvas(contentBmp);
250
-
251
- // Render our document onto our canvas
252
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
253
- }
254
- } else {
255
- resourceId = this.getCurrentActivity().getResources().getIdentifier(refImage, "drawable", this.getCurrentActivity().getPackageName());
256
- contentBmp = BitmapFactory.decodeResource(getReactApplicationContext().getResources(), resourceId);
257
- }
258
- }
259
- }
260
- } catch (SVGParseException | MalformedURLException e) {
261
- e.printStackTrace();
262
- } catch (IOException e) {
263
- e.printStackTrace();
264
- }
265
-
266
- return generateFile(contentBmp, fileName);
267
- }
268
-
269
- private OkayCamPreviewConfig getPreviewConfig(ReadableMap preview, OkayCamFrameConfig frameConfig) {
270
- if (preview == null) return null;
271
- OkayCamLabelConfig title = mapToLabelConfig(preview.getMap("title"));
272
- OkayCamLabelConfig instr1 = mapToLabelConfig(preview.getMap("instruction1"));
273
- OkayCamLabelConfig instr2 = mapToLabelConfig(preview.getMap("instruction2"));
274
- OkayCamLabelConfig instr3 = mapToLabelConfig(preview.getMap("instruction3"));
275
-
276
- int bgColor = Color.parseColor(preview.getString("backgroundColor"));
277
-
278
- String refImage = preview.getString("refImage");
279
-
280
- Size size = frameConfig.getSize();
281
- int frameWidth = size.getWidth();
282
- int frameHeight = size.getHeight();
283
-
284
- Bitmap contentBmp = null;
285
- try {
286
- if (refImage != null) {
287
- // In debug, the image is returned as URL
288
- if (BuildConfig.DEBUG) {
289
- InputStream inputStream = new URL(refImage).openStream();
290
-
291
- if (refImage.contains("svg")) {
292
-
293
- SVG svg = SVG.getFromInputStream(inputStream);
294
-
295
- svg.setDocumentWidth(frameWidth);
296
- svg.setDocumentHeight(frameHeight);
297
-
298
- if (svg.getDocumentWidth() != -1) {
299
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
300
- (int) Math.ceil(svg.getDocumentHeight()),
301
- Bitmap.Config.ARGB_8888);
302
-
303
- Canvas bmcanvas = new Canvas(contentBmp);
304
-
305
- // Render our document onto our canvas
306
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
307
- }
308
- } else {
309
- contentBmp = BitmapFactory.decodeStream(inputStream);
310
- }
311
- } else {
312
- // In release, the image is returned as raw (svg) or drawable (png, jpeg and etc)
313
- int resourceId = this.getCurrentActivity().getResources().getIdentifier(refImage, "raw", this.getCurrentActivity().getPackageName());
314
-
315
- if (resourceId != 0) {
316
- SVG svg = SVG.getFromResource(getReactApplicationContext(), resourceId);
317
-
318
- svg.setDocumentWidth(frameWidth);
319
- svg.setDocumentHeight(frameHeight);
320
-
321
- if (svg.getDocumentWidth() != -1) {
322
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
323
- (int) Math.ceil(svg.getDocumentHeight()),
324
- Bitmap.Config.ARGB_8888);
325
-
326
- Canvas bmcanvas = new Canvas(contentBmp);
327
-
328
- // Render our document onto our canvas
329
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
330
- }
331
- } else {
332
- resourceId = this.getCurrentActivity().getResources().getIdentifier(refImage, "drawable", this.getCurrentActivity().getPackageName());
333
- contentBmp = BitmapFactory.decodeResource(getReactApplicationContext().getResources(), resourceId);
334
- }
335
- }
336
- }
337
- } catch (SVGParseException | MalformedURLException e) {
338
- e.printStackTrace();
339
- } catch (IOException e) {
340
- e.printStackTrace();
341
- }
342
-
343
-
344
- return new OkayCamPreviewConfig(
345
- title,
346
- generateFile(contentBmp, "ref.png"),
347
- instr1,
348
- instr2,
349
- instr3,
350
- bgColor
351
- );
352
-
353
- }
354
-
355
- private OkayCamLabelConfig mapToLabelConfig(ReadableMap map) {
356
- return new OkayCamLabelConfig(
357
- map.getString("text"),
358
- Color.parseColor(map.getString("color")),
359
- map.getInt("size")
360
- );
361
-
362
- }
363
-
364
- private OkayCamFrameConfig getFrameConfig(ReadableMap frameConfig) {
365
- ReadableMap frameSizeMap = frameConfig.getMap("size");
366
- String frameColor = frameConfig.getString("color");
367
- String frameContent = frameConfig.getString("content");
368
-
369
- int frameWidth = frameSizeMap.getInt("width");
370
- int frameHeight = frameSizeMap.getInt("height");
371
- Size frameSize = new Size(frameWidth, frameHeight);
372
-
373
- try {
374
- if (frameContent != null) {
375
- Bitmap contentBmp = null;
376
-
377
- // In debug, the image is returned as URL
378
- if (BuildConfig.DEBUG) {
379
- InputStream inputStream = new URL(frameContent).openStream();
380
-
381
- if (frameContent.contains("svg")) {
382
-
383
- SVG svg = SVG.getFromInputStream(inputStream);
384
-
385
- svg.setDocumentWidth(frameWidth);
386
- svg.setDocumentHeight(frameHeight);
387
-
388
- if (svg.getDocumentWidth() != -1) {
389
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
390
- (int) Math.ceil(svg.getDocumentHeight()),
391
- Bitmap.Config.ARGB_8888);
392
-
393
- Canvas bmcanvas = new Canvas(contentBmp);
394
-
395
- // Render our document onto our canvas
396
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
397
- }
398
- } else {
399
- contentBmp = BitmapFactory.decodeStream(inputStream);
400
- }
401
- } else {
402
- // In release, the image is returned as raw (svg) or drawable (png, jpeg and etc)
403
- int resourceId = this.getCurrentActivity().getResources().getIdentifier(frameContent, "raw", this.getCurrentActivity().getPackageName());
404
-
405
- if (resourceId != 0) {
406
- SVG svg = SVG.getFromResource(getReactApplicationContext(), resourceId);
407
-
408
- svg.setDocumentWidth(frameWidth);
409
- svg.setDocumentHeight(frameHeight);
410
-
411
- if (svg.getDocumentWidth() != -1) {
412
- contentBmp = Bitmap.createBitmap((int) Math.ceil(svg.getDocumentWidth()),
413
- (int) Math.ceil(svg.getDocumentHeight()),
414
- Bitmap.Config.ARGB_8888);
415
-
416
- Canvas bmcanvas = new Canvas(contentBmp);
417
-
418
- // Render our document onto our canvas
419
- svg.renderToCanvas(bmcanvas, new RenderOptions().preserveAspectRatio(PreserveAspectRatio.FULLSCREEN));
420
- }
421
- } else {
422
- resourceId = this.getCurrentActivity().getResources().getIdentifier(frameContent, "drawable", this.getCurrentActivity().getPackageName());
423
- contentBmp = BitmapFactory.decodeResource(getReactApplicationContext().getResources(), resourceId);
424
- }
425
- }
426
- return new OkayCamFrameConfig(frameSize, Color.parseColor(frameColor), generateFile(contentBmp, "content.png"));
427
- }
428
- } catch (SVGParseException | MalformedURLException e) {
429
- e.printStackTrace();
430
- } catch (IOException e) {
431
- e.printStackTrace();
432
- }
433
-
434
- return new OkayCamFrameConfig(frameSize, Color.parseColor(frameColor), null);
435
- }
436
-
437
- public String generateFile(Bitmap bitmap, String filename) {
438
- try {
439
- String resultedFolder = ".private";
440
- File privateFolder = this.getReactApplicationContext().getExternalFilesDir(resultedFolder);
441
-
442
- if (!privateFolder.exists()) {
443
- privateFolder.mkdir();
444
- }
445
-
446
- File file = new File(privateFolder, filename);
447
- file.createNewFile();
448
-
449
- FileOutputStream fos = new FileOutputStream(file.getAbsolutePath());
450
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
451
-
452
- return file.getAbsolutePath();
453
- } catch (IOException e) {
454
- e.printStackTrace();
455
- }
456
-
457
- return null;
458
- }
459
-
460
105
  @ReactMethod
461
106
  public void captureSelfie(ReadableMap configs, Promise promise) {
462
107
  String LICENSE_KEY = configs.getString("license");
@@ -508,15 +153,12 @@ public class RNOkayCamModule extends ReactContextBaseJavaModule {
508
153
  okaySelfieConfig.setImageQuality((float) userConfig.getDouble("imageQuality"));
509
154
 
510
155
  OkayCamSelfie.start(this.getCurrentActivity(), LICENSE_KEY, okaySelfieConfig, (success, image, exception) -> {
511
-
512
156
  if (success) {
513
-
514
157
  JSONObject results = new JSONObject();
515
158
  try {
516
159
  results.put("selfieImage", convertImgToBase64(base64, image));
517
160
  promise.resolve(results.toString());
518
161
  } catch (JSONException e) {
519
- // TODO Auto-generated catch block
520
162
  e.printStackTrace();
521
163
  promise.reject(this.getError(e.getMessage()));
522
164
  }
@@ -554,4 +196,19 @@ public class RNOkayCamModule extends ReactContextBaseJavaModule {
554
196
  }
555
197
  return new Exception(errorString);
556
198
  }
199
+
200
+ private OkayCamAutoCaptureMode parseMode(String mode) {
201
+ if (mode == null) return OkayCamAutoCaptureMode.FULL;
202
+
203
+ switch (mode) {
204
+ case "FRONT_ONLY":
205
+ return OkayCamAutoCaptureMode.FRONT_ONLY;
206
+ case "FRONT_BACK":
207
+ return OkayCamAutoCaptureMode.FRONT_BACK;
208
+ case "FRONT_WITH_FLASH":
209
+ return OkayCamAutoCaptureMode.FRONT_WITH_FLASH;
210
+ default:
211
+ return OkayCamAutoCaptureMode.FULL;
212
+ }
213
+ }
557
214
  }
package/index.ts CHANGED
@@ -1,15 +1,13 @@
1
- import {
2
- NativeModules,
3
- Dimensions,
4
- PixelRatio,
5
- Image,
6
- ImageResolvedAssetSource,
7
- Platform,
8
- } from "react-native";
1
+ import { NativeModules } from "react-native";
9
2
 
10
3
  const { RNOkayCam } = NativeModules;
11
4
 
12
- const screenWidth = Dimensions.get("screen").width;
5
+ export enum DocumentCaptureMode {
6
+ FULL = "FULL",
7
+ FRONT_ONLY = "FRONT_ONLY",
8
+ FRONT_BACK = "FRONT_BACK",
9
+ FRONT_WITH_FLASH = "FRONT_WITH_FLASH",
10
+ }
13
11
 
14
12
  interface LabelConfig {
15
13
  text: string;
@@ -17,52 +15,11 @@ interface LabelConfig {
17
15
  size: number;
18
16
  }
19
17
 
20
- interface OkayCamPreviewConfig {
21
- title: LabelConfig;
22
- refImage: ImageResolvedAssetSource;
23
- instruction1: LabelConfig;
24
- instruction2: LabelConfig;
25
- instruction3: LabelConfig;
26
- backgroundColor: string;
27
- }
28
-
29
- interface OkaycamInstructionRefImg {
30
- title: LabelConfig;
31
- img: ImageResolvedAssetSource;
32
- }
33
- interface OkayCamInstruction {
34
- title: LabelConfig;
35
- refImage1: OkaycamInstructionRefImg;
36
- refImage2?: OkaycamInstructionRefImg;
37
- }
38
-
39
- interface FrameSize {
40
- width: number;
41
- height: number;
42
- }
43
-
44
- interface Frame {
45
- size: FrameSize;
46
- color: string;
47
- content: ImageResolvedAssetSource;
48
- }
49
-
50
- interface TimerConfig {
51
- backgroundColor: string;
52
- textColor: string;
53
- }
54
-
55
18
  interface OkayCamBtnConfig {
56
19
  backgroundColor: string;
57
20
  contentColor: string;
58
21
  }
59
22
 
60
- interface CaptureConfig {
61
- delay: number;
62
- onFlash: Boolean;
63
- outputPath?: string;
64
- }
65
-
66
23
  interface SwitchBtnConfig {
67
24
  color: string;
68
25
  show: Boolean;
@@ -81,148 +38,29 @@ const labelConfig: LabelConfig = {
81
38
  size: 20,
82
39
  };
83
40
 
84
- const defaultFrame: Frame = {
85
- size: {
86
- width: screenWidth * 0.9,
87
- height: (screenWidth * 54) / 85,
88
- },
89
- color: defaultColor,
90
- content: null,
91
- };
92
-
93
- const timerConfig: TimerConfig = {
94
- backgroundColor: defaultColor2,
95
- textColor: defaultColor,
96
- };
97
-
98
41
  const okayCamBtnConfig: OkayCamBtnConfig = {
99
42
  backgroundColor: defaultColor2,
100
43
  contentColor: defaultColor,
101
44
  };
102
45
 
103
- const defaultCaptureBtnColor: string = defaultColor;
104
-
105
- const captureConfigFirst: CaptureConfig = {
106
- delay: 0,
107
- onFlash: false,
108
- outputPath: null,
109
- };
110
-
111
- const defaultPreview: OkayCamPreviewConfig = null;
112
-
113
- const defaultInstruction: OkayCamInstruction = null;
114
-
115
- const captureConfigSecond: CaptureConfig = null;
116
-
117
- const formatImage = (img: ImageResolvedAssetSource) => {
118
- return Image.resolveAssetSource(img).uri;
119
- // return img;
120
- };
121
-
122
- const formatInstruction = (
123
- instruction: OkayCamInstruction
124
- ): OkayCamInstruction => {
125
- if (instruction == null) return null;
126
-
127
- const ref1: OkaycamInstructionRefImg = {
128
- ...instruction.refImage1,
129
- img: formatImage(instruction.refImage1.img),
130
- };
131
-
132
- let ref2: OkaycamInstructionRefImg = null;
133
- if (instruction.refImage2 != null) {
134
- ref2 = {
135
- ...instruction.refImage2,
136
- img: formatImage(instruction.refImage2.img),
137
- };
138
- }
139
-
140
- const formattedInstruction: OkayCamInstruction = {
141
- title: instruction.title,
142
- refImage1: ref1,
143
- refImage2: ref2,
144
- };
145
- return formattedInstruction;
146
- };
147
-
148
46
  // cal native capture document
149
47
  export const captureDocument = (
150
48
  license: string,
151
49
  base64: Boolean,
152
50
  {
153
- showOverlay = true,
154
- topLabel = labelConfig,
155
- bottomLabel = labelConfig,
156
- frame = defaultFrame,
157
- timer = timerConfig,
158
- torchBtnEnabled = false,
159
- confirmBtnConfig = okayCamBtnConfig,
160
- retakeBtnConfig = okayCamBtnConfig,
161
- captureBtnColor = defaultCaptureBtnColor,
162
- firstPhotoConfig = captureConfigFirst,
163
- secondPhotoConfig = captureConfigSecond,
164
- crop = false,
165
51
  width = imageResizedWidth,
166
52
  imageQuality = 1.0,
167
- preview = defaultPreview,
168
- instruction = defaultInstruction,
169
- showPreviewInstruction = false,
170
- autoCapture = true,
171
- }
53
+ mode = DocumentCaptureMode.FULL,
54
+ },
172
55
  ) => {
173
- if (frame.size == undefined) {
174
- frame.size = defaultFrame.size;
175
- }
176
-
177
- const resultedPreview =
178
- preview == null
179
- ? null
180
- : {
181
- ...preview,
182
- refImage: Image.resolveAssetSource(preview.refImage).uri,
183
- };
184
-
185
56
  return new Promise(function (resolve, reject) {
186
57
  RNOkayCam.captureDocument({
187
58
  license: license,
188
59
  base64: base64,
189
60
  config: {
190
- showOverlay: showOverlay,
191
- topLabel: topLabel,
192
- bottomLabel: bottomLabel,
193
- frame: {
194
- size: Platform.select({
195
- android: {
196
- width: PixelRatio.getPixelSizeForLayoutSize(frame.size.width),
197
- height: PixelRatio.getPixelSizeForLayoutSize(frame.size.height),
198
- },
199
- ios: {
200
- width: frame.size.width,
201
- height: frame.size.height,
202
- },
203
- }),
204
- color: frame.color != null ? frame.color : defaultFrame.color,
205
- content:
206
- frame.content != null
207
- ? Image.resolveAssetSource(frame.content).uri
208
- : null,
209
- },
210
- timer: timer,
211
- torchBtnEnabled: torchBtnEnabled,
212
- confirmBtnConfig: confirmBtnConfig,
213
- retakeBtnConfig: retakeBtnConfig,
214
- captureBtnColor: captureBtnColor,
215
- captureConfigPair: {
216
- firstPhoto: firstPhotoConfig,
217
- secondPhoto: secondPhotoConfig,
218
- },
219
- crop: crop,
220
61
  width: width,
221
62
  imageQuality: imageQuality,
222
- preview: resultedPreview,
223
- instruction: formatInstruction(instruction),
224
- showPreviewInstruction: showPreviewInstruction,
225
- autoCapture: autoCapture,
63
+ mode: mode,
226
64
  },
227
65
  })
228
66
  .then((result) => {
@@ -255,7 +93,7 @@ export const captureSelfie = (
255
93
  defaultCameraFacing = cameraFacing,
256
94
  width = imageResizedWidth,
257
95
  imageQuality = 1.0,
258
- }
96
+ },
259
97
  ) => {
260
98
  return new Promise(function (resolve, reject) {
261
99
  RNOkayCam.captureSelfie({
@@ -20,124 +20,32 @@ class RNOkayCam: NSObject {
20
20
  let license = configs.object(forKey: "license")! as! String
21
21
  let base64 = configs.object(forKey: "base64") as! Bool
22
22
  let rnOkayCamConfig = configs.object(forKey: "config") as! NSDictionary
23
- let topLabel = rnOkayCamConfig.object(forKey: "topLabel") as! NSDictionary
24
- let bottomLabel = rnOkayCamConfig.object(forKey: "bottomLabel") as! NSDictionary
25
-
26
- // frame configurations
27
- let frame = rnOkayCamConfig.object(forKey: "frame") as? NSDictionary
28
- let frameSize = frame?.object(forKey: "size") as? NSDictionary
29
- let frameWidth = frameSize?.object(forKey: "width") as? CGFloat
30
- let frameHeight = frameSize?.object(forKey: "height") as? CGFloat
31
- let frameColor = frame?.object(forKey: "color") as! String
32
- let frameContent = frame?.object(forKey: "content") as? String
33
-
34
- let showOverlay = rnOkayCamConfig.object(forKey: "showOverlay") as! Bool
35
23
 
36
- let timer = rnOkayCamConfig.object(forKey: "timer") as! NSDictionary
37
- let captureBtnColor = rnOkayCamConfig.object(forKey: "captureBtnColor") as! String
38
- let captureConfigPair = rnOkayCamConfig.object(forKey: "captureConfigPair") as! NSDictionary
39
- let confirmBtnConfig = rnOkayCamConfig.object(forKey: "confirmBtnConfig") as! NSDictionary
40
- let retakeBtnConfig = rnOkayCamConfig.object(forKey: "retakeBtnConfig") as! NSDictionary
41
- let firstPhoto = captureConfigPair.object(forKey: "firstPhoto") as! NSDictionary
42
- let secondPhoto = captureConfigPair.object(forKey: "secondPhoto") as? NSDictionary
43
- let crop = rnOkayCamConfig.object(forKey: "crop") as! Bool
44
- let torchBtnEnabled = rnOkayCamConfig.object(forKey: "torchBtnEnabled") as! Bool
45
24
  let width = rnOkayCamConfig.object(forKey: "width") as! Int
46
25
  let imageQuality = rnOkayCamConfig.object(forKey: "imageQuality") as! CGFloat
47
- let autoCapture = rnOkayCamConfig.object(forKey: "autoCapture") as! Bool
26
+ let mode = rnOkayCamConfig.object(forKey: "mode") as? String
48
27
 
49
28
  DispatchQueue.main.async {
50
- let rootViewController = (UIApplication.shared.keyWindow?.rootViewController)!
51
-
52
- let okayCamConfig = OkayCamConfig(viewController: rootViewController)
53
-
54
- // top label
55
- okayCamConfig.topLabel.text = topLabel.object(forKey: "text") as! String
56
- okayCamConfig.topLabel.color = self.hexStringToUIColor(hex: topLabel.object(forKey: "color") as! String)
57
- okayCamConfig.topLabel.size = CGFloat(topLabel.object(forKey: "size") as! Int)
58
-
59
- // bottom label
60
- okayCamConfig.bottomLabel.text = bottomLabel.object(forKey: "text") as! String
61
- okayCamConfig.bottomLabel.color = self.hexStringToUIColor(hex: bottomLabel.object(forKey: "color") as! String)
62
- okayCamConfig.bottomLabel.size = bottomLabel.object(forKey: "size") as! CGFloat
63
-
64
- // frame size
65
- if (frameSize != nil) {
66
- okayCamConfig.frame.size = CGSize(width: frameWidth!, height: frameHeight!)
67
- }
68
-
69
- // frame color
70
- okayCamConfig.frame.color = self.hexStringToUIColor(hex: frameColor)
71
-
72
- // frame contet
73
- if (frameContent != nil) {
74
- #if DEBUG
75
- okayCamConfig.frame.content = URL(string: frameContent!)
76
- #else
77
- okayCamConfig.frame.content = URL(fileURLWithPath: frameContent!.replacingOccurrences(of: "file:///", with: ""))
78
- #endif
29
+ guard let rootViewController = UIApplication.shared.windows.first?.rootViewController else {
30
+ reject("no_root_view_controller", "Root view controller not found", nil)
31
+ return
79
32
  }
80
33
 
81
- okayCamConfig.showOverlay = showOverlay
82
-
83
- // timer
84
- okayCamConfig.timer.backgroundColor = self.hexStringToUIColor(hex: timer.object(forKey: "backgroundColor") as! String,alpha:0.5)
85
- okayCamConfig.timer.textColor = self.hexStringToUIColor(hex: timer.object(forKey: "textColor") as! String)
86
-
87
- // capture button color
88
- okayCamConfig.captureBtnColor = self.hexStringToUIColor(hex: captureBtnColor)
89
-
90
- // show torch button
91
- okayCamConfig.torchBtnEnabled = torchBtnEnabled
34
+ let config = OkayCamAutoCaptureConfig(viewController: rootViewController)
92
35
 
93
- // set image quality
94
- okayCamConfig.imageQuality = imageQuality
95
-
96
- // confirm button config
97
- okayCamConfig.confirmBtnConfig.backgroundColor = self.hexStringToUIColor(hex: confirmBtnConfig.object(forKey: "backgroundColor") as! String)
98
- okayCamConfig.confirmBtnConfig.contentColor = self.hexStringToUIColor(hex: confirmBtnConfig.object(forKey: "contentColor") as! String)
36
+ // if (width != -1) {
37
+ // config.width = width
38
+ // }
99
39
 
100
- // retake button config
101
- okayCamConfig.retakeBtnConfig.backgroundColor = self.hexStringToUIColor(hex: retakeBtnConfig.object(forKey: "backgroundColor") as! String)
102
- okayCamConfig.retakeBtnConfig.contentColor = self.hexStringToUIColor(hex: retakeBtnConfig.object(forKey: "contentColor") as! String)
103
-
104
- // capture configurations
105
- let firstPhotoPath = firstPhoto.object(forKey: "outputPath") as? String
106
- let secondPhotoPath = secondPhoto?.object(forKey: "outputPath") as? String
107
- okayCamConfig.captureConfigPair = CaptureConfigPair(
108
- firstPhoto: OkayCamCaptureConfig(
109
- timeOut: firstPhoto.object(forKey: "delay") as! Int,
110
- onFlash: firstPhoto.object(forKey: "onFlash") as! Bool,
111
- outputPath: (firstPhotoPath != nil) ? URL(string: (firstPhoto.object(forKey: "outputPath") as? String)!) : nil
112
- ),
113
- secondPhoto: (secondPhoto != nil) ? OkayCamCaptureConfig(
114
- timeOut: secondPhoto?.object(forKey: "delay") as? Int ?? 0,
115
- onFlash: secondPhoto?.object(forKey: "onFlash") as? Bool ?? false,
116
- outputPath: (secondPhotoPath != nil) ? URL(string: (secondPhoto?.object(forKey: "outputPath") as! String?)!) : nil
117
- ) : nil
118
- )
119
-
120
- okayCamConfig.crop = crop
121
-
122
- if (width != -1) {
123
- okayCamConfig.width = width
40
+ if (imageQuality > 0.0) {
41
+ config.imageQuality = imageQuality
124
42
  }
125
-
126
- // preview config
127
-
128
- let previewConfig = rnOkayCamConfig.object(forKey: "preview") as? NSDictionary
129
-
130
- okayCamConfig.preview = self.getOkaycamPreview(previewConfig: previewConfig)
131
43
 
132
- // instruction config
133
- let instructionConfig = rnOkayCamConfig.object(forKey: "instruction") as? NSDictionary
134
- okayCamConfig.instruction = self.getOkayCamInstruction(instructionConfig: instructionConfig)
135
-
136
- okayCamConfig.autoCapture = autoCapture
44
+ config.mode = self.parseMode(mode)
137
45
 
138
46
  // start the SDK
139
- OkayCamDoc.start(
140
- okayCamConfig: okayCamConfig,
47
+ OkayCamDocAutoCapture.start(
48
+ okayCamConfig: config,
141
49
  license: license,
142
50
  { filePaths, error in
143
51
  // handle error
@@ -179,71 +87,6 @@ class RNOkayCam: NSObject {
179
87
  }
180
88
  }
181
89
 
182
- func getOkaycamPreview(previewConfig: NSDictionary?) -> OkayCamPreviewConfig?{
183
- if previewConfig == nil { return nil}
184
-
185
-
186
- let title = configToOkayCamLabel(config: previewConfig?.object(forKey: "title") as! NSDictionary)
187
-
188
- let instr1 = configToOkayCamLabel(config: previewConfig?.object(forKey: "instruction1") as! NSDictionary)
189
-
190
- let instr2 = configToOkayCamLabel(config: previewConfig?.object(forKey: "instruction2") as! NSDictionary)
191
-
192
- let instr3 = configToOkayCamLabel(config: previewConfig?.object(forKey: "instruction3") as! NSDictionary)
193
-
194
- let bgColor = self.hexStringToUIColor(hex: previewConfig?.object(forKey: "backgroundColor") as! String)
195
-
196
- // frame contet
197
- let ref = previewConfig?.object(forKey: "refImage") as? String
198
- var refUrl:URL? = nil
199
- if (ref != nil) {
200
- #if DEBUG
201
- refUrl = URL(string: ref!)!
202
- #else
203
- refUrl = URL(fileURLWithPath: ref!.replacingOccurrences(of: "file:///", with: ""))
204
- #endif
205
- }
206
-
207
- return OkayCamPreviewConfig(title: title, refImage: refUrl!, instruction1: instr1, instruction2: instr2, instruction3: instr3, backgroundColor: bgColor)
208
- }
209
-
210
- func getOkayCamInstruction(instructionConfig: NSDictionary?) -> OkayCamInstruction?{
211
- if instructionConfig == nil {return nil}
212
-
213
- let title = configToOkayCamLabel(config: instructionConfig?.object(forKey: "title") as! NSDictionary)
214
-
215
- let ref1 = getInstructionRefImage(refImage: instructionConfig?.object(forKey: "refImage1") as! NSDictionary)
216
-
217
- let ref2 = getInstructionRefImage(refImage: instructionConfig?.object(forKey: "refImage2") as? NSDictionary)
218
-
219
- return OkayCamInstruction(title:title,refImage1:ref1!,refImage2:ref2)
220
- }
221
-
222
- func getInstructionRefImage(refImage:NSDictionary?) -> OkaycamInstructionRefImg?{
223
- if refImage == nil {return nil}
224
-
225
- let title = configToOkayCamLabel(config: refImage?.object(forKey: "title") as! NSDictionary)
226
-
227
- // frame contet
228
- let ref = refImage?.object(forKey: "img") as? String
229
- var refUrl:URL? = nil
230
- if (ref != nil) {
231
- #if DEBUG
232
- refUrl = URL(string: ref!)!
233
- #else
234
- refUrl = URL(fileURLWithPath: ref!.replacingOccurrences(of: "file:///", with: ""))
235
- #endif
236
- }
237
- return OkaycamInstructionRefImg(title:title,img:refUrl!)
238
- }
239
-
240
- func configToOkayCamLabel(config:NSDictionary) -> OkayCamLabelConfig{
241
- let text = config.object(forKey: "text") as! String
242
- let color = self.hexStringToUIColor(hex: config.object(forKey: "color") as! String)
243
- let size = CGFloat(config.object(forKey: "size") as! Int)
244
- return OkayCamLabelConfig(text: text, color: color, size: size)
245
- }
246
-
247
90
  @objc func captureSelfie(_ configs: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
248
91
 
249
92
  let license = configs.object(forKey: "license")! as! String
@@ -260,8 +103,11 @@ class RNOkayCam: NSObject {
260
103
  let imageQuality = rnOkayCamConfig.object(forKey: "imageQuality") as! CGFloat
261
104
 
262
105
  DispatchQueue.main.async {
263
- let rootViewController = (UIApplication.shared.keyWindow?.rootViewController)!
264
-
106
+ guard let rootViewController = UIApplication.shared.windows.first?.rootViewController else {
107
+ reject("no_root_view_controller", "Root view controller not found", nil)
108
+ return
109
+ }
110
+
265
111
  let okaySelfieConfig = OkaySelfieConfig(viewController: rootViewController)
266
112
 
267
113
  // top label
@@ -403,5 +249,26 @@ class RNOkayCam: NSObject {
403
249
  reject("no error", "no error", nil)
404
250
  return
405
251
  }
252
+
253
+ }
254
+
255
+ func parseMode(_ mode: String?) -> OkayCamAutoCaptureMode {
256
+ guard let mode = mode else {
257
+ return .full
258
+ }
259
+
260
+ switch mode {
261
+ case "FRONT_ONLY":
262
+ return .frontOnly
263
+
264
+ case "FRONT_BACK":
265
+ return .frontBack
266
+
267
+ case "FRONT_WITH_FLASH":
268
+ return .frontWithFlash
269
+
270
+ default:
271
+ return .full
272
+ }
406
273
  }
407
274
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-okaycam",
3
3
  "title": "React Native OkayCam",
4
- "version": "3.0.3",
4
+ "version": "3.0.4",
5
5
  "description": "React-Native version of OkayCam",
6
6
  "main": "index.ts",
7
7
  "files": [
@@ -26,7 +26,7 @@ Pod::Spec.new do |s|
26
26
  s.dependency "React-RCTFabric"
27
27
 
28
28
  # OkayCam CocoaPod dependency
29
- s.dependency "OkayCam", "3.0.12"
29
+ s.dependency "OkayCam", "3.0.15"
30
30
  s.dependency "CryptoSwift", "1.8.2"
31
31
 
32
32
  s.pod_target_xcconfig = {