@@ -1698,11 +1698,6 @@ private int setScreenStateLocked(boolean on) {
16981698 // make sure button and key backlights are off too
16991699 mButtonLight .turnOff ();
17001700 mKeyboardLight .turnOff ();
1701- // clear current value so we will update based on the new conditions
1702- // when the sensor is reenabled.
1703- mLightSensorValue = -1 ;
1704- // reset our highest light sensor value when the screen turns off
1705- mHighestLightSensorValue = -1 ;
17061701 }
17071702 }
17081703 }
@@ -2472,6 +2467,7 @@ private void dockStateChanged(int state) {
24722467 synchronized (mLocks ) {
24732468 mIsDocked = (state != Intent .EXTRA_DOCK_STATE_UNDOCKED );
24742469 if (mIsDocked ) {
2470+ // allow brightness to decrease when docked
24752471 mHighestLightSensorValue = -1 ;
24762472 }
24772473 if ((mPowerState & SCREEN_ON_BIT ) != 0 ) {
@@ -3047,11 +3043,21 @@ private void enableLightSensorLocked(boolean enable) {
30473043 long identity = Binder .clearCallingIdentity ();
30483044 try {
30493045 if (enable ) {
3046+ // reset our highest value when reenabling
3047+ mHighestLightSensorValue = -1 ;
3048+ // force recompute of backlight values
3049+ if (mLightSensorValue >= 0 ) {
3050+ int value = (int )mLightSensorValue ;
3051+ mLightSensorValue = -1 ;
3052+ handleLightSensorValue (value );
3053+ }
30503054 mSensorManager .registerListener (mLightListener , mLightSensor ,
30513055 SensorManager .SENSOR_DELAY_NORMAL );
30523056 } else {
30533057 mSensorManager .unregisterListener (mLightListener );
30543058 mHandler .removeCallbacks (mAutoBrightnessTask );
3059+ mLightSensorPendingDecrease = false ;
3060+ mLightSensorPendingIncrease = false ;
30553061 }
30563062 } finally {
30573063 Binder .restoreCallingIdentity (identity );
@@ -3103,43 +3109,45 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) {
31033109 }
31043110 };
31053111
3112+ private void handleLightSensorValue (int value ) {
3113+ long milliseconds = SystemClock .elapsedRealtime ();
3114+ if (mLightSensorValue == -1 ||
3115+ milliseconds < mLastScreenOnTime + mLightSensorWarmupTime ) {
3116+ // process the value immediately if screen has just turned on
3117+ mHandler .removeCallbacks (mAutoBrightnessTask );
3118+ mLightSensorPendingDecrease = false ;
3119+ mLightSensorPendingIncrease = false ;
3120+ lightSensorChangedLocked (value );
3121+ } else {
3122+ if ((value > mLightSensorValue && mLightSensorPendingDecrease ) ||
3123+ (value < mLightSensorValue && mLightSensorPendingIncrease ) ||
3124+ (value == mLightSensorValue ) ||
3125+ (!mLightSensorPendingDecrease && !mLightSensorPendingIncrease )) {
3126+ // delay processing to debounce the sensor
3127+ mHandler .removeCallbacks (mAutoBrightnessTask );
3128+ mLightSensorPendingDecrease = (value < mLightSensorValue );
3129+ mLightSensorPendingIncrease = (value > mLightSensorValue );
3130+ if (mLightSensorPendingDecrease || mLightSensorPendingIncrease ) {
3131+ mLightSensorPendingValue = value ;
3132+ mHandler .postDelayed (mAutoBrightnessTask , LIGHT_SENSOR_DELAY );
3133+ }
3134+ } else {
3135+ mLightSensorPendingValue = value ;
3136+ }
3137+ }
3138+ }
3139+
31063140 SensorEventListener mLightListener = new SensorEventListener () {
31073141 public void onSensorChanged (SensorEvent event ) {
3142+ if (mDebugLightSensor ) {
3143+ Slog .d (TAG , "onSensorChanged: light value: " + event .values [0 ]);
3144+ }
31083145 synchronized (mLocks ) {
31093146 // ignore light sensor while screen is turning off
31103147 if (isScreenTurningOffLocked ()) {
31113148 return ;
31123149 }
3113-
3114- int value = (int )event .values [0 ];
3115- long milliseconds = SystemClock .elapsedRealtime ();
3116- if (mDebugLightSensor ) {
3117- Slog .d (TAG , "onSensorChanged: light value: " + value );
3118- }
3119- if (mLightSensorValue == -1 ||
3120- milliseconds < mLastScreenOnTime + mLightSensorWarmupTime ) {
3121- // process the value immediately if screen has just turned on
3122- mHandler .removeCallbacks (mAutoBrightnessTask );
3123- mLightSensorPendingDecrease = false ;
3124- mLightSensorPendingIncrease = false ;
3125- lightSensorChangedLocked (value );
3126- } else {
3127- if ((value > mLightSensorValue && mLightSensorPendingDecrease ) ||
3128- (value < mLightSensorValue && mLightSensorPendingIncrease ) ||
3129- (value == mLightSensorValue ) ||
3130- (!mLightSensorPendingDecrease && !mLightSensorPendingIncrease )) {
3131- // delay processing to debounce the sensor
3132- mHandler .removeCallbacks (mAutoBrightnessTask );
3133- mLightSensorPendingDecrease = (value < mLightSensorValue );
3134- mLightSensorPendingIncrease = (value > mLightSensorValue );
3135- if (mLightSensorPendingDecrease || mLightSensorPendingIncrease ) {
3136- mLightSensorPendingValue = value ;
3137- mHandler .postDelayed (mAutoBrightnessTask , LIGHT_SENSOR_DELAY );
3138- }
3139- } else {
3140- mLightSensorPendingValue = value ;
3141- }
3142- }
3150+ handleLightSensorValue ((int )event .values [0 ]);
31433151 }
31443152 }
31453153
0 commit comments