summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-06-26 14:34:54 -0700
committerDianne Hackborn <hackbod@google.com>2012-06-26 14:44:08 -0700
commitea401541c51422ba76f8319927cca0f303c57a4e (patch)
tree4d29da07d4882eb124b9f74a2d3e5f8a6f29d5f2 /services
parent9e608c12186d308fb1711e8824901fdf931a3a96 (diff)
downloadframeworks_base-ea401541c51422ba76f8319927cca0f303c57a4e.zip
frameworks_base-ea401541c51422ba76f8319927cca0f303c57a4e.tar.gz
frameworks_base-ea401541c51422ba76f8319927cca0f303c57a4e.tar.bz2
Fix issue #6730064: When turning off Nakasi, it very often...
...turns itself immediately back on. The ON_AFTER_RELEASE flag is documented to not turn the screen on if it is currently off. Unfortunately, it didn't seem to actually do this -- it would just cause a userActivity() call, which turns on the screen if it is currently off. Fix this by adding yet another boolean to that function to tell it to not poke user activity if the screen is off. (Yes the number of booleans on it is now insane, and should be cleaned up after we get through JB.) Bug: 6730064 Change-Id: I850dfbc777c7668d08b7d63f42a293e22b878256
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/PowerManagerService.java19
1 files changed, 12 insertions, 7 deletions
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 01bb2bc..c32f1da 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -1040,7 +1040,7 @@ public class PowerManagerService extends IPowerManager.Stub
mWakeLockState = mLocks.gatherState();
// goes in the middle to reduce flicker
if ((wl.flags & PowerManager.ON_AFTER_RELEASE) != 0) {
- userActivity(SystemClock.uptimeMillis(), -1, false, OTHER_EVENT, false);
+ userActivity(SystemClock.uptimeMillis(), -1, false, OTHER_EVENT, false, true);
}
setPowerState(mWakeLockState | mUserState);
}
@@ -2489,7 +2489,7 @@ public class PowerManagerService extends IPowerManager.Stub
public void userActivityWithForce(long time, boolean noChangeLights, boolean force) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
- userActivity(time, -1, noChangeLights, OTHER_EVENT, force);
+ userActivity(time, -1, noChangeLights, OTHER_EVENT, force, false);
}
public void userActivity(long time, boolean noChangeLights) {
@@ -2502,15 +2502,15 @@ public class PowerManagerService extends IPowerManager.Stub
return;
}
- userActivity(time, -1, noChangeLights, OTHER_EVENT, false);
+ userActivity(time, -1, noChangeLights, OTHER_EVENT, false, false);
}
public void userActivity(long time, boolean noChangeLights, int eventType) {
- userActivity(time, -1, noChangeLights, eventType, false);
+ userActivity(time, -1, noChangeLights, eventType, false, false);
}
public void userActivity(long time, boolean noChangeLights, int eventType, boolean force) {
- userActivity(time, -1, noChangeLights, eventType, force);
+ userActivity(time, -1, noChangeLights, eventType, force, false);
}
/*
@@ -2520,11 +2520,11 @@ public class PowerManagerService extends IPowerManager.Stub
public void clearUserActivityTimeout(long now, long timeout) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
Slog.i(TAG, "clearUserActivity for " + timeout + "ms from now");
- userActivity(now, timeout, false, OTHER_EVENT, false);
+ userActivity(now, timeout, false, OTHER_EVENT, false, false);
}
private void userActivity(long time, long timeoutOverride, boolean noChangeLights,
- int eventType, boolean force) {
+ int eventType, boolean force, boolean ignoreIfScreenOff) {
if (((mPokey & POKE_LOCK_IGNORE_TOUCH_EVENTS) != 0) && (eventType == TOUCH_EVENT)) {
if (false) {
@@ -2548,6 +2548,11 @@ public class PowerManagerService extends IPowerManager.Stub
Slog.d(TAG, "ignoring user activity while turning off screen");
return;
}
+ // ignore if the caller doesn't want this to allow the screen to turn
+ // on, and the screen is currently off.
+ if (ignoreIfScreenOff && (mPowerState & SCREEN_ON_BIT) == 0) {
+ return;
+ }
// Disable proximity sensor if if user presses power key while we are in the
// "waiting for proximity sensor to go negative" state.
if (mProximitySensorActive && mProximityWakeLockCount == 0) {