diff --git a/app/src/main/java/com/simplemobiletools/flashlight/MyCameraImpl.java b/app/src/main/java/com/simplemobiletools/flashlight/MyCameraImpl.java index 63b1dd9..b880523 100644 --- a/app/src/main/java/com/simplemobiletools/flashlight/MyCameraImpl.java +++ b/app/src/main/java/com/simplemobiletools/flashlight/MyCameraImpl.java @@ -50,13 +50,15 @@ public class MyCameraImpl { if (!mIsStroboscopeRunning) disableFlashlight(); - if (mCamera == null) { - initCamera(); - } + if (!Utils.isNougat()) { + if (mCamera == null) { + initCamera(); + } - if (mCamera == null) { - Utils.showToast(mContext, R.string.camera_error); - return false; + if (mCamera == null) { + Utils.showToast(mContext, R.string.camera_error); + return false; + } } if (mIsStroboscopeRunning) { @@ -181,6 +183,7 @@ public class MyCameraImpl { mBus.unregister(this); } mIsFlashlightOn = false; + mShouldStroboscopeStop = true; } private boolean isMarshmallow() { @@ -197,38 +200,53 @@ public class MyCameraImpl { mShouldStroboscopeStop = false; mIsStroboscopeRunning = true; - if (mCamera == null) { - initCamera(); - } - - Camera.Parameters torchOn = mCamera.getParameters(); - Camera.Parameters torchOff = mCamera.getParameters(); - torchOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); - torchOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); - - while (!mShouldStroboscopeStop) { - try { - mCamera.setParameters(torchOn); - Thread.sleep(mStroboFrequency); - mCamera.setParameters(torchOff); - Thread.sleep(mStroboFrequency); - } catch (InterruptedException ignored) { - mShouldStroboscopeStop = true; - } catch (RuntimeException ignored) { - mShouldStroboscopeStop = true; - } - } - - try { - if (mCamera != null) { - mCamera.setParameters(torchOff); - if (!mShouldEnableFlashlight || mIsMarshmallow) { - mCamera.release(); - mCamera = null; + if (Utils.isNougat()) { + while (!mShouldStroboscopeStop) { + try { + mMarshmallowCamera.toggleMarshmallowFlashlight(mBus, true); + Thread.sleep(mStroboFrequency); + mMarshmallowCamera.toggleMarshmallowFlashlight(mBus, false); + Thread.sleep(mStroboFrequency); + } catch (InterruptedException ignored) { + mShouldStroboscopeStop = true; + } catch (RuntimeException ignored) { + mShouldStroboscopeStop = true; } } - } catch (RuntimeException ignored) { + } else { + if (mCamera == null) { + initCamera(); + } + Camera.Parameters torchOn = mCamera.getParameters(); + Camera.Parameters torchOff = mCamera.getParameters(); + torchOn.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); + torchOff.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); + + while (!mShouldStroboscopeStop) { + try { + mCamera.setParameters(torchOn); + Thread.sleep(mStroboFrequency); + mCamera.setParameters(torchOff); + Thread.sleep(mStroboFrequency); + } catch (InterruptedException ignored) { + mShouldStroboscopeStop = true; + } catch (RuntimeException ignored) { + mShouldStroboscopeStop = true; + } + } + + try { + if (mCamera != null) { + mCamera.setParameters(torchOff); + if (!mShouldEnableFlashlight || mIsMarshmallow) { + mCamera.release(); + mCamera = null; + } + } + } catch (RuntimeException ignored) { + + } } mIsStroboscopeRunning = false; diff --git a/app/src/main/java/com/simplemobiletools/flashlight/Utils.java b/app/src/main/java/com/simplemobiletools/flashlight/Utils.java index 60281c7..42a8971 100644 --- a/app/src/main/java/com/simplemobiletools/flashlight/Utils.java +++ b/app/src/main/java/com/simplemobiletools/flashlight/Utils.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; +import android.os.Build; import android.widget.Toast; public class Utils { @@ -20,4 +21,8 @@ public class Utils { public static void showToast(Context context, int resId) { Toast.makeText(context, context.getResources().getString(resId), Toast.LENGTH_SHORT).show(); } + + public static boolean isNougat() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; + } } diff --git a/app/src/main/java/com/simplemobiletools/flashlight/activities/MainActivity.java b/app/src/main/java/com/simplemobiletools/flashlight/activities/MainActivity.java index 6d29d84..c389dfd 100644 --- a/app/src/main/java/com/simplemobiletools/flashlight/activities/MainActivity.java +++ b/app/src/main/java/com/simplemobiletools/flashlight/activities/MainActivity.java @@ -115,7 +115,7 @@ public class MainActivity extends SimpleActivity { private void toggleStroboscope() { // use the old Camera API for stroboscope, the new Camera Manager is way too slow - if (isCameraPermissionGranted()) { + if (isCameraPermissionGranted() || Utils.isNougat()) { if (mCameraImpl.toggleStroboscope()) { mStroboscopeBar.setVisibility(mStroboscopeBar.getVisibility() == View.VISIBLE ? View.INVISIBLE : View.VISIBLE); changeIconColor(mStroboscopeBar.getVisibility() == View.VISIBLE ? R.color.colorPrimary : R.color.translucent_white, mStroboscopeBtn);