77import android .media .MediaRecorder ;
88import android .os .Build ;
99import android .os .Handler ;
10+ import android .support .v4 .util .SparseArrayCompat ;
1011import android .util .Log ;
1112import android .support .annotation .Nullable ;
1213import android .view .MotionEvent ;
1314import android .view .SurfaceHolder ;
1415import android .view .View ;
1516
17+ import com .flurgle .camerakit .CameraKit .Constants ;
18+
1619import java .io .File ;
1720import java .io .IOException ;
1821import java .util .ArrayList ;
@@ -37,6 +40,16 @@ public class Camera1 extends CameraImpl {
3740 private static final int FOCUS_METERING_AREA_WEIGHT_DEFAULT = 1000 ;
3841 private static final int DELAY_MILLIS_BEFORE_RESETTING_FOCUS = 3000 ;
3942
43+ private static final SparseArrayCompat <String > FLASH_MODES = new SparseArrayCompat <>();
44+
45+ static {
46+ FLASH_MODES .put (Constants .FLASH_OFF , Camera .Parameters .FLASH_MODE_OFF );
47+ FLASH_MODES .put (Constants .FLASH_ON , Camera .Parameters .FLASH_MODE_ON );
48+ FLASH_MODES .put (Constants .FLASH_TORCH , Camera .Parameters .FLASH_MODE_TORCH );
49+ FLASH_MODES .put (Constants .FLASH_AUTO , Camera .Parameters .FLASH_MODE_AUTO );
50+ }
51+
52+
4053 private int mCameraId ;
4154 private Camera mCamera ;
4255 private Camera .Parameters mCameraParameters ;
@@ -135,25 +148,18 @@ void setFacing(@Facing int facing) {
135148 }
136149 }
137150
151+
138152 @ Override
139153 void setFlash (@ Flash int flash ) {
140- if (mCameraParameters != null ) {
141- List <String > flashes = mCameraParameters .getSupportedFlashModes ();
142- String internalFlash = new ConstantMapper .Flash (flash ).map ();
143- if (flashes != null && flashes .contains (internalFlash )) {
144- mCameraParameters .setFlashMode (internalFlash );
145- mFlash = flash ;
146- } else {
147- String currentFlash = new ConstantMapper .Flash (mFlash ).map ();
148- if (flashes == null || !flashes .contains (currentFlash )) {
149- mCameraParameters .setFlashMode (Camera .Parameters .FLASH_MODE_OFF );
150- mFlash = FLASH_OFF ;
151- }
154+ if (flash == mFlash ) {
155+ return ;
156+ }
157+ try {
158+ if (setFlashInternal (flash )) {
159+ mCamera .setParameters (mCameraParameters );
152160 }
153-
154- mCamera .setParameters (mCameraParameters );
155- } else {
156- mFlash = flash ;
161+ } catch (Exception ex ){
162+ ex .printStackTrace ();
157163 }
158164 }
159165
@@ -581,51 +587,51 @@ private void prepareMediaRecorder() {
581587 private CamcorderProfile getCamcorderProfile (@ VideoQuality int videoQuality ) {
582588 CamcorderProfile camcorderProfile = null ;
583589 switch (videoQuality ) {
584- case CameraKit . Constants .VIDEO_QUALITY_QVGA :
590+ case Constants .VIDEO_QUALITY_QVGA :
585591 if (CamcorderProfile .hasProfile (mCameraId , CamcorderProfile .QUALITY_QVGA )) {
586592 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_QVGA );
587593 } else {
588- return getCamcorderProfile (CameraKit . Constants .VIDEO_QUALITY_LOWEST );
594+ return getCamcorderProfile (Constants .VIDEO_QUALITY_LOWEST );
589595 }
590596 break ;
591597
592- case CameraKit . Constants .VIDEO_QUALITY_480P :
598+ case Constants .VIDEO_QUALITY_480P :
593599 if (CamcorderProfile .hasProfile (mCameraId , CamcorderProfile .QUALITY_480P )) {
594600 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_480P );
595601 } else {
596- return getCamcorderProfile (CameraKit . Constants .VIDEO_QUALITY_QVGA );
602+ return getCamcorderProfile (Constants .VIDEO_QUALITY_QVGA );
597603 }
598604 break ;
599605
600- case CameraKit . Constants .VIDEO_QUALITY_720P :
606+ case Constants .VIDEO_QUALITY_720P :
601607 if (CamcorderProfile .hasProfile (mCameraId , CamcorderProfile .QUALITY_720P )) {
602608 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_720P );
603609 } else {
604- return getCamcorderProfile (CameraKit . Constants .VIDEO_QUALITY_480P );
610+ return getCamcorderProfile (Constants .VIDEO_QUALITY_480P );
605611 }
606612 break ;
607613
608- case CameraKit . Constants .VIDEO_QUALITY_1080P :
614+ case Constants .VIDEO_QUALITY_1080P :
609615 if (CamcorderProfile .hasProfile (mCameraId , CamcorderProfile .QUALITY_1080P )) {
610616 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_1080P );
611617 } else {
612- return getCamcorderProfile (CameraKit . Constants .VIDEO_QUALITY_720P );
618+ return getCamcorderProfile (Constants .VIDEO_QUALITY_720P );
613619 }
614620 break ;
615621
616- case CameraKit . Constants .VIDEO_QUALITY_2160P :
622+ case Constants .VIDEO_QUALITY_2160P :
617623 try {
618624 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_2160P );
619625 } catch (Exception e ) {
620- return getCamcorderProfile (CameraKit . Constants .VIDEO_QUALITY_HIGHEST );
626+ return getCamcorderProfile (Constants .VIDEO_QUALITY_HIGHEST );
621627 }
622628 break ;
623629
624- case CameraKit . Constants .VIDEO_QUALITY_HIGHEST :
630+ case Constants .VIDEO_QUALITY_HIGHEST :
625631 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_HIGH );
626632 break ;
627633
628- case CameraKit . Constants .VIDEO_QUALITY_LOWEST :
634+ case Constants .VIDEO_QUALITY_LOWEST :
629635 camcorderProfile = CamcorderProfile .get (mCameraId , CamcorderProfile .QUALITY_LOW );
630636 break ;
631637 }
@@ -764,5 +770,28 @@ private static int calculateCenter(float coord, int dimen, int buffer) {
764770 return normalized ;
765771 }
766772 }
767-
773+ /**
774+ * @return {@code true} if {@link #mCameraParameters} was modified.
775+ */
776+ private boolean setFlashInternal (int flash ) {
777+ if (isCameraOpened ()) {
778+ List <String > modes = mCameraParameters .getSupportedFlashModes ();
779+ String mode = FLASH_MODES .get (flash );
780+ if (modes != null && modes .contains (mode )) {
781+ mCameraParameters .setFlashMode (mode );
782+ mFlash = flash ;
783+ return true ;
784+ }
785+ String currentMode = FLASH_MODES .get (mFlash );
786+ if (modes == null || !modes .contains (currentMode )) {
787+ mCameraParameters .setFlashMode (Camera .Parameters .FLASH_MODE_OFF );
788+ mFlash = Constants .FLASH_OFF ;
789+ return true ;
790+ }
791+ return false ;
792+ } else {
793+ mFlash = flash ;
794+ return false ;
795+ }
796+ }
768797}
0 commit comments