summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/PowerManagerService.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/PowerManagerService.java')
-rw-r--r--services/java/com/android/server/PowerManagerService.java101
1 files changed, 50 insertions, 51 deletions
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index a6daaef..caf6376 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -219,6 +219,8 @@ class PowerManagerService extends IPowerManager.Stub
private float mLightSensorValue = -1;
private boolean mProxIgnoredBecauseScreenTurnedOff = false;
private int mHighestLightSensorValue = -1;
+ private boolean mLightSensorPendingDecrease = false;
+ private boolean mLightSensorPendingIncrease = false;
private float mLightSensorPendingValue = -1;
private int mLightSensorScreenBrightness = -1;
private int mLightSensorButtonBrightness = -1;
@@ -1141,6 +1143,8 @@ class PowerManagerService extends IPowerManager.Stub
pw.println(" mLightSensorEnabled=" + mLightSensorEnabled);
pw.println(" mLightSensorValue=" + mLightSensorValue
+ " mLightSensorPendingValue=" + mLightSensorPendingValue);
+ pw.println(" mLightSensorPendingDecrease=" + mLightSensorPendingDecrease
+ + " mLightSensorPendingIncrease=" + mLightSensorPendingIncrease);
pw.println(" mLightSensorScreenBrightness=" + mLightSensorScreenBrightness
+ " mLightSensorButtonBrightness=" + mLightSensorButtonBrightness
+ " mLightSensorKeyboardBrightness=" + mLightSensorKeyboardBrightness);
@@ -1171,10 +1175,8 @@ class PowerManagerService extends IPowerManager.Stub
pw.println("mPokeLocks.size=" + mPokeLocks.size() + ":");
for (PokeLock p: mPokeLocks.values()) {
pw.println(" poke lock '" + p.tag + "':"
- + ((p.pokey & POKE_LOCK_IGNORE_CHEEK_EVENTS) != 0
- ? " POKE_LOCK_IGNORE_CHEEK_EVENTS" : "")
- + ((p.pokey & POKE_LOCK_IGNORE_TOUCH_AND_CHEEK_EVENTS) != 0
- ? " POKE_LOCK_IGNORE_TOUCH_AND_CHEEK_EVENTS" : "")
+ + ((p.pokey & POKE_LOCK_IGNORE_TOUCH_EVENTS) != 0
+ ? " POKE_LOCK_IGNORE_TOUCH_EVENTS" : "")
+ ((p.pokey & POKE_LOCK_SHORT_TIMEOUT) != 0
? " POKE_LOCK_SHORT_TIMEOUT" : "")
+ ((p.pokey & POKE_LOCK_MEDIUM_TIMEOUT) != 0
@@ -1609,7 +1611,7 @@ class PowerManagerService extends IPowerManager.Stub
if (err == 0) {
mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0);
if (mUseSoftwareAutoBrightness) {
- enableLightSensor(on);
+ enableLightSensorLocked(on);
if (!on) {
// make sure button and key backlights are off too
mButtonLight.turnOff();
@@ -1742,6 +1744,8 @@ class PowerManagerService extends IPowerManager.Stub
} else {
// cancel light sensor task
mHandler.removeCallbacks(mAutoBrightnessTask);
+ mLightSensorPendingDecrease = false;
+ mLightSensorPendingIncrease = false;
mScreenOffTime = SystemClock.elapsedRealtime();
long identity = Binder.clearCallingIdentity();
try {
@@ -2212,31 +2216,13 @@ class PowerManagerService extends IPowerManager.Stub
private void userActivity(long time, long timeoutOverride, boolean noChangeLights,
int eventType, boolean force) {
- if (((mPokey & POKE_LOCK_IGNORE_CHEEK_EVENTS) != 0)
- && (eventType == CHEEK_EVENT)) {
- if (false) {
- Slog.d(TAG, "dropping cheek event mPokey=0x" + Integer.toHexString(mPokey));
- }
- return;
- }
-
- if (((mPokey & POKE_LOCK_IGNORE_TOUCH_AND_CHEEK_EVENTS) != 0)
- && (eventType == TOUCH_EVENT || eventType == TOUCH_UP_EVENT
- || eventType == LONG_TOUCH_EVENT || eventType == CHEEK_EVENT)) {
+ if (((mPokey & POKE_LOCK_IGNORE_TOUCH_EVENTS) != 0) && (eventType == TOUCH_EVENT)) {
if (false) {
Slog.d(TAG, "dropping touch mPokey=0x" + Integer.toHexString(mPokey));
}
return;
}
- if (false) {
- if (((mPokey & POKE_LOCK_IGNORE_CHEEK_EVENTS) != 0)) {
- Slog.d(TAG, "userActivity !!!");//, new RuntimeException());
- } else {
- Slog.d(TAG, "mPokey=0x" + Integer.toHexString(mPokey));
- }
- }
-
synchronized (mLocks) {
if (mSpew) {
Slog.d(TAG, "userActivity mLastEventTime=" + mLastEventTime + " time=" + time
@@ -2325,9 +2311,10 @@ class PowerManagerService extends IPowerManager.Stub
private Runnable mAutoBrightnessTask = new Runnable() {
public void run() {
synchronized (mLocks) {
- int value = (int)mLightSensorPendingValue;
- if (value >= 0) {
- mLightSensorPendingValue = -1;
+ if (mLightSensorPendingDecrease || mLightSensorPendingIncrease) {
+ int value = (int)mLightSensorPendingValue;
+ mLightSensorPendingDecrease = false;
+ mLightSensorPendingIncrease = false;
lightSensorChangedLocked(value);
}
}
@@ -2569,16 +2556,12 @@ class PowerManagerService extends IPowerManager.Stub
}
private void setScreenBrightnessMode(int mode) {
- boolean enabled = (mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
- if (mUseSoftwareAutoBrightness && mAutoBrightessEnabled != enabled) {
- mAutoBrightessEnabled = enabled;
- if (isScreenOn()) {
- // force recompute of backlight values
- if (mLightSensorValue >= 0) {
- int value = (int)mLightSensorValue;
- mLightSensorValue = -1;
- lightSensorChangedLocked(value);
- }
+ synchronized (mLocks) {
+ boolean enabled = (mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
+ if (mUseSoftwareAutoBrightness && mAutoBrightessEnabled != enabled) {
+ mAutoBrightessEnabled = enabled;
+ // This will get us a new value
+ enableLightSensorLocked(mAutoBrightessEnabled && isScreenOn());
}
}
}
@@ -2604,7 +2587,8 @@ class PowerManagerService extends IPowerManager.Stub
}
mKeylightDelay = LONG_KEYLIGHT_DELAY;
if (totalDelay < 0) {
- mScreenOffDelay = Integer.MAX_VALUE;
+ // negative number means stay on as long as possible.
+ mScreenOffDelay = mMaximumScreenOffTimeout;
} else if (mKeylightDelay < totalDelay) {
// subtract the time that the keylight delay. This will give us the
// remainder of the time that we need to sleep to get the accurate
@@ -2729,7 +2713,6 @@ class PowerManagerService extends IPowerManager.Stub
// don't bother with the light sensor if auto brightness is handled in hardware
if (mUseSoftwareAutoBrightness) {
mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
- enableLightSensor(true);
}
// wait until sensors are enabled before turning on screen.
@@ -2747,6 +2730,8 @@ class PowerManagerService extends IPowerManager.Stub
Slog.d(TAG, "system ready!");
mDoneBooting = true;
+ enableLightSensorLocked(mUseSoftwareAutoBrightness && mAutoBrightessEnabled);
+
long identity = Binder.clearCallingIdentity();
try {
mBatteryStats.noteScreenBrightness(getPreferredBrightness());
@@ -2901,9 +2886,13 @@ class PowerManagerService extends IPowerManager.Stub
}
}
- private void enableLightSensor(boolean enable) {
+ private void enableLightSensorLocked(boolean enable) {
if (mDebugLightSensor) {
- Slog.d(TAG, "enableLightSensor " + enable);
+ Slog.d(TAG, "enableLightSensorLocked enable=" + enable
+ + " mAutoBrightessEnabled=" + mAutoBrightessEnabled);
+ }
+ if (!mAutoBrightessEnabled) {
+ enable = false;
}
if (mSensorManager != null && mLightSensorEnabled != enable) {
mLightSensorEnabled = enable;
@@ -2980,19 +2969,29 @@ class PowerManagerService extends IPowerManager.Stub
if (mDebugLightSensor) {
Slog.d(TAG, "onSensorChanged: light value: " + value);
}
- mHandler.removeCallbacks(mAutoBrightnessTask);
- if (mLightSensorValue != value) {
- if (mLightSensorValue == -1 ||
- milliseconds < mLastScreenOnTime + mLightSensorWarmupTime) {
- // process the value immediately if screen has just turned on
- lightSensorChangedLocked(value);
- } else {
+ 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;
- mHandler.postDelayed(mAutoBrightnessTask, LIGHT_SENSOR_DELAY);
}
- } else {
- mLightSensorPendingValue = -1;
}
}
}