11package com .simplemobiletools .flashlight ;
22
3- import android .annotation .TargetApi ;
43import android .content .Context ;
54import android .hardware .Camera ;
6- import android .hardware .camera2 .CameraAccessException ;
7- import android .hardware .camera2 .CameraManager ;
8- import android .os .Build ;
95import android .util .Log ;
106
117public class MyCameraImpl {
@@ -15,15 +11,18 @@ public class MyCameraImpl {
1511 private boolean isFlashlightOn ;
1612 private MyCamera callback ;
1713 private Context context ;
14+ private boolean isMarshmallow ;
15+ private MarshmallowCamera marshmallowCamera ;
1816
1917 public MyCameraImpl (MyCamera camera , Context cxt ) {
2018 callback = camera ;
2119 context = cxt ;
22- setupCamera ();
20+ isMarshmallow = isMarshmallow ();
21+ handleCameraSetup ();
2322 }
2423
2524 public void toggleFlashlight () {
26- setupCamera ();
25+ handleCameraSetup ();
2726 isFlashlightOn = !isFlashlightOn ;
2827
2928 if (isFlashlightOn ) {
@@ -33,8 +32,22 @@ public void toggleFlashlight() {
3332 }
3433 }
3534
36- public void setupCamera () {
37- if (isMarshmallow ())
35+ public void handleCameraSetup () {
36+ if (isMarshmallow ) {
37+ setupMarshmallowCamera ();
38+ } else {
39+ setupCamera ();
40+ }
41+ }
42+
43+ private void setupMarshmallowCamera () {
44+ if (marshmallowCamera == null ) {
45+ marshmallowCamera = new MarshmallowCamera (callback , context );
46+ }
47+ }
48+
49+ private void setupCamera () {
50+ if (isMarshmallow )
3851 return ;
3952
4053 if (camera == null ) {
@@ -54,7 +67,7 @@ public void setupCamera() {
5467 }
5568
5669 private void enableFlashlight () {
57- if (isMarshmallow () ) {
70+ if (isMarshmallow ) {
5871 toggleMarshmallowFlashlight (true );
5972 } else {
6073 if (camera == null || params == null )
@@ -79,16 +92,8 @@ private void disableFlashlight() {
7992 callback .disableFlashlight ();
8093 }
8194
82- @ TargetApi (Build .VERSION_CODES .M )
8395 private void toggleMarshmallowFlashlight (boolean enable ) {
84- try {
85- final CameraManager manager = (CameraManager ) context .getSystemService (Context .CAMERA_SERVICE );
86- final String [] list = manager .getCameraIdList ();
87- manager .setTorchMode (list [0 ], enable );
88- } catch (CameraAccessException e ) {
89- Log .e (TAG , "toggle marshmallow flashlight " + e .getMessage ());
90- callback .cameraUnavailable ();
91- }
96+ marshmallowCamera .toggleMarshmallowFlashlight (enable );
9297 }
9398
9499 public void releaseCamera () {
0 commit comments