From 5b65df1bc1e7973f77c5d11e590042eb66143807 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Wed, 4 May 2022 07:01:06 +0000 Subject: [PATCH] AudioService: fix muteAwaitConnection device check Add logs for muteAwaitConnection API calls. Fix cancel operation by testing device equality with AudioDeviceAttributes.equalTypeAddress instead of equals as the device passed by the caller may have just been qualified by type and address, and may not contain the actual profiles and descriptors of a connected device. Bug: 229806548 Test: atest com.google.android.gts.audioservice.AudioServiceHostTest#testMuteAwaitConnection Change-Id: Id216e6d88859425f9fa49e45843f51ca83ae9b63 --- services/core/java/com/android/server/audio/AudioService.java | 4 +++- .../com/android/server/audio/PlaybackActivityMonitor.java | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 1357ed244d10a..e6dd798cce1e6 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -9123,6 +9123,8 @@ public class AudioService extends IAudioService.Stub if (timeOutMs <= 0 || usages.length == 0) { throw new IllegalArgumentException("Invalid timeOutMs/usagesToMute"); } + Log.i(TAG, "muteAwaitConnection dev:" + device + " timeOutMs:" + timeOutMs + + " usages:" + usages); if (mDeviceBroker.isDeviceConnected(device)) { // not throwing an exception as there could be a race between a connection (server-side, @@ -9166,7 +9168,7 @@ public class AudioService extends IAudioService.Stub Log.i(TAG, "cancelMuteAwaitConnection ignored, no expected device"); return; } - if (!device.equals(mMutingExpectedDevice)) { + if (!device.equalTypeAddress(mMutingExpectedDevice)) { Log.e(TAG, "cancelMuteAwaitConnection ignored, got " + device + "] but expected device is" + mMutingExpectedDevice); throw new IllegalStateException("cancelMuteAwaitConnection for wrong device"); diff --git a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java index 74c899980d86a..565783f91f1bd 100644 --- a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +++ b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java @@ -1158,6 +1158,8 @@ public final class PlaybackActivityMonitor //========================================================================================== void muteAwaitConnection(@NonNull int[] usagesToMute, @NonNull AudioDeviceAttributes dev, long timeOutMs) { + sEventLogger.loglogi( + "muteAwaitConnection() dev:" + dev + " timeOutMs:" + timeOutMs, TAG); synchronized (mPlayerLock) { mutePlayersExpectingDevice(usagesToMute); // schedule timeout (remove previously scheduled first) @@ -1169,6 +1171,7 @@ public final class PlaybackActivityMonitor } void cancelMuteAwaitConnection() { + sEventLogger.loglogi("cancelMuteAwaitConnection()", TAG); synchronized (mPlayerLock) { // cancel scheduled timeout, ignore device, only one expected device at a time mEventHandler.removeMessages(MSG_L_TIMEOUT_MUTE_AWAIT_CONNECTION);