diff options
author | Craig Mautner <cmautner@google.com> | 2012-06-06 14:13:39 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2012-06-06 14:13:39 -0700 |
commit | 3793368f72b284950aa917273193e30739c8cdf7 (patch) | |
tree | d0ce0983b8d965f2ac2d5b2cf14590a3a189a8d6 /services/java/com/android/server/PowerManagerService.java | |
parent | b215726a0e46400c8dbc4a585c2f4200c7a619b6 (diff) |
Set screen brightness to match sensor at power on.
Use the first sensor value received after screen on to set the screen
brightness. Do this setting immediately rather than animate to the
target brightness.
Fixes bug 6612418.
Change-Id: I6c24c55e0bd35ef58a6494d3b5e449954241fd00
Diffstat (limited to 'services/java/com/android/server/PowerManagerService.java')
-rw-r--r-- | services/java/com/android/server/PowerManagerService.java | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index 5aa0d16eac4d..dda6323c5c20 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -244,6 +244,7 @@ public class PowerManagerService extends IPowerManager.Stub private Handler mHandler; private final TimeoutTask mTimeoutTask = new TimeoutTask(); private ScreenBrightnessAnimator mScreenBrightnessAnimator; + private boolean mWaitingForFirstLightSensor = false; private boolean mStillNeedSleepNotification; private boolean mIsPowered = false; private IActivityManager mActivityService; @@ -1755,7 +1756,11 @@ public class PowerManagerService extends IPowerManager.Stub mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0); if (mUseSoftwareAutoBrightness) { enableLightSensorLocked(on); - if (!on) { + if (on) { + // If AutoBrightness is enabled, set the brightness immediately after the + // next sensor value is received. + mWaitingForFirstLightSensor = mAutoBrightessEnabled; + } else { // make sure button and key backlights are off too mButtonLight.turnOff(); mKeyboardLight.turnOff(); @@ -2636,7 +2641,7 @@ public class PowerManagerService extends IPowerManager.Stub private void lightSensorChangedLocked(int value, boolean immediate) { if (mDebugLightSensor) { - Slog.d(TAG, "lightSensorChangedLocked " + value); + Slog.d(TAG, "lightSensorChangedLocked value=" + value + " immediate=" + immediate); } // Don't do anything if the screen is off. @@ -3212,7 +3217,9 @@ public class PowerManagerService extends IPowerManager.Stub private void enableLightSensorLocked(boolean enable) { if (mDebugLightSensor) { Slog.d(TAG, "enableLightSensorLocked enable=" + enable - + " mAutoBrightessEnabled=" + mAutoBrightessEnabled); + + " mLightSensorEnabled=" + mLightSensorEnabled + + " mAutoBrightessEnabled=" + mAutoBrightessEnabled + + " mWaitingForFirstLightSensor=" + mWaitingForFirstLightSensor); } if (!mAutoBrightessEnabled) { enable = false; @@ -3226,8 +3233,8 @@ public class PowerManagerService extends IPowerManager.Stub // reset our highest value when reenabling mHighestLightSensorValue = -1; // force recompute of backlight values - if (mLightSensorValue >= 0) { - int value = (int)mLightSensorValue; + final int value = (int)mLightSensorValue; + if (value >= 0) { mLightSensorValue = -1; handleLightSensorValue(value, true); } @@ -3291,8 +3298,9 @@ public class PowerManagerService extends IPowerManager.Stub private void handleLightSensorValue(int value, boolean immediate) { long milliseconds = SystemClock.elapsedRealtime(); - if (mLightSensorValue == -1 || - milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) { + if (mLightSensorValue == -1 + || milliseconds < mLastScreenOnTime + mLightSensorWarmupTime + || mWaitingForFirstLightSensor) { // process the value immediately if screen has just turned on mHandler.removeCallbacks(mAutoBrightnessTask); mLightSensorPendingDecrease = false; @@ -3327,7 +3335,10 @@ public class PowerManagerService extends IPowerManager.Stub if (isScreenTurningOffLocked()) { return; } - handleLightSensorValue((int)event.values[0], false); + handleLightSensorValue((int)event.values[0], mWaitingForFirstLightSensor); + if (mWaitingForFirstLightSensor) { + mWaitingForFirstLightSensor = false; + } } } |