diff --git a/app/src/main/java/app/grapheneos/camera/CamConfig.kt b/app/src/main/java/app/grapheneos/camera/CamConfig.kt
index dd08dd91..9a85028f 100644
--- a/app/src/main/java/app/grapheneos/camera/CamConfig.kt
+++ b/app/src/main/java/app/grapheneos/camera/CamConfig.kt
@@ -114,6 +114,8 @@ class CamConfig(private val mActivity: MainActivity) {
const val ENABLE_ZSL = "enable_zsl"
+ const val LOW_LIGHT_BOOST = "low_light_boost"
+
// const val IMAGE_FILE_FORMAT = "image_quality"
// const val VIDEO_FILE_FORMAT = "video_quality"
}
@@ -159,6 +161,8 @@ class CamConfig(private val mActivity: MainActivity) {
const val ENABLE_ZSL = false
+ const val LOW_LIGHT_BOOST = true
+
// const val IMAGE_FILE_FORMAT = ""
// const val VIDEO_FILE_FORMAT = ""
}
@@ -558,6 +562,19 @@ class CamConfig(private val mActivity: MainActivity) {
editor.apply()
}
+ var lowLightBoost: Boolean
+ get() {
+ return commonPref.getBoolean(
+ SettingValues.Key.LOW_LIGHT_BOOST,
+ SettingValues.Default.LOW_LIGHT_BOOST
+ )
+ }
+ set(value) {
+ val editor = commonPref.edit()
+ editor.putBoolean(SettingValues.Key.LOW_LIGHT_BOOST, value)
+ editor.apply()
+ }
+
val isZslSupported : Boolean by lazy {
camera!!.cameraInfo.isZslSupported
}
@@ -1286,7 +1303,13 @@ class CamConfig(private val mActivity: MainActivity) {
loadTabs()
- camera?.cameraInfo?.zoomState?.observe(mActivity) {
+ val cameraInfo = camera!!.cameraInfo
+
+ if (cameraInfo.isLowLightBoostSupported && lowLightBoost) {
+ camera!!.cameraControl.enableLowLightBoostAsync(lowLightBoost)
+ }
+
+ cameraInfo.zoomState?.observe(mActivity) {
if (it.linearZoom != 0f || it.zoomRatio != 1f) {
mActivity.zoomBar.updateThumb()
}
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 18b228fb..3bc6fd4f 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
@@ -4,6 +4,7 @@ import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.Rect
+import android.os.Build
import android.os.Bundle
import android.view.KeyEvent
import android.view.MotionEvent
@@ -236,6 +237,22 @@ open class MoreSettings : AppCompatActivity(), TextView.OnEditorActionListener {
}
}
+ // Setting only for Android 15 and above
+ val lowLightBoostSetting = binding.lowLightBoostSetting
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
+ lowLightBoostSetting.visibility = View.VISIBLE
+
+ val lowLightToggle = binding.lowLightBoostToggle
+ lowLightToggle.isChecked = camConfig.lowLightBoost
+ lowLightToggle.setOnClickListener {
+ camConfig.lowLightBoost = !camConfig.lowLightBoost
+ }
+
+ lowLightBoostSetting.setOnClickListener {
+ lowLightToggle.performClick()
+ }
+ }
+
if (!showStorageSettings) {
binding.storageLocationSettings.visibility = View.GONE
}
diff --git a/app/src/main/res/drawable/low_light_boost.xml b/app/src/main/res/drawable/low_light_boost.xml
new file mode 100644
index 00000000..6309884d
--- /dev/null
+++ b/app/src/main/res/drawable/low_light_boost.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/more_settings.xml b/app/src/main/res/layout/more_settings.xml
index c3b8117f..6882e2f8 100644
--- a/app/src/main/res/layout/more_settings.xml
+++ b/app/src/main/res/layout/more_settings.xml
@@ -165,6 +165,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The video\'s audio recording has been muted
The video\'s audio recording has been unmuted
+ Low Light Boost
+ Activates low light boost whenever available and required for better pictures in darker environment
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 8e62752d..f2713009 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -3041,6 +3041,14 @@
+
+
+
+
+
+
+
+