Skip to content

Commit 5dca30a

Browse files
committed
PowerManagerService: Remove assumption that light sensor will always send a value as soon as it is enabled.
Bug: 5426212 Change-Id: Iebe51609233ef17c108bbec680369793abbae1be Signed-off-by: Mike Lockwood <lockwood@android.com>
1 parent 8334038 commit 5dca30a

File tree

1 file changed

+43
-35
lines changed

1 file changed

+43
-35
lines changed

services/java/com/android/server/PowerManagerService.java

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)