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

Commit 19139443 authored by Gabriele M's avatar Gabriele M Committed by Gerrit Code Review
Browse files

Fix volume keys wakeup status handling

The same status flag is used for the three different volume keys,
however nothing prevents users from pressing multiple keys at the
same time. This allows to set the status flag with one volume key
and clear it with the other volume key.

Use one flag per key so that we never end up in an inconsistent
state. This fixes the seldom power button issues that happen when
the "volume wake" feature is enabled.

Change-Id: I08f5f9ff696bef3dd840cff97d570e44ebe03e4e
parent b3616bc6
Loading
Loading
Loading
Loading
+36 −4
Original line number Diff line number Diff line
@@ -495,7 +495,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    // During wakeup by volume keys, we still need to capture subsequent events
    // until the key is released. This is required since the beep sound is produced
    // post keypressed.
    boolean mVolumeWakeTriggered;
    boolean mVolumeDownWakeTriggered;
    boolean mVolumeUpWakeTriggered;
    boolean mVolumeMuteWakeTriggered;

    int mPointerLocationMode = 0; // guarded by mLock

@@ -5572,6 +5574,36 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private void setVolumeWakeTriggered(final int keyCode, boolean triggered) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                mVolumeDownWakeTriggered = triggered;
                break;
            case KeyEvent.KEYCODE_VOLUME_UP:
                mVolumeUpWakeTriggered = triggered;
                break;
            case KeyEvent.KEYCODE_VOLUME_MUTE:
                mVolumeMuteWakeTriggered = triggered;
                break;
            default:
                Log.w(TAG, "setVolumeWakeTriggered: unexpected keyCode=" + keyCode);
        }
    }

    private boolean getVolumeWakeTriggered(final int keyCode) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                return mVolumeDownWakeTriggered;
            case KeyEvent.KEYCODE_VOLUME_UP:
                return mVolumeUpWakeTriggered;
            case KeyEvent.KEYCODE_VOLUME_MUTE:
                return mVolumeMuteWakeTriggered;
            default:
                Log.w(TAG, "getVolumeWakeTriggered: unexpected keyCode=" + keyCode);
                return false;
        }
    }

    /** {@inheritDoc} */
    @Override
    public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
@@ -5667,11 +5699,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                // Eat all down & up keys when using volume wake.
                // This disables volume control, music control, and "beep" on key up.
                if (isWakeKey && mVolumeWakeScreen) {
                    mVolumeWakeTriggered = true;
                    setVolumeWakeTriggered(keyCode, true);
                    break;
                } else if (mVolumeWakeTriggered && !down) {
                } else if (getVolumeWakeTriggered(keyCode) && !down) {
                    result &= ~ACTION_PASS_TO_USER;
                    mVolumeWakeTriggered = false;
                    setVolumeWakeTriggered(keyCode, false);
                    break;
                }