AudioPolicy: fix AudioMixingRule parceling
Pass full AudioAttributes instead of just usage and capture preset when parceling AudioMixMatchCriterion to carry AudioAttributes flags properly from client to server. Also fix condition in AudioMixingRule.isForCallRedirection(). Bug: 211435595 Test: atest CallAudioInterceptionTest Test: atest AudioHostTest Change-Id: I7d0583b867bf1112733dfa929fc72cf236d500c0
This commit is contained in:
@@ -145,10 +145,8 @@ public class AudioMixingRule {
|
||||
final int match_rule = mRule & ~RULE_EXCLUSION_MASK;
|
||||
switch (match_rule) {
|
||||
case RULE_MATCH_ATTRIBUTE_USAGE:
|
||||
dest.writeInt(mAttr.getSystemUsage());
|
||||
break;
|
||||
case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
|
||||
dest.writeInt(mAttr.getCapturePreset());
|
||||
mAttr.writeToParcel(dest, AudioAttributes.FLATTEN_TAGS/*flags*/);
|
||||
break;
|
||||
case RULE_MATCH_UID:
|
||||
case RULE_MATCH_USERID:
|
||||
@@ -266,12 +264,14 @@ public class AudioMixingRule {
|
||||
public boolean isForCallRedirection() {
|
||||
for (AudioMixMatchCriterion criterion : mCriteria) {
|
||||
if (criterion.mAttr != null
|
||||
&& (criterion.mRule == RULE_MATCH_ATTRIBUTE_USAGE
|
||||
&& criterion.mAttr.getUsage() == AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
||||
&& criterion.mAttr.isForCallRedirection()
|
||||
&& ((criterion.mRule == RULE_MATCH_ATTRIBUTE_USAGE
|
||||
&& (criterion.mAttr.getUsage() == AudioAttributes.USAGE_VOICE_COMMUNICATION
|
||||
|| criterion.mAttr.getUsage()
|
||||
== AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING))
|
||||
|| (criterion.mRule == RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET
|
||||
&& criterion.mAttr.getCapturePreset()
|
||||
== MediaRecorder.AudioSource.VOICE_COMMUNICATION)
|
||||
&& criterion.mAttr.isForCallRedirection()) {
|
||||
&& (criterion.mAttr.getCapturePreset()
|
||||
== MediaRecorder.AudioSource.VOICE_COMMUNICATION)))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -713,19 +713,8 @@ public class AudioMixingRule {
|
||||
Integer intProp = null;
|
||||
switch (match_rule) {
|
||||
case RULE_MATCH_ATTRIBUTE_USAGE:
|
||||
int usage = in.readInt();
|
||||
if (AudioAttributes.isSystemUsage(usage)) {
|
||||
attr = new AudioAttributes.Builder()
|
||||
.setSystemUsage(usage).build();
|
||||
} else {
|
||||
attr = new AudioAttributes.Builder()
|
||||
.setUsage(usage).build();
|
||||
}
|
||||
break;
|
||||
case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET:
|
||||
int preset = in.readInt();
|
||||
attr = new AudioAttributes.Builder()
|
||||
.setInternalCapturePreset(preset).build();
|
||||
attr = AudioAttributes.CREATOR.createFromParcel(in);
|
||||
break;
|
||||
case RULE_MATCH_UID:
|
||||
case RULE_MATCH_USERID:
|
||||
|
||||
@@ -9771,7 +9771,7 @@ public class AudioService extends IAudioService.Stub
|
||||
projection)) {
|
||||
Slog.w(TAG, "Permission denied to register audio policy for pid "
|
||||
+ Binder.getCallingPid() + " / uid " + Binder.getCallingUid()
|
||||
+ ", need MODIFY_AUDIO_ROUTING or MediaProjection that can project audio");
|
||||
+ ", need system permission or a MediaProjection that can project audio");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user