@@ -244,6 +244,7 @@ public class PowerManagerService extends IPowerManager.Stub
244244 private Handler mHandler ;
245245 private final TimeoutTask mTimeoutTask = new TimeoutTask ();
246246 private ScreenBrightnessAnimator mScreenBrightnessAnimator ;
247+ private boolean mWaitingForFirstLightSensor = false ;
247248 private boolean mStillNeedSleepNotification ;
248249 private boolean mIsPowered = false ;
249250 private IActivityManager mActivityService ;
@@ -1755,7 +1756,11 @@ private int setScreenStateLocked(boolean on) {
17551756 mLastScreenOnTime = (on ? SystemClock .elapsedRealtime () : 0 );
17561757 if (mUseSoftwareAutoBrightness ) {
17571758 enableLightSensorLocked (on );
1758- if (!on ) {
1759+ if (on ) {
1760+ // If AutoBrightness is enabled, set the brightness immediately after the
1761+ // next sensor value is received.
1762+ mWaitingForFirstLightSensor = mAutoBrightessEnabled ;
1763+ } else {
17591764 // make sure button and key backlights are off too
17601765 mButtonLight .turnOff ();
17611766 mKeyboardLight .turnOff ();
@@ -2636,7 +2641,7 @@ private void dockStateChanged(int state) {
26362641
26372642 private void lightSensorChangedLocked (int value , boolean immediate ) {
26382643 if (mDebugLightSensor ) {
2639- Slog .d (TAG , "lightSensorChangedLocked " + value );
2644+ Slog .d (TAG , "lightSensorChangedLocked value= " + value + " immediate=" + immediate );
26402645 }
26412646
26422647 // Don't do anything if the screen is off.
@@ -3212,7 +3217,9 @@ private void proximityChangedLocked(boolean active) {
32123217 private void enableLightSensorLocked (boolean enable ) {
32133218 if (mDebugLightSensor ) {
32143219 Slog .d (TAG , "enableLightSensorLocked enable=" + enable
3215- + " mAutoBrightessEnabled=" + mAutoBrightessEnabled );
3220+ + " mLightSensorEnabled=" + mLightSensorEnabled
3221+ + " mAutoBrightessEnabled=" + mAutoBrightessEnabled
3222+ + " mWaitingForFirstLightSensor=" + mWaitingForFirstLightSensor );
32163223 }
32173224 if (!mAutoBrightessEnabled ) {
32183225 enable = false ;
@@ -3226,8 +3233,8 @@ private void enableLightSensorLocked(boolean enable) {
32263233 // reset our highest value when reenabling
32273234 mHighestLightSensorValue = -1 ;
32283235 // force recompute of backlight values
3229- if ( mLightSensorValue >= 0 ) {
3230- int value = ( int ) mLightSensorValue ;
3236+ final int value = ( int ) mLightSensorValue ;
3237+ if ( value >= 0 ) {
32313238 mLightSensorValue = -1 ;
32323239 handleLightSensorValue (value , true );
32333240 }
@@ -3291,8 +3298,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) {
32913298
32923299 private void handleLightSensorValue (int value , boolean immediate ) {
32933300 long milliseconds = SystemClock .elapsedRealtime ();
3294- if (mLightSensorValue == -1 ||
3295- milliseconds < mLastScreenOnTime + mLightSensorWarmupTime ) {
3301+ if (mLightSensorValue == -1
3302+ || milliseconds < mLastScreenOnTime + mLightSensorWarmupTime
3303+ || mWaitingForFirstLightSensor ) {
32963304 // process the value immediately if screen has just turned on
32973305 mHandler .removeCallbacks (mAutoBrightnessTask );
32983306 mLightSensorPendingDecrease = false ;
@@ -3327,7 +3335,10 @@ public void onSensorChanged(SensorEvent event) {
33273335 if (isScreenTurningOffLocked ()) {
33283336 return ;
33293337 }
3330- handleLightSensorValue ((int )event .values [0 ], false );
3338+ handleLightSensorValue ((int )event .values [0 ], mWaitingForFirstLightSensor );
3339+ if (mWaitingForFirstLightSensor ) {
3340+ mWaitingForFirstLightSensor = false ;
3341+ }
33313342 }
33323343 }
33333344
0 commit comments