Merge "AudioService: don't send BECOMING_NOISY when dyn policy affects media" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4e532f59dc
@@ -161,6 +161,11 @@ public class AudioMix {
|
||||
return mDeviceAddress;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public boolean isAffectingUsage(int usage) {
|
||||
return mRule.isAffectingUsage(usage);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
||||
@@ -135,6 +135,17 @@ public class AudioMixingRule {
|
||||
}
|
||||
}
|
||||
|
||||
boolean isAffectingUsage(int usage) {
|
||||
for (AudioMixMatchCriterion criterion : mCriteria) {
|
||||
if ((criterion.mRule & RULE_MATCH_ATTRIBUTE_USAGE) != 0
|
||||
&& criterion.mAttr != null
|
||||
&& criterion.mAttr.getUsage() == usage) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean areCriteriaEquivalent(ArrayList<AudioMixMatchCriterion> cr1,
|
||||
ArrayList<AudioMixMatchCriterion> cr2) {
|
||||
if (cr1 == null || cr2 == null) return false;
|
||||
|
||||
@@ -144,6 +144,7 @@ import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -5683,7 +5684,9 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
// ignore condition on device being actually used for music when in communication
|
||||
// because music routing is altered in this case.
|
||||
if (((device == musicDevice) || isInCommunication()) && (device == devices)) {
|
||||
// also checks whether media routing if affected by a dynamic policy
|
||||
if (((device == musicDevice) || isInCommunication()) && (device == devices)
|
||||
&& !hasMediaDynamicPolicy()) {
|
||||
mAudioHandler.removeMessages(MSG_BROADCAST_AUDIO_BECOMING_NOISY);
|
||||
sendMsg(mAudioHandler,
|
||||
MSG_BROADCAST_AUDIO_BECOMING_NOISY,
|
||||
@@ -5709,6 +5712,24 @@ public class AudioService extends IAudioService.Stub
|
||||
return delay;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if there is currently a registered dynamic mixing policy that affects media
|
||||
*/
|
||||
private boolean hasMediaDynamicPolicy() {
|
||||
synchronized (mAudioPolicies) {
|
||||
if (mAudioPolicies.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
final Collection<AudioPolicyProxy> appColl = mAudioPolicies.values();
|
||||
for (AudioPolicyProxy app : appColl) {
|
||||
if (app.hasMixAffectingUsage(AudioAttributes.USAGE_MEDIA)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAudioRoutes(int device, int state)
|
||||
{
|
||||
int connType = 0;
|
||||
@@ -7407,6 +7428,15 @@ public class AudioService extends IAudioService.Stub
|
||||
Binder.restoreCallingIdentity(identity);
|
||||
}
|
||||
|
||||
boolean hasMixAffectingUsage(int usage) {
|
||||
for (AudioMix mix : mMixes) {
|
||||
if (mix.isAffectingUsage(usage)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void addMixes(@NonNull ArrayList<AudioMix> mixes) {
|
||||
// TODO optimize to not have to unregister the mixes already in place
|
||||
synchronized (mMixes) {
|
||||
|
||||
Reference in New Issue
Block a user