Exports API to allow RULE_MATCH_UID support both RECORDERS and PLAYERS mix type

Removes @hide to export AudioMixingRule#Builder#setTargetMixType(), AudioMix#MIX_TYPE_PLAYERS and AudioMix#MIX_TYPE_RECORDERS.

Bug: 183693610
Test: atest com.google.android.gts.audioservice.AudioServiceHostTest
CTS-Coverage-Bug: 191716676
Change-Id: I8eebfc8c139b0bd3ef277863eb46d2c3383eb65e
This commit is contained in:
yuanjiahsu
2021-05-18 01:56:38 +08:00
committed by Yuanjia Hsu
parent 51c4bd07b8
commit 47201097fc
3 changed files with 34 additions and 9 deletions

View File

@@ -5410,6 +5410,8 @@ package android.media.audiopolicy {
field public static final int MIX_STATE_DISABLED = -1; // 0xffffffff
field public static final int MIX_STATE_IDLE = 0; // 0x0
field public static final int MIX_STATE_MIXING = 1; // 0x1
field public static final int MIX_TYPE_PLAYERS = 0; // 0x0
field public static final int MIX_TYPE_RECORDERS = 1; // 0x1
field public static final int ROUTE_FLAG_LOOP_BACK = 2; // 0x2
field public static final int ROUTE_FLAG_RENDER = 1; // 0x1
}
@@ -5423,6 +5425,7 @@ package android.media.audiopolicy {
}
public class AudioMixingRule {
method public int getTargetMixType();
field public static final int RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET = 2; // 0x2
field public static final int RULE_MATCH_ATTRIBUTE_USAGE = 1; // 0x1
field public static final int RULE_MATCH_UID = 4; // 0x4
@@ -5437,6 +5440,7 @@ package android.media.audiopolicy {
method public android.media.audiopolicy.AudioMixingRule build();
method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException;
method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder setTargetMixType(int);
}
public class AudioPolicy {

View File

@@ -113,12 +113,10 @@ public class AudioMix {
*/
public static final int MIX_TYPE_INVALID = -1;
/**
* @hide
* Mix type indicating playback streams are mixed.
*/
public static final int MIX_TYPE_PLAYERS = 0;
/**
* @hide
* Mix type indicating recording streams are mixed.
*/
public static final int MIX_TYPE_RECORDERS = 1;

View File

@@ -16,6 +16,9 @@
package android.media.audiopolicy;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
@@ -24,6 +27,7 @@ import android.os.Build;
import android.os.Parcel;
import android.util.Log;
import java.lang.annotation.Retention;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;
@@ -199,7 +203,19 @@ public class AudioMixingRule {
}
private final int mTargetMixType;
int getTargetMixType() { return mTargetMixType; }
/** @hide */
@IntDef({AudioMix.MIX_TYPE_PLAYERS, AudioMix.MIX_TYPE_RECORDERS})
@Retention(SOURCE)
public @interface MixType {}
/**
* Gets target mix type of the mixing rule.
*/
public @MixType int getTargetMixType() {
return mTargetMixType;
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private final ArrayList<AudioMixMatchCriterion> mCriteria;
/** @hide */
@@ -469,17 +485,24 @@ public class AudioMixingRule {
}
/**
* Set target mix type of the mixing rule.
* Sets target mix type of the mixing rule.
*
* <p>Note: If the mix type was not specified, it will be decided automatically by mixing
* rule. For {@link #RULE_MATCH_UID}, the default type is {@link AudioMix#MIX_TYPE_PLAYERS}.
* <p>Note: If the mix type was not specified, it will be decided automatically by matched
* mixing rule. For example, {@link AudioMixingRule#RULE_MATCH_ATTRIBUTE_USAGE} or {@link
* AudioMixingRule#RULE_MATCH_USERID} applied {@link AudioMix#MIX_TYPE_PLAYERS}, {@link
* AudioMixingRule#RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET} applied {@link
* AudioMix#MIX_TYPE_RECORDERS}. For {@link AudioMixingRule#RULE_MATCH_UID}, the mix type
* could be {@link AudioMix#MIX_TYPE_PLAYERS} or {@link AudioMix#MIX_TYPE_RECORDERS}, and
* {@link AudioMix#MIX_TYPE_PLAYERS} is the default value.
*
* @param mixType {@link AudioMix#MIX_TYPE_PLAYERS} or {@link AudioMix#MIX_TYPE_RECORDERS}
* @return the same Builder instance.
*
* @hide
*/
public @NonNull Builder setTargetMixType(int mixType) {
public @NonNull Builder setTargetMixType(@MixType int mixType) {
if (mixType != AudioMix.MIX_TYPE_PLAYERS && mixType != AudioMix.MIX_TYPE_RECORDERS) {
throw new IllegalArgumentException("Illegal argument for mix type");
}
mTargetMixType = mixType;
Log.i("AudioMixingRule", "Builder setTargetMixType " + mixType);
return this;