diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java index 0037397bda..208a725b38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -458,6 +458,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment { selfieFlash ); + flashHelper.onWillTakePicture(); cameraController.takePicture(Executors.mainThreadExecutor(), new ImageCapture.OnImageCapturedCallback() { @Override public void onCaptureSuccess(@NonNull ImageProxy image) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java index 6e7f310337..dc0e016136 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java @@ -23,6 +23,7 @@ final class CameraXSelfieFlashHelper { private float brightnessBeforeFlash; private boolean inFlash; + private int flashMode = -1; CameraXSelfieFlashHelper(@NonNull Window window, @NonNull CameraController camera, @@ -33,6 +34,13 @@ final class CameraXSelfieFlashHelper { this.selfieFlash = selfieFlash; } + void onWillTakePicture() { + if (!inFlash && shouldUseViewBasedFlash()) { + flashMode = camera.getImageCaptureFlashMode(); + camera.setImageCaptureFlashMode(ImageCapture.FLASH_MODE_OFF); + } + } + void startFlash() { if (inFlash || !shouldUseViewBasedFlash()) return; inFlash = true; @@ -56,6 +64,9 @@ final class CameraXSelfieFlashHelper { params.screenBrightness = brightnessBeforeFlash; window.setAttributes(params); + camera.setImageCaptureFlashMode(flashMode); + flashMode = -1; + selfieFlash.animate() .alpha(0f) .setDuration(SELFIE_FLASH_DURATION_MS); @@ -66,7 +77,7 @@ final class CameraXSelfieFlashHelper { private boolean shouldUseViewBasedFlash() { CameraSelector cameraSelector = camera.getCameraSelector() ; - return camera.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON && + return (camera.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON || flashMode == ImageCapture.FLASH_MODE_ON) && cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA; } }