Power Manager light sensor fixes:
Fix problem with ignored sensor events right after screen turns on.
Do not flash button backlights when device is booting.
Process the first light sensor change after waking the screen immediately rather than debouncing.
Cancel mAutoBrightnessTask when light sensor is disabled.
Change-Id: Iffc5e090b239432b7643812fa8ecb5f69da1679d
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index a63d3fc..3e13453 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -477,8 +477,13 @@
// And explicitly do the initial update of our cached settings
updateGservicesValues();
- // turn everything on
- setPowerState(ALL_BRIGHT);
+ if (mAutoBrightessEnabled) {
+ // turn the screen on
+ setPowerState(SCREEN_BRIGHT);
+ } else {
+ // turn everything on
+ setPowerState(ALL_BRIGHT);
+ }
synchronized (mHandlerThread) {
mInitComplete = true;
@@ -1285,6 +1290,9 @@
// make sure button and key backlights are off too
mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_BUTTONS, 0);
mHardware.setLightBrightness_UNCHECKED(HardwareService.LIGHT_ID_KEYBOARD, 0);
+ // clear current value so we will update based on the new conditions
+ // when the sensor is reenabled.
+ mLightSensorValue = -1;
}
}
return err;
@@ -1323,7 +1331,7 @@
return;
}
- if (!mDoneBooting) {
+ if (!mDoneBooting && !mAutoBrightessEnabled) {
newState |= ALL_BRIGHT;
}
@@ -2275,6 +2283,7 @@
SensorManager.SENSOR_DELAY_NORMAL);
} else {
mSensorManager.unregisterListener(mLightListener);
+ mHandler.removeCallbacks(mAutoBrightnessTask);
}
}
}
@@ -2319,8 +2328,14 @@
}
mHandler.removeCallbacks(mAutoBrightnessTask);
if (mLightSensorValue != value) {
- mLightSensorPendingValue = value;
- mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
+ if (mLightSensorValue == -1) {
+ // process the value immediately
+ lightSensorChangedLocked(value);
+ } else {
+ // delay processing to debounce the sensor
+ mLightSensorPendingValue = value;
+ mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
+ }
} else {
mLightSensorPendingValue = -1;
}