From b9e1d45b35e9e7be212b52b36831b21d66038718 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Thu, 26 May 2022 22:32:10 +0000 Subject: [PATCH] AudioService: fix VolumeShaper operation for muteAwaitConnection PlaybackActivityMonitor defines a VolumeShaper configuration to be used for mute/unmute for the muteAwaitConnection feature. It define a 100ms ramp that is supposed to be skipped for muting (by using X offset to end of ramp) and used for unmuting. Offset in the end of the ramp is defined in the PLAY_SKIP_RAMP Configuration, was documented at line 93 in the initialization of MUTE_AWAIT_CONNECTION_VSHAPE, but wasn't used when muting in maybeMutePlayerAwaitingConnection. AudioService.java: better logs of feature. Bug: 229814445 Test: repro in bug Change-Id: Id6d28f5ecd7edf9d7afb834f295a5b7388319bde --- .../core/java/com/android/server/audio/AudioService.java | 8 ++++---- .../com/android/server/audio/PlaybackActivityMonitor.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index f0fe2ddd03952..02648c4da76f6 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -9171,7 +9171,7 @@ public class AudioService extends IAudioService.Stub throw new IllegalArgumentException("Invalid timeOutMs/usagesToMute"); } Log.i(TAG, "muteAwaitConnection dev:" + device + " timeOutMs:" + timeOutMs - + " usages:" + usages); + + " usages:" + Arrays.toString(usages)); if (mDeviceBroker.isDeviceConnected(device)) { // not throwing an exception as there could be a race between a connection (server-side, @@ -9223,7 +9223,7 @@ public class AudioService extends IAudioService.Stub mutedUsages = mMutedUsagesAwaitingConnection; mMutingExpectedDevice = null; mMutedUsagesAwaitingConnection = null; - mPlaybackMonitor.cancelMuteAwaitConnection(); + mPlaybackMonitor.cancelMuteAwaitConnection("cancelMuteAwaitConnection dev:" + device); } dispatchMuteAwaitConnection(cb -> { try { cb.dispatchOnUnmutedEvent( AudioManager.MuteAwaitConnectionCallback.EVENT_CANCEL, device, mutedUsages); @@ -9259,8 +9259,8 @@ public class AudioService extends IAudioService.Stub } mMutingExpectedDevice = null; mMutedUsagesAwaitingConnection = null; - Log.i(TAG, "muteAwaitConnection device " + device + " connected, unmuting"); - mPlaybackMonitor.cancelMuteAwaitConnection(); + mPlaybackMonitor.cancelMuteAwaitConnection( + "checkMuteAwaitConnection device " + device + " connected, unmuting"); } dispatchMuteAwaitConnection(cb -> { try { cb.dispatchOnUnmutedEvent( AudioManager.MuteAwaitConnectionCallback.EVENT_CONNECTION, device, mutedUsages); diff --git a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java index a4468a3e1eecc..b3e7e31d37fc8 100644 --- a/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java +++ b/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java @@ -1170,8 +1170,8 @@ public final class PlaybackActivityMonitor } } - void cancelMuteAwaitConnection() { - sEventLogger.loglogi("cancelMuteAwaitConnection()", TAG); + void cancelMuteAwaitConnection(String source) { + sEventLogger.loglogi("cancelMuteAwaitConnection() from:" + source, TAG); synchronized (mPlayerLock) { // cancel scheduled timeout, ignore device, only one expected device at a time mEventHandler.removeMessages(MSG_L_TIMEOUT_MUTE_AWAIT_CONNECTION); @@ -1223,7 +1223,7 @@ public final class PlaybackActivityMonitor + " uid:" + apc.getClientUid())).printLog(TAG)); apc.getPlayerProxy().applyVolumeShaper( MUTE_AWAIT_CONNECTION_VSHAPE, - PLAY_CREATE_IF_NEEDED); + PLAY_SKIP_RAMP); mMutedPlayersAwaitingConnection.add(apc.getPlayerInterfaceId()); } catch (Exception e) { Log.e(TAG, "awaiting connection: error muting player "