diff --git a/app/src/main/java/app/grapheneos/camera/CamConfig.kt b/app/src/main/java/app/grapheneos/camera/CamConfig.kt index 128205f54..f8f3469c6 100644 --- a/app/src/main/java/app/grapheneos/camera/CamConfig.kt +++ b/app/src/main/java/app/grapheneos/camera/CamConfig.kt @@ -105,6 +105,10 @@ class CamConfig(private val mActivity: MainActivity) { const val REMOVE_EXIF_AFTER_CAPTURE = "remove_exif_after_capture" + const val PERSIST_EXPOSURE_LEVEL = "persist_exposure_level" + + const val EXPOSURE_LEVEL = "exposure_level" + const val GYROSCOPE_SUGGESTIONS = "gyroscope_suggestions" const val CAMERA_SOUNDS = "camera_sounds" @@ -150,6 +154,10 @@ class CamConfig(private val mActivity: MainActivity) { const val REMOVE_EXIF_AFTER_CAPTURE = true + const val PERSIST_EXPOSURE_LEVEL = false + + const val EXPOSURE_LEVEL = 0 + const val GYROSCOPE_SUGGESTIONS = false const val CAMERA_SOUNDS = true @@ -539,6 +547,50 @@ class CamConfig(private val mActivity: MainActivity) { editor.apply() } + var persistExposureLevel: Boolean + get() { + return commonPref.getBoolean( + SettingValues.Key.PERSIST_EXPOSURE_LEVEL, + SettingValues.Default.PERSIST_EXPOSURE_LEVEL + ) + } + set(value) { + val editor = commonPref.edit() + editor.putBoolean( + SettingValues.Key.PERSIST_EXPOSURE_LEVEL, + value + ) + editor.apply() + } + + private val exposureLevelKey: String + get() { + + val pf = if (lensFacing == CameraSelector.LENS_FACING_FRONT) { + "FRONT" + } else { + "BACK" + } + + return "${SettingValues.Key.EXPOSURE_LEVEL}_$pf" + } + + var exposureLevel: Int + get() { + return modePref.getInt( + exposureLevelKey, + SettingValues.Default.EXPOSURE_LEVEL, + ) + } + set(value) { + val editor = modePref.edit() + editor.putInt( + exposureLevelKey, + value + ) + editor.apply() + } + var gSuggestions: Boolean get() { return commonPref.getBoolean( @@ -1262,6 +1314,10 @@ class CamConfig(private val mActivity: MainActivity) { mActivity.zoomBar.updateThumb(false) + if (persistExposureLevel) { + camera?.cameraControl?.setExposureCompensationIndex(exposureLevel) + } + camera?.cameraInfo?.exposureState?.let { mActivity.exposureBar.setExposureConfig(it) } mActivity.settingsDialog.torchToggle.isChecked = false diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt index 18b228fbf..447fb812e 100644 --- a/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt +++ b/app/src/main/java/app/grapheneos/camera/ui/activities/MoreSettings.kt @@ -236,6 +236,14 @@ open class MoreSettings : AppCompatActivity(), TextView.OnEditorActionListener { } } + val persistExposureToggle = binding.persistExposureLevelToggle + + persistExposureToggle.isChecked = camConfig.persistExposureLevel + + persistExposureToggle.setOnClickListener { + camConfig.persistExposureLevel = persistExposureToggle.isChecked + } + if (!showStorageSettings) { binding.storageLocationSettings.visibility = View.GONE } diff --git a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt index 1b22d4d20..37c17ef80 100644 --- a/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt +++ b/app/src/main/java/app/grapheneos/camera/ui/seekbar/ExposureBar.kt @@ -46,12 +46,7 @@ class ExposureBar : AppCompatSeekBar { max = exposureState.exposureCompensationRange.upper min = exposureState.exposureCompensationRange.lower - incrementProgressBy(exposureState.exposureCompensationIndex) - - Log.i("TAG", "Setting progress from setExposureConfig") - progress = (exposureState.exposureCompensationStep.numerator - / exposureState.exposureCompensationStep.denominator) * - exposureState.exposureCompensationIndex + progress = exposureState.exposureCompensationIndex onSizeChanged(width, height, 0, 0) } @@ -109,11 +104,10 @@ class ExposureBar : AppCompatSeekBar { MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP -> { progress = max - (max * event.y / (height / 2)).toInt() - Log.i("progress", progress.toString()) - Log.i("max", max.toString()) + Log.d("progress", progress.toString()) + Log.d("max", max.toString()) - mainActivity.camConfig.camera?.cameraControl - ?.setExposureCompensationIndex(progress) + updateExposureCompensationIndex(progress) showPanel() @@ -124,4 +118,13 @@ class ExposureBar : AppCompatSeekBar { } return true } + + private fun updateExposureCompensationIndex(exposureCompensationIndex: Int) { + mainActivity.camConfig.camera?.cameraControl + ?.setExposureCompensationIndex(progress) + + if (mainActivity.camConfig.persistExposureLevel) { + mainActivity.camConfig.exposureLevel = exposureCompensationIndex + } + } } diff --git a/app/src/main/res/drawable/exposure_icon_adaptable.xml b/app/src/main/res/drawable/exposure_icon_adaptable.xml new file mode 100644 index 000000000..f07ede563 --- /dev/null +++ b/app/src/main/res/drawable/exposure_icon_adaptable.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/more_settings.xml b/app/src/main/res/layout/more_settings.xml index c3b8117f2..a5bc4729f 100644 --- a/app/src/main/res/layout/more_settings.xml +++ b/app/src/main/res/layout/more_settings.xml @@ -719,6 +719,81 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9aa6ae1eb..bd7610b81 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -193,4 +193,8 @@ The video\'s audio recording has been muted The video\'s audio recording has been unmuted + + Miscellaneous + Persist exposure level + Saves the last exposure level that was set by the user