From dcfe66fda17b8644bd7af9b25a5c4550b02cb2cc Mon Sep 17 00:00:00 2001 From: Yan Han Date: Thu, 5 May 2022 15:36:37 +0200 Subject: [PATCH] Clear listeners when adding a new one in AudioDeviceVolumeManager Currently, multiple absolute volume listeners from the same controller can be notified of volume change events because old ones are not removed from AudioDeviceVolumeManager. This CL removes existing listeners for a device when a new one is added. We also no longer forbid re-adding a listener currently in AudioDeviceVolumeManager's list, as it might have been removed from AudioService. Bug: 231433390 Test: manual; atest android.hdmicec.cts.playback.HdmiCecAvcToTvTest Change-Id: If7ecd58880001b955565e0f65ede9f0787e1be49 --- media/java/android/media/AudioDeviceVolumeManager.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/media/java/android/media/AudioDeviceVolumeManager.java b/media/java/android/media/AudioDeviceVolumeManager.java index 11cacd01f53da..44b4662cdca5d 100644 --- a/media/java/android/media/AudioDeviceVolumeManager.java +++ b/media/java/android/media/AudioDeviceVolumeManager.java @@ -235,13 +235,7 @@ public class AudioDeviceVolumeManager { mDeviceVolumeDispatcherStub = new DeviceVolumeDispatcherStub(); } } else { - for (ListenerInfo info : mDeviceVolumeListeners) { - if (info.mListener == vclistener) { - throw new IllegalArgumentException( - "attempt to call setDeviceAbsoluteMultiVolumeBehavior() " - + "on a previously registered listener"); - } - } + mDeviceVolumeListeners.removeIf(info -> info.mDevice.equalTypeAddress(device)); } mDeviceVolumeListeners.add(listenerInfo); mDeviceVolumeDispatcherStub.register(true, device, volumes, handlesVolumeAdjustment);