summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Bellegarde <cedric.bellegarde@adishatz.org>2021-05-14 00:53:09 +0200
committeralk3pInjection <webmaster@raspii.tech>2022-02-18 09:36:24 +0800
commit92a7f873ceb39c831f10e7ad2e713651ea7cf043 (patch)
tree0240111a319414030bf2a6173fcf80a182498a72
parent08c16b6fd977917ba6aa9514d92b5bdb66de92d5 (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. [jhonboy121]: adapt to 12 Change-Id: I5187fdb7765550d4eaa999317ab95f487d44c8d8
-rw-r--r--core/java/android/provider/Settings.java7
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java1
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java1
-rw-r--r--services/core/java/com/android/server/display/AutomaticBrightnessController.java22
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java17
5 files changed, 46 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index d756ca9769e2..28ed9ba3820e 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5192,6 +5192,13 @@ public final class Settings {
public static final String ALERT_SLIDER_ORDER = "alert_slider_order";
/**
+ * Whether auto brightness is applied one shot when screen is turned on.
+ * Default 0
+ * @hide
+ */
+ public static final String AUTO_BRIGHTNESS_ONE_SHOT = "auto_brightness_one_shot";
+
+ /**
* IMPORTANT: If you add a new public settings you also have to add it to
* PUBLIC_SETTINGS below. If the new setting is hidden you have to add
* it to PRIVATE_SETTINGS below. Also add a validator that can validate
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
index 0fe4efefc2cb..7c5daedf8995 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
@@ -84,5 +84,6 @@ public class SystemSettings {
Settings.System.DISPLAY_COLOR_MODE,
Settings.System.ALARM_ALERT,
Settings.System.NOTIFICATION_LIGHT_PULSE,
+ Settings.System.AUTO_BRIGHTNESS_ONE_SHOT,
};
}
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
index e1f4ea933b40..546801cb55b2 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
@@ -203,5 +203,6 @@ public class SystemSettingsValidators {
VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
VALIDATORS.put(System.CALL_CONNECTED_TONE_ENABLED, BOOLEAN_VALIDATOR);
+ VALIDATORS.put(System.AUTO_BRIGHTNESS_ONE_SHOT, BOOLEAN_VALIDATOR);
}
}
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index cb2cd140677e..32831b20bd62 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -214,6 +214,8 @@ class AutomaticBrightnessController {
private final Injector mInjector;
+ private boolean mAutoBrightnessOneShot;
+
AutomaticBrightnessController(Callbacks callbacks, Looper looper,
SensorManager sensorManager, Sensor lightSensor, BrightnessMappingStrategy mapper,
int lightSensorWarmUpTime, float brightnessMin, float brightnessMax,
@@ -277,6 +279,7 @@ class AutomaticBrightnessController {
mForegroundAppCategory = ApplicationInfo.CATEGORY_UNDEFINED;
mPendingForegroundAppCategory = ApplicationInfo.CATEGORY_UNDEFINED;
mHbmController = hbmController;
+ mAutoBrightnessOneShot = false;
}
/**
@@ -316,7 +319,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) {
mHbmController.setAutoBrightnessEnabled(enable);
// 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
@@ -342,6 +346,8 @@ class AutomaticBrightnessController {
changed |= setLightSensorEnabled(enable && !dozing);
if (changed) {
updateAutoBrightness(false /*sendUpdate*/, userInitiatedChange);
+ } else {
+ handleSettingsChange(autoBrightnessOneShot);
}
}
@@ -368,6 +374,17 @@ class AutomaticBrightnessController {
mHandler.sendEmptyMessage(MSG_RUN_UPDATE);
}
+ private void handleSettingsChange(boolean autoBrightnessOneShot) {
+ if (mAutoBrightnessOneShot == autoBrightnessOneShot) return;
+ mAutoBrightnessOneShot = autoBrightnessOneShot;
+ if (mAutoBrightnessOneShot) {
+ mSensorManager.unregisterListener(mLightSensorListener);
+ } else {
+ mSensorManager.registerListener(mLightSensorListener, mLightSensor,
+ mCurrentLightSensorRate * 1000, mHandler);
+ }
+ }
+
private boolean setDisplayPolicy(int policy) {
if (mDisplayPolicy == policy) {
return false;
@@ -783,6 +800,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 81cbbff44778..d5f4b807bb0a 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -431,6 +431,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// This should be false during system start up.
private boolean mPendingRbcOnOrChanged = false;
+ // Whether auto brightness is applied one shot when screen is turned on
+ private boolean mAutoBrightnessOneShot = false;
+
// Animators.
private ObjectAnimator mColorFadeOnAnimator;
private ObjectAnimator mColorFadeOffAnimator;
@@ -473,6 +476,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// TODO: b/186428377 update brightness setting when display changes
mBrightnessSetting = brightnessSetting;
mOnBrightnessChangeRunnable = onBrightnessChangeRunnable;
+ mAutoBrightnessOneShot = getAutoBrightnessOneShotSetting();
PowerManager pm = context.getSystemService(PowerManager.class);
@@ -854,6 +858,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(
+ Settings.System.getUriFor(Settings.System.AUTO_BRIGHTNESS_ONE_SHOT),
+ false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);
}
private void setUpAutoBrightness(Resources resources, Handler handler) {
@@ -1194,7 +1201,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
mBrightnessConfiguration,
mLastUserSetScreenBrightness,
userSetBrightnessChanged, autoBrightnessAdjustment,
- autoBrightnessAdjustmentChanged, mPowerRequest.policy);
+ autoBrightnessAdjustmentChanged, mPowerRequest.policy,
+ mAutoBrightnessOneShot);
}
if (mBrightnessTracker != null) {
@@ -2026,9 +2034,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 Settings.System.getIntForUser(mContext.getContentResolver(),
+ Settings.System.AUTO_BRIGHTNESS_ONE_SHOT, 0,
+ UserHandle.USER_CURRENT) == 1;
+ }
+
private float getAutoBrightnessAdjustmentSetting() {
final float adj = Settings.System.getFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f, UserHandle.USER_CURRENT);