diff options
author | Cédric Bellegarde <cedric.bellegarde@adishatz.org> | 2021-05-14 00:53:09 +0200 |
---|---|---|
committer | Jan Altensen <info@stricted.net> | 2021-08-23 18:11:53 +0200 |
commit | 00712220684bdb143e3a43fc1afe8dd722a1c054 (patch) | |
tree | cbf9f5e659fec97446ce2477d279928f5262b15f | |
parent | 8a27e35325bf9131020993364645b74d8a9786fc (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.java | 22 | ||||
-rw-r--r-- | services/core/java/com/android/server/display/DisplayPowerController.java | 20 |
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); |