Fix view-based selfie flash.
This commit is contained in:
parent
6cb359b2d0
commit
5a1a23d9ac
2 changed files with 13 additions and 1 deletions
|
@ -458,6 +458,7 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
|
||||||
selfieFlash
|
selfieFlash
|
||||||
);
|
);
|
||||||
|
|
||||||
|
flashHelper.onWillTakePicture();
|
||||||
cameraController.takePicture(Executors.mainThreadExecutor(), new ImageCapture.OnImageCapturedCallback() {
|
cameraController.takePicture(Executors.mainThreadExecutor(), new ImageCapture.OnImageCapturedCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onCaptureSuccess(@NonNull ImageProxy image) {
|
public void onCaptureSuccess(@NonNull ImageProxy image) {
|
||||||
|
|
|
@ -23,6 +23,7 @@ final class CameraXSelfieFlashHelper {
|
||||||
|
|
||||||
private float brightnessBeforeFlash;
|
private float brightnessBeforeFlash;
|
||||||
private boolean inFlash;
|
private boolean inFlash;
|
||||||
|
private int flashMode = -1;
|
||||||
|
|
||||||
CameraXSelfieFlashHelper(@NonNull Window window,
|
CameraXSelfieFlashHelper(@NonNull Window window,
|
||||||
@NonNull CameraController camera,
|
@NonNull CameraController camera,
|
||||||
|
@ -33,6 +34,13 @@ final class CameraXSelfieFlashHelper {
|
||||||
this.selfieFlash = selfieFlash;
|
this.selfieFlash = selfieFlash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onWillTakePicture() {
|
||||||
|
if (!inFlash && shouldUseViewBasedFlash()) {
|
||||||
|
flashMode = camera.getImageCaptureFlashMode();
|
||||||
|
camera.setImageCaptureFlashMode(ImageCapture.FLASH_MODE_OFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void startFlash() {
|
void startFlash() {
|
||||||
if (inFlash || !shouldUseViewBasedFlash()) return;
|
if (inFlash || !shouldUseViewBasedFlash()) return;
|
||||||
inFlash = true;
|
inFlash = true;
|
||||||
|
@ -56,6 +64,9 @@ final class CameraXSelfieFlashHelper {
|
||||||
params.screenBrightness = brightnessBeforeFlash;
|
params.screenBrightness = brightnessBeforeFlash;
|
||||||
window.setAttributes(params);
|
window.setAttributes(params);
|
||||||
|
|
||||||
|
camera.setImageCaptureFlashMode(flashMode);
|
||||||
|
flashMode = -1;
|
||||||
|
|
||||||
selfieFlash.animate()
|
selfieFlash.animate()
|
||||||
.alpha(0f)
|
.alpha(0f)
|
||||||
.setDuration(SELFIE_FLASH_DURATION_MS);
|
.setDuration(SELFIE_FLASH_DURATION_MS);
|
||||||
|
@ -66,7 +77,7 @@ final class CameraXSelfieFlashHelper {
|
||||||
private boolean shouldUseViewBasedFlash() {
|
private boolean shouldUseViewBasedFlash() {
|
||||||
CameraSelector cameraSelector = camera.getCameraSelector() ;
|
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;
|
cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue