Skip to content

Commit 1913944

Browse files
Gabriele MGerrit Code Review
authored andcommitted
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
1 parent b3616bc commit 1913944

1 file changed

Lines changed: 36 additions & 4 deletions

File tree

services/core/java/com/android/server/policy/PhoneWindowManager.java

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,9 @@ public void onDrawn() {
495495
// During wakeup by volume keys, we still need to capture subsequent events
496496
// until the key is released. This is required since the beep sound is produced
497497
// post keypressed.
498-
boolean mVolumeWakeTriggered;
498+
boolean mVolumeDownWakeTriggered;
499+
boolean mVolumeUpWakeTriggered;
500+
boolean mVolumeMuteWakeTriggered;
499501

500502
int mPointerLocationMode = 0; // guarded by mLock
501503

@@ -5572,6 +5574,36 @@ public void onServiceDisconnected(ComponentName name) {}
55725574
}
55735575
}
55745576

5577+
private void setVolumeWakeTriggered(final int keyCode, boolean triggered) {
5578+
switch (keyCode) {
5579+
case KeyEvent.KEYCODE_VOLUME_DOWN:
5580+
mVolumeDownWakeTriggered = triggered;
5581+
break;
5582+
case KeyEvent.KEYCODE_VOLUME_UP:
5583+
mVolumeUpWakeTriggered = triggered;
5584+
break;
5585+
case KeyEvent.KEYCODE_VOLUME_MUTE:
5586+
mVolumeMuteWakeTriggered = triggered;
5587+
break;
5588+
default:
5589+
Log.w(TAG, "setVolumeWakeTriggered: unexpected keyCode=" + keyCode);
5590+
}
5591+
}
5592+
5593+
private boolean getVolumeWakeTriggered(final int keyCode) {
5594+
switch (keyCode) {
5595+
case KeyEvent.KEYCODE_VOLUME_DOWN:
5596+
return mVolumeDownWakeTriggered;
5597+
case KeyEvent.KEYCODE_VOLUME_UP:
5598+
return mVolumeUpWakeTriggered;
5599+
case KeyEvent.KEYCODE_VOLUME_MUTE:
5600+
return mVolumeMuteWakeTriggered;
5601+
default:
5602+
Log.w(TAG, "getVolumeWakeTriggered: unexpected keyCode=" + keyCode);
5603+
return false;
5604+
}
5605+
}
5606+
55755607
/** {@inheritDoc} */
55765608
@Override
55775609
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
@@ -5667,11 +5699,11 @@ public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
56675699
// Eat all down & up keys when using volume wake.
56685700
// This disables volume control, music control, and "beep" on key up.
56695701
if (isWakeKey && mVolumeWakeScreen) {
5670-
mVolumeWakeTriggered = true;
5702+
setVolumeWakeTriggered(keyCode, true);
56715703
break;
5672-
} else if (mVolumeWakeTriggered && !down) {
5704+
} else if (getVolumeWakeTriggered(keyCode) && !down) {
56735705
result &= ~ACTION_PASS_TO_USER;
5674-
mVolumeWakeTriggered = false;
5706+
setVolumeWakeTriggered(keyCode, false);
56755707
break;
56765708
}
56775709

0 commit comments

Comments
 (0)