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