diff options
author | Cédric Bellegarde <cedric.bellegarde@adishatz.org> | 2021-05-14 00:53:09 +0200 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2022-02-18 09:36:24 +0800 |
commit | 92a7f873ceb39c831f10e7ad2e713651ea7cf043 (patch) | |
tree | 0240111a319414030bf2a6173fcf80a182498a72 | |
parent | 08c16b6fd977917ba6aa9514d92b5bdb66de92d5 (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
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); |