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

Commit 36fc3025 authored by Mike Lockwood's avatar Mike Lockwood
Browse files

PowerManagerService: Disallow all user activity when in proximity wake lock.



Fixes b/2076756

Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 09b0ca1c
Loading
Loading
Loading
Loading
+31 −9
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ class PowerManagerService extends IPowerManager.Stub
    private int mUserState;
    private boolean mKeyboardVisible = false;
    private boolean mUserActivityAllowed = true;
    private boolean mProximitySensorActive = false;
    private int mTotalDelaySetting;
    private int mKeylightDelay;
    private int mDimDelay;
@@ -1252,6 +1253,10 @@ class PowerManagerService extends IPowerManager.Stub
            if (noChangeLights) {
                newState = (newState & ~LIGHTS_MASK) | (mPowerState & LIGHTS_MASK);
            }
            if (mProximitySensorActive) {
                // don't turn on the screen when the proximity sensor lock is held
                newState = (newState & ~SCREEN_BRIGHT);
            }

            if (batteryIsLow()) {
                newState |= BATTERY_LOW_BIT;
@@ -1748,11 +1753,13 @@ class PowerManagerService extends IPowerManager.Stub
                Log.d(TAG, "userActivity mLastEventTime=" + mLastEventTime + " time=" + time
                        + " mUserActivityAllowed=" + mUserActivityAllowed
                        + " mUserState=0x" + Integer.toHexString(mUserState)
                        + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState));
                        + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState)
                        + " mProximitySensorActive=" + mProximitySensorActive
                        + " force=" + force);
            }
            if (mLastEventTime <= time || force) {
                mLastEventTime = time;
                if (mUserActivityAllowed || force) {
                if ((mUserActivityAllowed && !mProximitySensorActive) || force) {
                    // Only turn on button backlights if a button was pressed.
                    if (eventType == BUTTON_EVENT) {
                        mUserState = (mKeyboardVisible ? ALL_BRIGHT : SCREEN_BUTTON_BRIGHT);
@@ -2042,22 +2049,37 @@ class PowerManagerService extends IPowerManager.Stub
    }

    private void enableProximityLockLocked() {
        if (mSpew) {
            Log.d(TAG, "enableProximityLockLocked");
        }
        mSensorManager.registerListener(this, mProximitySensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    private void disableProximityLockLocked() {
        if (mSpew) {
            Log.d(TAG, "disableProximityLockLocked");
        }
        mSensorManager.unregisterListener(this);
        mProximitySensorActive = false;
    }

    public void onSensorChanged(SensorEvent event) {
        long milliseconds = event.timestamp / 1000000;
        synchronized (mLocks) {
            if (event.values[0] == 0.0) {
            goToSleep(milliseconds);
                if (mSpew) {
                    Log.d(TAG, "onSensorChanged: proximity active");
                }
                goToSleepLocked(milliseconds);
                mProximitySensorActive = true;
            } else {
                // proximity sensor negative events user activity.
                // temporarily set mUserActivityAllowed to true so this will work
                // even when the keyguard is on.
            synchronized (mLocks) {
                if (mSpew) {
                    Log.d(TAG, "onSensorChanged: proximity inactive");
                }
                mProximitySensorActive = false;
                boolean savedActivityAllowed = mUserActivityAllowed;
                mUserActivityAllowed = true;
                userActivity(milliseconds, false);