12
12
import android .support .annotation .RestrictTo ;
13
13
import android .support .annotation .RestrictTo .Scope ;
14
14
import android .util .AttributeSet ;
15
+ import android .util .Log ;
15
16
import android .view .ViewGroup ;
16
17
17
18
import com .camerakit .type .CameraFacing ;
@@ -223,6 +224,7 @@ public interface FrameCallback {
223
224
private PermissionsListener mPermissionsListener ;
224
225
225
226
private CameraPreview mCameraPreview ;
227
+ private boolean isStarted = false ;
226
228
227
229
public CameraKitView (Context context ) {
228
230
super (context );
@@ -253,6 +255,58 @@ private void obtainAttributes(Context context, AttributeSet attrs) {
253
255
mImageJpegQuality = a .getInteger (R .styleable .CameraKitView_camera_imageJpegQuality , 100 );
254
256
255
257
a .recycle ();
258
+
259
+ mCameraPreview = new CameraPreview (getContext ());
260
+ addView (mCameraPreview );
261
+ mCameraPreview .setListener (new CameraPreview .Listener () {
262
+ @ Override
263
+ public void onCameraOpened () {
264
+ if (mCameraListener != null ) {
265
+ post (new Runnable () {
266
+ @ Override
267
+ public void run () {
268
+ mCameraListener .onOpened ();
269
+ }
270
+ });
271
+ }
272
+ }
273
+
274
+ @ Override
275
+ public void onCameraClosed () {
276
+ if (mCameraListener != null ) {
277
+ post (new Runnable () {
278
+ @ Override
279
+ public void run () {
280
+ mCameraListener .onClosed ();
281
+ }
282
+ });
283
+ }
284
+ }
285
+
286
+ @ Override
287
+ public void onPreviewStarted () {
288
+ if (mPreviewListener != null ) {
289
+ post (new Runnable () {
290
+ @ Override
291
+ public void run () {
292
+ mPreviewListener .onStart ();
293
+ }
294
+ });
295
+ }
296
+ }
297
+
298
+ @ Override
299
+ public void onPreviewStopped () {
300
+ if (mPreviewListener != null ) {
301
+ post (new Runnable () {
302
+ @ Override
303
+ public void run () {
304
+ mPreviewListener .onStop ();
305
+ }
306
+ });
307
+ }
308
+ }
309
+ });
256
310
}
257
311
258
312
@ Override
@@ -321,7 +375,7 @@ protected void onPinch(float ds, float dsx, float dsy) {
321
375
}
322
376
}
323
377
324
- public void onResume () {
378
+ public void onStart () {
325
379
if (isInEditMode ()) {
326
380
return ;
327
381
}
@@ -340,7 +394,7 @@ public void onResume() {
340
394
if (activity != null ) {
341
395
List <String > requestPermissions = new ArrayList <>();
342
396
List <String > rationalePermissions = new ArrayList <>();
343
- for (String permission : missingPermissions ) {
397
+ for (String permission : missingPermissions ) {
344
398
if (!activity .shouldShowRequestPermissionRationale (permission )) {
345
399
requestPermissions .add (permission );
346
400
} else {
@@ -364,73 +418,37 @@ public void onResume() {
364
418
mPermissionsListener .onPermissionsSuccess ();
365
419
}
366
420
367
- removeAllViews ();
368
- mCameraPreview = new CameraPreview (getContext ());
369
- mCameraPreview .setListener (new CameraPreview .Listener () {
370
- @ Override
371
- public void onCameraOpened () {
372
- if (mCameraListener != null ) {
373
- post (new Runnable () {
374
- @ Override
375
- public void run () {
376
- mCameraListener .onOpened ();
377
- }
378
- });
379
- }
380
- }
381
421
382
- @ Override
383
- public void onCameraClosed () {
384
- if (mCameraListener != null ) {
385
- post (new Runnable () {
386
- @ Override
387
- public void run () {
388
- mCameraListener .onClosed ();
389
- }
390
- });
391
- }
392
- }
422
+ setFlash (mFlash );
423
+ setImageMegaPixels (mImageMegaPixels );
393
424
394
- @ Override
395
- public void onPreviewStarted () {
396
- if (mPreviewListener != null ) {
397
- post (new Runnable () {
398
- @ Override
399
- public void run () {
400
- mPreviewListener .onStart ();
401
- }
402
- });
403
- }
404
- }
425
+ isStarted = true ;
426
+ if (getFacing () == CameraKit .FACING_BACK ) {
427
+ mCameraPreview .start (CameraFacing .BACK );
428
+ } else {
429
+ mCameraPreview .start (CameraFacing .FRONT );
430
+ }
431
+ }
405
432
406
- @ Override
407
- public void onPreviewStopped () {
408
- if (mPreviewListener != null ) {
409
- post (new Runnable () {
410
- @ Override
411
- public void run () {
412
- mPreviewListener .onStop ();
413
- }
414
- });
415
- }
416
- }
417
- });
433
+ public void onStop () {
434
+ if (isInEditMode ()) {
435
+ return ;
436
+ }
418
437
419
- setFlash (mFlash );
420
- setImageMegaPixels (mImageMegaPixels );
438
+ if (isStarted ) {
439
+ isStarted = false ;
440
+ mCameraPreview .stop ();
441
+ }
442
+ }
421
443
422
- addView (mCameraPreview );
444
+ public void onResume () {
445
+ if (isInEditMode ()) {
446
+ return ;
447
+ }
423
448
424
- mCameraPreview .post (new Runnable () {
425
- @ Override
426
- public void run () {
427
- if (getFacing () == CameraKit .FACING_BACK ) {
428
- mCameraPreview .start (CameraFacing .BACK );
429
- } else {
430
- mCameraPreview .start (CameraFacing .FRONT );
431
- }
432
- }
433
- });
449
+ if (isStarted ) {
450
+ mCameraPreview .resume ();
451
+ }
434
452
}
435
453
436
454
/**
@@ -441,16 +459,29 @@ public void onPause() {
441
459
return ;
442
460
}
443
461
444
- if (mCameraPreview != null ) {
462
+ if (isStarted ) {
463
+ mCameraPreview .pause ();
464
+ }
465
+ }
466
+
467
+ @ Override
468
+ protected void onSizeChanged (int w , int h , int oldw , int oldh ) {
469
+ super .onSizeChanged (w , h , oldw , oldh );
470
+ if (isStarted && mCameraPreview != null && w > 0 && h > 0 ) {
445
471
mCameraPreview .stop ();
472
+ if (getFacing () == CameraKit .FACING_BACK ) {
473
+ mCameraPreview .start (CameraFacing .BACK );
474
+ } else {
475
+ mCameraPreview .start (CameraFacing .FRONT );
476
+ }
446
477
}
447
478
}
448
479
449
480
/**
450
481
* @param callback
451
482
*/
452
483
public void captureImage (final ImageCallback callback ) {
453
- if (mCameraPreview != null ) {
484
+ if (isStarted && mCameraPreview != null ) {
454
485
mCameraPreview .capturePhoto (new CameraPreview .PhotoCallback () {
455
486
@ Override
456
487
public void onCapture (@ NotNull final byte [] jpeg ) {
@@ -592,6 +623,10 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
592
623
deniedPermissions = deniedPermissions | flag ;
593
624
}
594
625
}
626
+
627
+ if (!isStarted ) {
628
+ onStart ();
629
+ }
595
630
}
596
631
}
597
632
@@ -633,14 +668,8 @@ public float getAspectRatio() {
633
668
public void setFacing (@ CameraKit .Facing int facing ) {
634
669
mFacing = facing ;
635
670
636
- if (mCameraPreview != null ) {
637
- mCameraPreview .stop ();
638
-
639
- if (facing == CameraKit .FACING_BACK ) {
640
- mCameraPreview .start (CameraFacing .BACK );
641
- } else {
642
- mCameraPreview .start (CameraFacing .FRONT );
643
- }
671
+ if (isStarted && mCameraPreview != null ) {
672
+ mCameraPreview .setFacing (facing == CameraKit .FACING_BACK ? CameraFacing .BACK : CameraFacing .FRONT );
644
673
}
645
674
}
646
675
@@ -674,7 +703,7 @@ public void toggleFacing() {
674
703
public void setFlash (@ CameraKit .Flash int flash ) {
675
704
mFlash = flash ;
676
705
677
- if (mCameraPreview != null ) {
706
+ if (isStarted && mCameraPreview != null ) {
678
707
switch (flash ) {
679
708
case CameraKit .FLASH_OFF : {
680
709
mCameraPreview .setFlash (CameraFlash .OFF );
@@ -809,7 +838,7 @@ public int getPermissions() {
809
838
810
839
public void setImageMegaPixels (float imageMegaPixels ) {
811
840
mImageMegaPixels = imageMegaPixels ;
812
- if (mCameraPreview != null ) {
841
+ if (isStarted && mCameraPreview != null ) {
813
842
mCameraPreview .setImageMegaPixels (mImageMegaPixels , null );
814
843
}
815
844
}
@@ -914,15 +943,15 @@ public ErrorListener getErrorListener() {
914
943
}
915
944
916
945
public CameraSize getPreviewResolution () {
917
- if (mCameraPreview == null ) {
946
+ if (! isStarted || mCameraPreview == null ) {
918
947
return null ;
919
948
}
920
949
921
950
return mCameraPreview .getPreviewSize ();
922
951
}
923
952
924
953
public CameraSize getPhotoResolution () {
925
- if (mCameraPreview == null ) {
954
+ if (! isStarted || mCameraPreview == null ) {
926
955
return null ;
927
956
}
928
957
0 commit comments