summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/res/res/values/config.xml5
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java40
2 files changed, 40 insertions, 5 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 27e3afe6bcfa..145b06f79e2b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1028,7 +1028,10 @@
-->
<integer name="config_doubleTapOnHomeBehavior">0</integer>
- <!-- Whether or not to skip the brightness ramp when the display transitions to STATE_ON. -->
+ <!-- Whether or not to skip the initial brightness ramps when the display transitions to
+ STATE_ON. This will skip the brightness ramp to the last stored active brightness value
+ and also the following ramp if autobrightness is enabled.
+ -->
<bool name="config_skipScreenOnBrightnessRamp">false</bool>
<!-- Minimum screen brightness setting allowed by the power manager.
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 0225ea3d59d4..61c16596fb3a 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -102,6 +102,11 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Trigger proximity if distance is less than 5 cm.
private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f;
+ // State machine constants for tracking initial brightness ramp skipping when enabled.
+ private static final int RAMP_STATE_SKIP_NONE = 0;
+ private static final int RAMP_STATE_SKIP_INITIAL = 1;
+ private static final int RAMP_STATE_SKIP_AUTOBRIGHT = 2;
+
private static final int REPORTED_TO_POLICY_SCREEN_OFF = 0;
private static final int REPORTED_TO_POLICY_SCREEN_TURNING_ON = 1;
private static final int REPORTED_TO_POLICY_SCREEN_ON = 2;
@@ -250,9 +255,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private final int mBrightnessRampRateFast;
private final int mBrightnessRampRateSlow;
- // Brightness animation ramp flags
+ // Whether or not to skip the initial brightness ramps into STATE_ON.
private final boolean mSkipScreenOnBrightnessRamp;
+ // A record of state for skipping brightness ramps
+ private int mSkipRampState = RAMP_STATE_SKIP_NONE;
+
+ // The first autobrightness value set when entering RAMP_STATE_SKIP_INITIAL.
+ private int mInitialAutoBrightness;
+
// The controller for the automatic brightness level.
private AutomaticBrightnessController mAutomaticBrightnessController;
@@ -747,10 +758,31 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
// Animate the screen brightness when the screen is on or dozing.
// Skip the animation when the screen is off, suspended, or if configs say otherwise.
+ // N.B. There are two ramps that can occur when the skip ramp config is enabled. The first
+ // is from a dozing or off state value to the previous screen brightness value. The second
+ // occurs when autobrightness is enabled and the screen adjusts from the previous
+ // brightness value to a new one based off of new ambient light sensor readings.
if (!mPendingScreenOff) {
- boolean skipScreenRamp = mSkipScreenOnBrightnessRamp && mDozing
- && state == Display.STATE_ON;
- if (state == Display.STATE_ON && !skipScreenRamp || state == Display.STATE_DOZE) {
+ if (mSkipScreenOnBrightnessRamp) {
+
+ if (state == Display.STATE_ON) {
+ if (mSkipRampState == RAMP_STATE_SKIP_NONE && mDozing) {
+ mInitialAutoBrightness = brightness;
+ mSkipRampState = RAMP_STATE_SKIP_INITIAL;
+ } else if (mSkipRampState == RAMP_STATE_SKIP_INITIAL
+ && mUseSoftwareAutoBrightnessConfig
+ && brightness != mInitialAutoBrightness) {
+ mSkipRampState = RAMP_STATE_SKIP_AUTOBRIGHT;
+ } else if (mSkipRampState == RAMP_STATE_SKIP_AUTOBRIGHT) {
+ mSkipRampState = RAMP_STATE_SKIP_NONE;
+ }
+ } else {
+ mSkipRampState = RAMP_STATE_SKIP_NONE;
+ }
+ }
+
+ if (state == Display.STATE_ON && mSkipRampState == RAMP_STATE_SKIP_NONE
+ || state == Display.STATE_DOZE) {
animateScreenBrightness(brightness,
slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
} else {