Signal-Android/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java

79 wiersze
2.2 KiB
Java

package org.thoughtcrime.securesms.mediasend;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageCapture;
import androidx.camera.view.CameraController;
@RequiresApi(21)
final class CameraXSelfieFlashHelper {
private static final float MAX_SCREEN_BRIGHTNESS = 1f;
private static final float MAX_SELFIE_FLASH_ALPHA = 0.9f;
private final Window window;
private final CameraController camera;
private final View selfieFlash;
private float brightnessBeforeFlash;
private boolean inFlash;
private int flashMode = -1;
CameraXSelfieFlashHelper(@NonNull Window window,
@NonNull CameraController camera,
@NonNull View selfieFlash)
{
this.window = window;
this.camera = camera;
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;
WindowManager.LayoutParams params = window.getAttributes();
brightnessBeforeFlash = params.screenBrightness;
params.screenBrightness = MAX_SCREEN_BRIGHTNESS;
window.setAttributes(params);
selfieFlash.setAlpha(MAX_SELFIE_FLASH_ALPHA);
}
void endFlash() {
if (!inFlash) return;
WindowManager.LayoutParams params = window.getAttributes();
params.screenBrightness = brightnessBeforeFlash;
window.setAttributes(params);
camera.setImageCaptureFlashMode(flashMode);
flashMode = -1;
selfieFlash.setAlpha(MAX_SELFIE_FLASH_ALPHA);
inFlash = false;
}
private boolean shouldUseViewBasedFlash() {
CameraSelector cameraSelector = camera.getCameraSelector() ;
return (camera.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON || flashMode == ImageCapture.FLASH_MODE_ON) &&
cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA;
}
}