summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Bellegarde <cedric.bellegarde@adishatz.org>2021-05-14 00:53:09 +0200
committerJan Altensen <info@stricted.net>2021-08-23 18:11:53 +0200
commit00712220684bdb143e3a43fc1afe8dd722a1c054 (patch)
treecbf9f5e659fec97446ce2477d279928f5262b15f
parent8a27e35325bf9131020993364645b74d8a9786fc (diff)
AutoBrightness: Add support for one shot auto-brightness:
- Only update auto brightness one time when screen is turned on. - Can be useful on devices where sensor is not accurate. Change-Id: I5187fdb7765550d4eaa999317ab95f487d44c8d8
-rw-r--r--services/core/java/com/android/server/display/AutomaticBrightnessController.java22
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java20
2 files changed, 40 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 36d69c93c1cb..d816dd215155 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -211,6 +211,8 @@ class AutomaticBrightnessController {
private DisplayDeviceConfig mDisplayDeviceConfig;
private final Injector mInjector;
+ private boolean mAutoBrightnessOneShot;
+
AutomaticBrightnessController(Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor, BrightnessMappingStrategy mapper,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
@@ -273,6 +275,7 @@ class AutomaticBrightnessController {
mPendingForegroundAppPackageName = null;
mForegroundAppCategory = ApplicationInfo.CATEGORY_UNDEFINED;
mPendingForegroundAppCategory = ApplicationInfo.CATEGORY_UNDEFINED;
+ mAutoBrightnessOneShot = false;
}
/**
@@ -312,7 +315,8 @@ class AutomaticBrightnessController {
public void configure(boolean enable, @Nullable BrightnessConfiguration configuration,
float brightness, boolean userChangedBrightness, float adjustment,
- boolean userChangedAutoBrightnessAdjustment, int displayPolicy) {
+ boolean userChangedAutoBrightnessAdjustment, int displayPolicy,
+ boolean autoBrightnessOneShot) {
// While dozing, the application processor may be suspended which will prevent us from
// receiving new information from the light sensor. On some devices, we may be able to
// switch to a wake-up light sensor instead but for now we will simply disable the sensor
@@ -321,6 +325,7 @@ class AutomaticBrightnessController {
boolean dozing = (displayPolicy == DisplayPowerRequest.POLICY_DOZE);
boolean changed = setBrightnessConfiguration(configuration);
changed |= setDisplayPolicy(displayPolicy);
+
if (userChangedAutoBrightnessAdjustment) {
changed |= setAutoBrightnessAdjustment(adjustment);
}
@@ -337,6 +342,8 @@ class AutomaticBrightnessController {
changed |= setLightSensorEnabled(enable && !dozing);
if (changed) {
updateAutoBrightness(false /*sendUpdate*/, userInitiatedChange);
+ } else {
+ handleSettingsChange(autoBrightnessOneShot);
}
}
@@ -352,6 +359,16 @@ class AutomaticBrightnessController {
return mBrightnessMapper.getDefaultConfig();
}
+ private void handleSettingsChange(boolean autoBrightnessOneShot) {
+ if (mAutoBrightnessOneShot && !autoBrightnessOneShot) {
+ mSensorManager.registerListener(mLightSensorListener, mLightSensor,
+ mCurrentLightSensorRate * 1000, mHandler);
+ } else if (!mAutoBrightnessOneShot && autoBrightnessOneShot) {
+ mSensorManager.unregisterListener(mLightSensorListener);
+ }
+ mAutoBrightnessOneShot = autoBrightnessOneShot;
+ }
+
private boolean setDisplayPolicy(int policy) {
if (mDisplayPolicy == policy) {
return false;
@@ -760,6 +777,9 @@ class AutomaticBrightnessController {
mCallbacks.updateBrightness();
}
}
+ if (mAutoBrightnessOneShot) {
+ mSensorManager.unregisterListener(mLightSensorListener);
+ }
}
// Clamps values with float range [0.0-1.0]
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index fcf6f10a339d..05ddbd790b78 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -65,6 +65,8 @@ import com.android.server.lights.LightsManager;
import com.android.server.lights.LogicalLight;
import com.android.server.policy.WindowManagerPolicy;
+import lineageos.providers.LineageSettings;
+
import java.io.PrintWriter;
import java.util.List;
@@ -396,6 +398,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// PowerManager.BRIGHTNESS_INVALID_FLOAT when there's no temporary adjustment set.
private float mTemporaryAutoBrightnessAdjustment;
+ // Wether auto brightness is applied one shot when screen is turned on
+ private boolean mAutoBrightnessOneShot;
+
// Animators.
private ObjectAnimator mColorFadeOnAnimator;
private ObjectAnimator mColorFadeOffAnimator;
@@ -424,6 +429,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mContext = context;
mBrightnessSynchronizer = new BrightnessSynchronizer(context);
mDisplayDevice = displayDevice;
+ mAutoBrightnessOneShot = getAutoBrightnessOneShotSetting();
PowerManager pm = context.getSystemService(PowerManager.class);
DisplayDeviceConfig displayDeviceConfig = mDisplayDevice.getDisplayDeviceConfig();
@@ -731,6 +737,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ),
false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
+ mContext.getContentResolver().registerContentObserver(
+ LineageSettings.System.getUriFor(LineageSettings.System.AUTO_BRIGHTNESS_ONE_SHOT),
+ false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
}
private final Animator.AnimatorListener mAnimatorListener = new Animator.AnimatorListener() {
@@ -958,6 +967,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
brightnessAdjustmentFlags = BrightnessReason.ADJUSTMENT_AUTO;
mAppliedTemporaryAutoBrightnessAdjustment = false;
}
+
// Apply brightness boost.
// We do this here after deciding whether auto-brightness is enabled so that we don't
// disable the light sensor during this temporary state. That way when boost ends we will
@@ -983,7 +993,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mBrightnessConfiguration,
mLastUserSetScreenBrightness,
userSetBrightnessChanged, autoBrightnessAdjustment,
- autoBrightnessAdjustmentChanged, mPowerRequest.policy);
+ autoBrightnessAdjustmentChanged, mPowerRequest.policy,
+ mAutoBrightnessOneShot);
}
if (mBrightnessTracker != null) {
@@ -1695,9 +1706,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// We don't bother with a pending variable for VR screen brightness since we just
// immediately adapt to it.
mScreenBrightnessForVr = getScreenBrightnessForVrSetting();
+ mAutoBrightnessOneShot = getAutoBrightnessOneShotSetting();
sendUpdatePowerState();
}
+ private boolean getAutoBrightnessOneShotSetting() {
+ return LineageSettings.System.getIntForUser(
+ mContext.getContentResolver(), LineageSettings.System.AUTO_BRIGHTNESS_ONE_SHOT,
+ 0, UserHandle.USER_CURRENT) == 1 ? true : false;
+ }
+
private float getAutoBrightnessAdjustmentSetting() {
final float adj = Settings.System.getFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f, UserHandle.USER_CURRENT);