From a6a185004de849b7eb5c4947a90085fd4daafcaa Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 12 Dec 2022 12:53:25 -0400 Subject: [PATCH] Only brighten screen when flash is ON and camera is FRONT. --- .../securesms/mediasend/Camera1Fragment.java | 21 +++++++++++- .../CameraScreenBrightnessController.kt | 21 +++++++++--- .../securesms/mediasend/CameraXFragment.java | 34 +++++++++++++++---- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java index 7eaab4949..ec8ba8890 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java @@ -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; + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt index c6efee523..b109edeae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt @@ -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 } } 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 e659b26f3..d2a8c80a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -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; + } + } }