Only brighten screen when flash is ON and camera is FRONT.

main
Alex Hart 2022-12-12 12:53:25 -04:00 zatwierdzone przez GitHub
rodzic 3cc556d803
commit a6a185004d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 65 dodań i 11 usunięć

Wyświetl plik

@ -121,7 +121,7 @@ public class Camera1Fragment extends LoggingFragment implements CameraFragment,
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
cameraScreenBrightnessController = new CameraScreenBrightnessController(requireActivity().getWindow(), () -> camera.isCameraFacingFront());
cameraScreenBrightnessController = new CameraScreenBrightnessController(requireActivity().getWindow(), new CameraStateProvider(camera));
getViewLifecycleOwner().getLifecycle().addObserver(cameraScreenBrightnessController);
rotationListener = new RotationListener(requireContext());
@ -477,4 +477,23 @@ public class Camera1Fragment extends LoggingFragment implements CameraFragment,
private enum Stage {
SURFACE_AVAILABLE, CAMERA_PROPERTIES_AVAILABLE
}
private static class CameraStateProvider implements CameraScreenBrightnessController.CameraStateProvider {
private final Camera1Controller camera1Controller;
private CameraStateProvider(Camera1Controller camera1Controller) {
this.camera1Controller = camera1Controller;
}
@Override
public boolean isFrontFacingCameraSelected() {
return camera1Controller.isCameraFacingFront();
}
@Override
public boolean isFlashEnabled() {
return false;
}
}
}

Wyświetl plik

@ -8,7 +8,10 @@ import androidx.lifecycle.LifecycleOwner
* Modifies screen brightness to increase to a max of 66% if lower than that for optimal picture
* taking conditions. This brightness is only applied when the front-facing camera is selected.
*/
class CameraScreenBrightnessController(private val window: Window, private val cameraDirectionProvider: CameraDirectionProvider) : DefaultLifecycleObserver {
class CameraScreenBrightnessController(
private val window: Window,
private val cameraStateProvider: CameraStateProvider
) : DefaultLifecycleObserver {
companion object {
private const val FRONT_CAMERA_BRIGHTNESS = 0.66f
@ -17,7 +20,8 @@ class CameraScreenBrightnessController(private val window: Window, private val c
private val originalBrightness: Float by lazy { window.attributes.screenBrightness }
override fun onResume(owner: LifecycleOwner) {
onCameraDirectionChanged(cameraDirectionProvider.isFrontFacingCameraSelected())
onCameraDirectionChanged(cameraStateProvider.isFrontFacingCameraSelected())
onCameraFlashChanged(cameraStateProvider.isFlashEnabled())
}
override fun onPause(owner: LifecycleOwner) {
@ -29,7 +33,15 @@ class CameraScreenBrightnessController(private val window: Window, private val c
* the `CameraDirectionProvider` at this point.
*/
fun onCameraDirectionChanged(isFrontFacing: Boolean) {
if (isFrontFacing) {
if (isFrontFacing && cameraStateProvider.isFlashEnabled()) {
enableBrightness()
} else {
disableBrightness()
}
}
fun onCameraFlashChanged(isFlashEnabled: Boolean) {
if (isFlashEnabled && cameraStateProvider.isFrontFacingCameraSelected()) {
enableBrightness()
} else {
disableBrightness()
@ -52,7 +64,8 @@ class CameraScreenBrightnessController(private val window: Window, private val c
}
}
interface CameraDirectionProvider {
interface CameraStateProvider {
fun isFrontFacingCameraSelected(): Boolean
fun isFlashEnabled(): Boolean
}
}

Wyświetl plik

@ -134,11 +134,6 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
@SuppressLint("MissingPermission")
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
cameraScreenBrightnessController = new CameraScreenBrightnessController(
requireActivity().getWindow(),
() -> cameraController.getCameraSelector() == CameraSelector.DEFAULT_FRONT_CAMERA
);
ViewGroup cameraParent = view.findViewById(R.id.camerax_camera_parent);
this.previewView = view.findViewById(R.id.camerax_camera);
@ -156,6 +151,11 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
cameraController.setImageCaptureMode(CameraXUtil.getOptimalCaptureMode());
cameraXModePolicy.initialize(cameraController);
cameraScreenBrightnessController = new CameraScreenBrightnessController(
requireActivity().getWindow(),
new CameraStateProvider(cameraController)
);
previewView.setScaleType(PREVIEW_SCALE_TYPE);
previewView.setController(cameraController);
@ -344,7 +344,10 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
flashButton.setAutoFlashEnabled(cameraController.getImageCaptureFlashMode() >= ImageCapture.FLASH_MODE_AUTO);
flashButton.setFlash(cameraController.getImageCaptureFlashMode());
flashButton.setOnFlashModeChangedListener(cameraController::setImageCaptureFlashMode);
flashButton.setOnFlashModeChangedListener(mode -> {
cameraController.setImageCaptureFlashMode(mode);
cameraScreenBrightnessController.onCameraFlashChanged(mode == ImageCapture.FLASH_MODE_ON);
});
galleryButton.setOnClickListener(v -> controller.onGalleryClicked());
countButton.setOnClickListener(v -> controller.onCameraCountButtonClicked());
@ -556,4 +559,23 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment {
flipButton.setVisibility(View.GONE);
}
}
private static class CameraStateProvider implements CameraScreenBrightnessController.CameraStateProvider {
private final CameraController cameraController;
private CameraStateProvider(CameraController cameraController) {
this.cameraController = cameraController;
}
@Override
public boolean isFrontFacingCameraSelected() {
return cameraController.getCameraSelector() == CameraSelector.DEFAULT_FRONT_CAMERA;
}
@Override
public boolean isFlashEnabled() {
return cameraController.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON;
}
}
}