From 338a18daea9c86cbea895affce14a15232e6dc53 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Thu, 4 Jun 2020 20:29:16 +0000 Subject: Don't send volume keys twice Introduced by CEC VOL_ADJUST_* changes which send a volume change event for key up with the intent that this will be passed on to CEC. We want to ignore it if it's a KEY_UP event and we're not using CEC. Change-Id: Ib001b1f00bd1117f5e60aeb28df8461a00436678 Test: Manual: just press the MUTE button and release it (and the device mutes) Bug: 158119517 --- .../core/java/com/android/server/audio/AudioService.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 27d9ba08e4a2..6d45abaf0234 100755 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -1893,7 +1893,7 @@ public class AudioService extends IAudioService.Stub Binder.getCallingUid(), true, keyEventMode); break; case KeyEvent.KEYCODE_VOLUME_MUTE: - if (event.getRepeatCount() == 0) { + if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { adjustSuggestedStreamVolume(AudioManager.ADJUST_TOGGLE_MUTE, AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller, Binder.getCallingUid(), true, VOL_ADJUST_NORMAL); @@ -2155,7 +2155,8 @@ public class AudioService extends IAudioService.Stub } int oldIndex = mStreamStates[streamType].getIndex(device); - if (adjustVolume && (direction != AudioManager.ADJUST_SAME)) { + if (adjustVolume + && (direction != AudioManager.ADJUST_SAME) && (keyEventMode != VOL_ADJUST_END)) { mAudioHandler.removeMessages(MSG_UNMUTE_STREAM); if (isMuteAdjust) { @@ -2238,6 +2239,11 @@ public class AudioService extends IAudioService.Stub if (streamTypeAlias == AudioSystem.STREAM_MUSIC) { setSystemAudioVolume(oldIndex, newIndex, getStreamMaxVolume(streamType), flags); } + } + + final int newIndex = mStreamStates[streamType].getIndex(device); + + if (adjustVolume) { synchronized (mHdmiClientLock) { if (mHdmiManager != null) { // mHdmiCecSink true => mHdmiPlaybackClient != null @@ -2290,8 +2296,7 @@ public class AudioService extends IAudioService.Stub } } } - int index = mStreamStates[streamType].getIndex(device); - sendVolumeUpdate(streamType, oldIndex, index, flags, device); + sendVolumeUpdate(streamType, oldIndex, newIndex, flags, device); } // Called after a delay when volume down is pressed while muted -- cgit v1.2.3-59-g8ed1b