diff options
author | Joe Onorato <joeo@google.com> | 2010-10-05 14:41:16 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-05 14:41:16 -0700 |
commit | f7872780ca3dae9584251b1e3495aed12110254c (patch) | |
tree | 00b97ad2539d7bdc71bf29960ce9e838f482acbf /services | |
parent | 17bc4f65324a823598e7671256c815bf32ddcc95 (diff) | |
parent | 8274a0e53630f80ab356f69ddad895ed9638574e (diff) | |
download | frameworks_base-f7872780ca3dae9584251b1e3495aed12110254c.zip frameworks_base-f7872780ca3dae9584251b1e3495aed12110254c.tar.gz frameworks_base-f7872780ca3dae9584251b1e3495aed12110254c.tar.bz2 |
Merge "PowerManagerService needs yet another flag..." into gingerbread
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/PowerManagerService.java | 134 |
1 files changed, 88 insertions, 46 deletions
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index e77ed69..496c665 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -220,6 +220,7 @@ class PowerManagerService extends IPowerManager.Stub private Sensor mLightSensor; private boolean mLightSensorEnabled; private float mLightSensorValue = -1; + private boolean mProxIgnoredBecauseScreenTurnedOff = false; private int mHighestLightSensorValue = -1; private float mLightSensorPendingValue = -1; private int mLightSensorScreenBrightness = -1; @@ -252,7 +253,7 @@ class PowerManagerService extends IPowerManager.Stub // could be either static or controllable at runtime private static final boolean mSpew = false; - private static final boolean mDebugProximitySensor = (true || mSpew); + private static final boolean mDebugProximitySensor = (false || mSpew); private static final boolean mDebugLightSensor = (false || mSpew); private native void nativeInit(); @@ -638,7 +639,8 @@ class PowerManagerService extends IPowerManager.Stub int n = flags & LOCK_MASK; return n == PowerManager.FULL_WAKE_LOCK || n == PowerManager.SCREEN_BRIGHT_WAKE_LOCK - || n == PowerManager.SCREEN_DIM_WAKE_LOCK; + || n == PowerManager.SCREEN_DIM_WAKE_LOCK + || n == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK; } void enforceWakeSourcePermission(int uid, int pid) { @@ -778,25 +780,33 @@ class PowerManagerService extends IPowerManager.Stub // set it to whatever they want. otherwise, we modulate that // by the current state so we never turn it more on than // it already is. - if ((wl.flags & PowerManager.ACQUIRE_CAUSES_WAKEUP) != 0) { - int oldWakeLockState = mWakeLockState; - mWakeLockState = mLocks.reactivateScreenLocksLocked(); - if (mSpew) { - Slog.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState) - + " mWakeLockState=0x" - + Integer.toHexString(mWakeLockState) - + " previous wakeLockState=0x" + Integer.toHexString(oldWakeLockState)); + if ((flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) { + mProximityWakeLockCount++; + if (mProximityWakeLockCount == 1) { + enableProximityLockLocked(); } } else { - if (mSpew) { - Slog.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState) - + " mLocks.gatherState()=0x" - + Integer.toHexString(mLocks.gatherState()) - + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState)); + if ((wl.flags & PowerManager.ACQUIRE_CAUSES_WAKEUP) != 0) { + int oldWakeLockState = mWakeLockState; + mWakeLockState = mLocks.reactivateScreenLocksLocked(); + if (mSpew) { + Slog.d(TAG, "wakeup here mUserState=0x" + Integer.toHexString(mUserState) + + " mWakeLockState=0x" + + Integer.toHexString(mWakeLockState) + + " previous wakeLockState=0x" + + Integer.toHexString(oldWakeLockState)); + } + } else { + if (mSpew) { + Slog.d(TAG, "here mUserState=0x" + Integer.toHexString(mUserState) + + " mLocks.gatherState()=0x" + + Integer.toHexString(mLocks.gatherState()) + + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState)); + } + mWakeLockState = (mUserState | mWakeLockState) & mLocks.gatherState(); } - mWakeLockState = (mUserState | mWakeLockState) & mLocks.gatherState(); + setPowerState(mWakeLockState | mUserState); } - setPowerState(mWakeLockState | mUserState); } else if ((flags & LOCK_MASK) == PowerManager.PARTIAL_WAKE_LOCK) { if (newlock) { @@ -806,11 +816,6 @@ class PowerManagerService extends IPowerManager.Stub } } Power.acquireWakeLock(Power.PARTIAL_WAKE_LOCK,PARTIAL_NAME); - } else if ((flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) { - mProximityWakeLockCount++; - if (mProximityWakeLockCount == 1) { - enableProximityLockLocked(); - } } if (diffsource) { @@ -868,12 +873,27 @@ class PowerManagerService extends IPowerManager.Stub } if (isScreenLock(wl.flags)) { - 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); + if ((wl.flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) { + mProximityWakeLockCount--; + if (mProximityWakeLockCount == 0) { + if (mProximitySensorActive && + ((flags & PowerManager.WAIT_FOR_PROXIMITY_NEGATIVE) != 0)) { + // wait for proximity sensor to go negative before disabling sensor + if (mDebugProximitySensor) { + Slog.d(TAG, "waiting for proximity sensor to go negative"); + } + } else { + disableProximityLockLocked(); + } + } + } else { + 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); + } + setPowerState(mWakeLockState | mUserState); } - setPowerState(mWakeLockState | mUserState); } else if ((wl.flags & LOCK_MASK) == PowerManager.PARTIAL_WAKE_LOCK) { mPartialCount--; @@ -881,19 +901,6 @@ class PowerManagerService extends IPowerManager.Stub if (LOG_PARTIAL_WL) EventLog.writeEvent(EventLogTags.POWER_PARTIAL_WAKE_STATE, 0, wl.tag); Power.releaseWakeLock(PARTIAL_NAME); } - } else if ((wl.flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) { - mProximityWakeLockCount--; - if (mProximityWakeLockCount == 0) { - if (mProximitySensorActive && - ((flags & PowerManager.WAIT_FOR_PROXIMITY_NEGATIVE) != 0)) { - // wait for proximity sensor to go negative before disabling sensor - if (mDebugProximitySensor) { - Slog.d(TAG, "waiting for proximity sensor to go negative"); - } - } else { - disableProximityLockLocked(); - } - } } // Unlink the lock from the binder. wl.binder.unlinkToDeath(wl, 0); @@ -2433,11 +2440,23 @@ class PowerManagerService extends IPowerManager.Stub mWakeLockState = SCREEN_OFF; int N = mLocks.size(); int numCleared = 0; + boolean proxLock = false; for (int i=0; i<N; i++) { WakeLock wl = mLocks.get(i); if (isScreenLock(wl.flags)) { - mLocks.get(i).activated = false; - numCleared++; + if (((wl.flags & LOCK_MASK) == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) + && reason == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR) { + proxLock = true; + } else { + mLocks.get(i).activated = false; + numCleared++; + } + } + } + if (!proxLock) { + mProxIgnoredBecauseScreenTurnedOff = true; + if (mDebugProximitySensor) { + Slog.d(TAG, "setting mProxIgnoredBecauseScreenTurnedOff"); } } EventLog.writeEvent(EventLogTags.POWER_SLEEP_REQUESTED, numCleared); @@ -2628,6 +2647,11 @@ class PowerManagerService extends IPowerManager.Stub result |= wl.minState; } } + if (mDebugProximitySensor) { + Slog.d(TAG, "reactivateScreenLocksLocked mProxIgnoredBecauseScreenTurnedOff=" + + mProxIgnoredBecauseScreenTurnedOff); + } + mProxIgnoredBecauseScreenTurnedOff = false; return result; } } @@ -2787,7 +2811,13 @@ class PowerManagerService extends IPowerManager.Stub } if (mProximitySensorActive) { mProximitySensorActive = false; - forceUserActivityLocked(); + if (mDebugProximitySensor) { + Slog.d(TAG, "disableProximityLockLocked mProxIgnoredBecauseScreenTurnedOff=" + + mProxIgnoredBecauseScreenTurnedOff); + } + if (!mProxIgnoredBecauseScreenTurnedOff) { + forceUserActivityLocked(); + } } } } @@ -2801,15 +2831,27 @@ class PowerManagerService extends IPowerManager.Stub return; } if (active) { - goToSleepLocked(SystemClock.uptimeMillis(), - WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR); + if (mDebugProximitySensor) { + Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + + mProxIgnoredBecauseScreenTurnedOff); + } + if (!mProxIgnoredBecauseScreenTurnedOff) { + goToSleepLocked(SystemClock.uptimeMillis(), + WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR); + } mProximitySensorActive = true; } else { // proximity sensor negative events trigger as user activity. // temporarily set mUserActivityAllowed to true so this will work // even when the keyguard is on. mProximitySensorActive = false; - forceUserActivityLocked(); + if (mDebugProximitySensor) { + Slog.d(TAG, "b mProxIgnoredBecauseScreenTurnedOff=" + + mProxIgnoredBecauseScreenTurnedOff); + } + if (!mProxIgnoredBecauseScreenTurnedOff) { + forceUserActivityLocked(); + } if (mProximityWakeLockCount == 0) { // disable sensor if we have no listeners left after proximity negative |