am 69828470: am ab9d5b11: Merge "PowerManagerService: Remove assumption that light sensor will always send a value as soon as it is enabled." into ics-mr0

* commit '69828470626cf267829a4762f6b0f49b7b964322':
  PowerManagerService: Remove assumption that light sensor will always send a value as soon as it is enabled.
This commit is contained in:
Mike Lockwood
2011-10-13 14:09:32 -07:00
committed by Android Git Automerger

View File

@@ -1701,11 +1701,6 @@ public class PowerManagerService extends IPowerManager.Stub
// make sure button and key backlights are off too
mButtonLight.turnOff();
mKeyboardLight.turnOff();
// clear current value so we will update based on the new conditions
// when the sensor is reenabled.
mLightSensorValue = -1;
// reset our highest light sensor value when the screen turns off
mHighestLightSensorValue = -1;
}
}
}
@@ -2479,6 +2474,7 @@ public class PowerManagerService extends IPowerManager.Stub
synchronized (mLocks) {
mIsDocked = (state != Intent.EXTRA_DOCK_STATE_UNDOCKED);
if (mIsDocked) {
// allow brightness to decrease when docked
mHighestLightSensorValue = -1;
}
if ((mPowerState & SCREEN_ON_BIT) != 0) {
@@ -3054,11 +3050,21 @@ public class PowerManagerService extends IPowerManager.Stub
long identity = Binder.clearCallingIdentity();
try {
if (enable) {
// reset our highest value when reenabling
mHighestLightSensorValue = -1;
// force recompute of backlight values
if (mLightSensorValue >= 0) {
int value = (int)mLightSensorValue;
mLightSensorValue = -1;
handleLightSensorValue(value);
}
mSensorManager.registerListener(mLightListener, mLightSensor,
SensorManager.SENSOR_DELAY_NORMAL);
} else {
mSensorManager.unregisterListener(mLightListener);
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = false;
mLightSensorPendingIncrease = false;
}
} finally {
Binder.restoreCallingIdentity(identity);
@@ -3110,43 +3116,45 @@ public class PowerManagerService extends IPowerManager.Stub
}
};
private void handleLightSensorValue(int value) {
long milliseconds = SystemClock.elapsedRealtime();
if (mLightSensorValue == -1 ||
milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
// process the value immediately if screen has just turned on
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = false;
mLightSensorPendingIncrease = false;
lightSensorChangedLocked(value);
} else {
if ((value > mLightSensorValue && mLightSensorPendingDecrease) ||
(value < mLightSensorValue && mLightSensorPendingIncrease) ||
(value == mLightSensorValue) ||
(!mLightSensorPendingDecrease && !mLightSensorPendingIncrease)) {
// delay processing to debounce the sensor
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = (value < mLightSensorValue);
mLightSensorPendingIncrease = (value > mLightSensorValue);
if (mLightSensorPendingDecrease || mLightSensorPendingIncrease) {
mLightSensorPendingValue = value;
mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
}
} else {
mLightSensorPendingValue = value;
}
}
}
SensorEventListener mLightListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
if (mDebugLightSensor) {
Slog.d(TAG, "onSensorChanged: light value: " + event.values[0]);
}
synchronized (mLocks) {
// ignore light sensor while screen is turning off
if (isScreenTurningOffLocked()) {
return;
}
int value = (int)event.values[0];
long milliseconds = SystemClock.elapsedRealtime();
if (mDebugLightSensor) {
Slog.d(TAG, "onSensorChanged: light value: " + value);
}
if (mLightSensorValue == -1 ||
milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
// process the value immediately if screen has just turned on
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = false;
mLightSensorPendingIncrease = false;
lightSensorChangedLocked(value);
} else {
if ((value > mLightSensorValue && mLightSensorPendingDecrease) ||
(value < mLightSensorValue && mLightSensorPendingIncrease) ||
(value == mLightSensorValue) ||
(!mLightSensorPendingDecrease && !mLightSensorPendingIncrease)) {
// delay processing to debounce the sensor
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = (value < mLightSensorValue);
mLightSensorPendingIncrease = (value > mLightSensorValue);
if (mLightSensorPendingDecrease || mLightSensorPendingIncrease) {
mLightSensorPendingValue = value;
mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
}
} else {
mLightSensorPendingValue = value;
}
}
handleLightSensorValue((int)event.values[0]);
}
}