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 @@ + + + + + + + +