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 b8c93c6cd..58e3ba65b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java @@ -70,17 +70,18 @@ public class Camera1Fragment extends LoggingFragment implements CameraFragment, private static final String TAG = Log.tag(Camera1Fragment.class); - private TextureView cameraPreview; - private ViewGroup controlsContainer; - private ImageButton flipButton; - private View captureButton; - private Camera1Controller camera; - private Controller controller; - private OrderEnforcer orderEnforcer; - private Camera1Controller.Properties properties; - private RotationListener rotationListener; - private Disposable rotationListenerDisposable; - private Disposable mostRecentItemDisposable = Disposable.disposed(); + private TextureView cameraPreview; + private ViewGroup controlsContainer; + private ImageButton flipButton; + private View captureButton; + private Camera1Controller camera; + private Controller controller; + private OrderEnforcer orderEnforcer; + private Camera1Controller.Properties properties; + private RotationListener rotationListener; + private Disposable rotationListenerDisposable; + private Disposable mostRecentItemDisposable = Disposable.disposed(); + private CameraScreenBrightnessController cameraScreenBrightnessController; private boolean isThumbAvailable; private boolean isMediaSelected; @@ -124,6 +125,8 @@ 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()); + getViewLifecycleOwner().getLifecycle().addObserver(cameraScreenBrightnessController); rotationListener = new RotationListener(requireContext()); cameraPreview = view.findViewById(R.id.camera_preview); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt new file mode 100644 index 000000000..8fca14111 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraScreenBrightnessController.kt @@ -0,0 +1,35 @@ +package org.thoughtcrime.securesms.mediasend + +import android.view.Window +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner + +/** + * Modifies screen brightness to increase to a max of 66% if lower than that for optimal picture + * taking conditions. + */ +class CameraScreenBrightnessController(private val window: Window) : DefaultLifecycleObserver { + + companion object { + private const val MIN_CAMERA_BRIGHTNESS = 0.66f + } + + private var originalBrightness: Float = 0f + + override fun onResume(owner: LifecycleOwner) { + val originalBrightness = window.attributes.screenBrightness + if (originalBrightness < MIN_CAMERA_BRIGHTNESS) { + window.attributes = window.attributes.apply { + screenBrightness = MIN_CAMERA_BRIGHTNESS + } + } + } + + override fun onPause(owner: LifecycleOwner) { + if (originalBrightness > 0f && window.attributes.screenBrightness == MIN_CAMERA_BRIGHTNESS) { + window.attributes = window.attributes.apply { + screenBrightness = originalBrightness + } + } + } +} 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 15de7c43b..d6a839cf2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -25,7 +25,10 @@ import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.camera.core.CameraInfo; import androidx.camera.core.CameraSelector; +import androidx.camera.core.ExposureState; +import androidx.camera.core.FocusMeteringAction; import androidx.camera.core.ImageCapture; import androidx.camera.core.ImageCaptureException; import androidx.camera.core.ImageProxy; @@ -81,14 +84,15 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment { private static final Rational ASPECT_RATIO_16_9 = new Rational(16, 9); private static final PreviewView.ScaleType PREVIEW_SCALE_TYPE = PreviewView.ScaleType.FILL_CENTER; - private PreviewView previewView; - private ViewGroup controlsContainer; - private Controller controller; - private View selfieFlash; - private MemoryFileDescriptor videoFileDescriptor; - private LifecycleCameraController cameraController; - private Disposable mostRecentItemDisposable = Disposable.disposed(); - private CameraXModePolicy cameraXModePolicy; + private PreviewView previewView; + private ViewGroup controlsContainer; + private Controller controller; + private View selfieFlash; + private MemoryFileDescriptor videoFileDescriptor; + private LifecycleCameraController cameraController; + private Disposable mostRecentItemDisposable = Disposable.disposed(); + private CameraXModePolicy cameraXModePolicy; + private CameraScreenBrightnessController cameraScreenBrightnessController; private boolean isThumbAvailable; private boolean isMediaSelected; @@ -134,6 +138,9 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment { @SuppressLint("MissingPermission") @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + cameraScreenBrightnessController = new CameraScreenBrightnessController(requireActivity().getWindow()); + getViewLifecycleOwner().getLifecycle().addObserver(cameraScreenBrightnessController); + ViewGroup cameraParent = view.findViewById(R.id.camerax_camera_parent); this.previewView = view.findViewById(R.id.camerax_camera);