Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44000eb2 authored by Mike Lockwood's avatar Mike Lockwood Committed by Android Git Automerger
Browse files

am 678c2e35: Merge change I9ef88863 into eclair

Merge commit '678c2e35' into eclair-mr2

* commit '678c2e35':
  Add WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR to indicate screen was turned off by the proximity sensor.
parents 1b794bbb 678c2e35
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -361,6 +361,8 @@ public interface WindowManagerPolicy {
    public final int OFF_BECAUSE_OF_USER = 1;
    /** Screen turned off because of timeout */
    public final int OFF_BECAUSE_OF_TIMEOUT = 2;
    /** Screen turned off because of proximity sensor */
    public final int OFF_BECAUSE_OF_PROX_SENSOR = 3;

    /**
     * Magic constant to {@link IWindowManager#setRotation} to not actually
+23 −21
Original line number Diff line number Diff line
@@ -161,7 +161,9 @@ class PowerManagerService extends IPowerManager.Stub
    private int[] mBroadcastWhy = new int[3];
    private int mPartialCount = 0;
    private int mPowerState;
    private boolean mOffBecauseOfUser;
    // mScreenOffReason can be WindowManagerPolicy.OFF_BECAUSE_OF_USER,
    // WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT or WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR
    private int mScreenOffReason;
    private int mUserState;
    private boolean mKeyboardVisible = false;
    private boolean mUserActivityAllowed = true;
@@ -919,7 +921,7 @@ class PowerManagerService extends IPowerManager.Stub
                + " " + ((mNextTimeout-now)/1000) + "s from now");
        pw.println("  mDimScreen=" + mDimScreen
                + " mStayOnConditions=" + mStayOnConditions);
        pw.println("  mOffBecauseOfUser=" + mOffBecauseOfUser
        pw.println("  mScreenOffReason=" + mScreenOffReason
                + " mUserState=" + mUserState);
        pw.println("  mBroadcastQueue={" + mBroadcastQueue[0] + ',' + mBroadcastQueue[1]
                + ',' + mBroadcastQueue[2] + "}");
@@ -1384,10 +1386,10 @@ class PowerManagerService extends IPowerManager.Stub

    private void setPowerState(int state)
    {
        setPowerState(state, false, false);
        setPowerState(state, false, WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT);
    }

    private void setPowerState(int newState, boolean noChangeLights, boolean becauseOfUser)
    private void setPowerState(int newState, boolean noChangeLights, int reason)
    {
        synchronized (mLocks) {
            int err;
@@ -1395,7 +1397,8 @@ class PowerManagerService extends IPowerManager.Stub
            if (mSpew) {
                Log.d(TAG, "setPowerState: mPowerState=0x" + Integer.toHexString(mPowerState)
                        + " newState=0x" + Integer.toHexString(newState)
                        + " noChangeLights=" + noChangeLights);
                        + " noChangeLights=" + noChangeLights
                        + " reason=" + reason);
            }

            if (noChangeLights) {
@@ -1489,7 +1492,7 @@ class PowerManagerService extends IPowerManager.Stub
                    mLastTouchDown = 0;
                    mTotalTouchDownTime = 0;
                    mTouchCycles = 0;
                    EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 1, becauseOfUser ? 1 : 0,
                    EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 1, reason,
                            mTotalTouchDownTime, mTouchCycles);
                    if (err == 0) {
                        mPowerState |= SCREEN_ON_BIT;
@@ -1508,10 +1511,10 @@ class PowerManagerService extends IPowerManager.Stub
                        Binder.restoreCallingIdentity(identity);
                    }
                    mPowerState &= ~SCREEN_ON_BIT;
                    mScreenOffReason = reason;
                    if (!mScreenBrightness.animating) {
                        err = screenOffFinishedAnimatingLocked(becauseOfUser);
                        err = screenOffFinishedAnimatingLocked(reason);
                    } else {
                        mOffBecauseOfUser = becauseOfUser;
                        err = 0;
                        mLastTouchDown = 0;
                    }
@@ -1520,19 +1523,16 @@ class PowerManagerService extends IPowerManager.Stub
        }
    }
    
    private int screenOffFinishedAnimatingLocked(boolean becauseOfUser) {
    private int screenOffFinishedAnimatingLocked(int reason) {
        // I don't think we need to check the current state here because all of these
        // Power.setScreenState and sendNotificationLocked can both handle being 
        // called multiple times in the same state. -joeo
        EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 0, becauseOfUser ? 1 : 0,
                mTotalTouchDownTime, mTouchCycles);
        EventLog.writeEvent(LOG_POWER_SCREEN_STATE, 0, reason, mTotalTouchDownTime, mTouchCycles);
        mLastTouchDown = 0;
        int err = setScreenStateLocked(false);
        if (err == 0) {
            int why = becauseOfUser
                    ? WindowManagerPolicy.OFF_BECAUSE_OF_USER
                    : WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT;
            sendNotificationLocked(false, why);
            mScreenOffReason = reason;
            sendNotificationLocked(false, reason);
        }
        return err;
    }
@@ -1808,7 +1808,7 @@ class PowerManagerService extends IPowerManager.Stub
            animating = more;
            if (!more) {
                if (mask == SCREEN_BRIGHT_BIT && curIntValue == Power.BRIGHTNESS_OFF) {
                    screenOffFinishedAnimatingLocked(mOffBecauseOfUser);
                    screenOffFinishedAnimatingLocked(mScreenOffReason);
                }
            }
            return more;
@@ -1994,7 +1994,8 @@ class PowerManagerService extends IPowerManager.Stub
                    }
                    
                    mWakeLockState = mLocks.reactivateScreenLocksLocked();
                    setPowerState(mUserState | mWakeLockState, noChangeLights, true);
                    setPowerState(mUserState | mWakeLockState, noChangeLights,
                            WindowManagerPolicy.OFF_BECAUSE_OF_USER);
                    setTimeoutLocked(time, SCREEN_BRIGHT);
                }
            }
@@ -2125,7 +2126,7 @@ class PowerManagerService extends IPowerManager.Stub
    {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
        synchronized (mLocks) {
            goToSleepLocked(time);
            goToSleepLocked(time, WindowManagerPolicy.OFF_BECAUSE_OF_USER);
        }
    }
    
@@ -2143,7 +2144,7 @@ class PowerManagerService extends IPowerManager.Stub
        }
    }

    private void goToSleepLocked(long time) {
    private void goToSleepLocked(long time, int reason) {

        if (mLastEventTime <= time) {
            mLastEventTime = time;
@@ -2161,7 +2162,7 @@ class PowerManagerService extends IPowerManager.Stub
            EventLog.writeEvent(LOG_POWER_SLEEP_REQUESTED, numCleared);
            mStillNeedSleepNotification = true;
            mUserState = SCREEN_OFF;
            setPowerState(SCREEN_OFF, false, true);
            setPowerState(SCREEN_OFF, false, reason);
            cancelTimerLocked();
        }
    }
@@ -2517,7 +2518,8 @@ class PowerManagerService extends IPowerManager.Stub
            return;
        }
        if (active) {
            goToSleepLocked(SystemClock.uptimeMillis());
            goToSleepLocked(SystemClock.uptimeMillis(),
                    WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR);
            mProximitySensorActive = true;
        } else {
            // proximity sensor negative events trigger as user activity.