From 159b4276523f0fae6bee25f8a14135b0020bdded Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 12 Jul 2019 10:31:51 -0700 Subject: [PATCH] audioservice: fix hasMediaDynamicPolicy() for loopback and render policies Exclude mixes with LOOPBACK + RENDER flags when looking for dynamic policies matching media usage. As this is only used in the context of sending becoming noisy intent we want to send the intent when playback capture is active. Bug: 137055231 Test: enable live caption and disconnect headset while music is playing Change-Id: Ib3cd38f58c2ff78a2f2f13c5c22b637f9701e345 Merged-In: Ib3cd38f58c2ff78a2f2f13c5c22b637f9701e345 --- .../core/java/com/android/server/audio/AudioService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 6c57be8bbadfe..7458bee793db7 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5181,6 +5181,7 @@ public class AudioService extends IAudioService.Stub /** * @return true if there is currently a registered dynamic mixing policy that affects media + * and is not a render + loopback policy */ /*package*/ boolean hasMediaDynamicPolicy() { synchronized (mAudioPolicies) { @@ -5189,7 +5190,8 @@ public class AudioService extends IAudioService.Stub } final Collection appColl = mAudioPolicies.values(); for (AudioPolicyProxy app : appColl) { - if (app.hasMixAffectingUsage(AudioAttributes.USAGE_MEDIA)) { + if (app.hasMixAffectingUsage(AudioAttributes.USAGE_MEDIA, + AudioMix.ROUTE_FLAG_LOOP_BACK_RENDER)) { return true; } } @@ -6961,9 +6963,10 @@ public class AudioService extends IAudioService.Stub Binder.restoreCallingIdentity(identity); } - boolean hasMixAffectingUsage(int usage) { + boolean hasMixAffectingUsage(int usage, int excludedFlags) { for (AudioMix mix : mMixes) { - if (mix.isAffectingUsage(usage)) { + if (mix.isAffectingUsage(usage) + && ((mix.getRouteFlags() & excludedFlags) != excludedFlags)) { return true; } }