Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a553bcf authored by Yuanjia Hsu's avatar Yuanjia Hsu Committed by Android (Google) Code Review
Browse files

Merge "Rename exported API and improve the documentation"

parents cf89194f 45452e86
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -5434,8 +5434,6 @@ 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
  }
@@ -5449,7 +5447,9 @@ package android.media.audiopolicy {
  }
  public class AudioMixingRule {
    method public int getTargetMixType();
    method public int getTargetMixRole();
    field public static final int MIX_ROLE_INJECTOR = 1; // 0x1
    field public static final int MIX_ROLE_PLAYERS = 0; // 0x0
    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
@@ -5464,7 +5464,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);
    method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder setTargetMixRole(int);
  }
  public class AudioPolicy {
+2 −0
Original line number Diff line number Diff line
@@ -113,10 +113,12 @@ 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;
+33 −19
Original line number Diff line number Diff line
@@ -203,17 +203,34 @@ public class AudioMixingRule {
    }

    private final int mTargetMixType;
    int getTargetMixType() {
        return mTargetMixType;
    }

    /**
     * Captures an audio signal from one or more playback streams.
     */
    public static final int MIX_ROLE_PLAYERS = AudioMix.MIX_TYPE_PLAYERS;
    /**
     * Injects an audio signal into the framework to replace a recording source.
     */
    public static final int MIX_ROLE_INJECTOR = AudioMix.MIX_TYPE_RECORDERS;

    /** @hide */
    @IntDef({AudioMix.MIX_TYPE_PLAYERS, AudioMix.MIX_TYPE_RECORDERS})
    @IntDef({MIX_ROLE_PLAYERS, MIX_ROLE_INJECTOR})
    @Retention(SOURCE)
    public @interface MixType {}
    public @interface MixRole {}

    /**
     * Gets target mix type of the mixing rule.
     * Gets target mix role of this mixing rule.
     *
     * <p>The mix role indicates playback streams will be captured or recording source will be
     * injected.
     *
     * @return integer value of {@link #MIX_ROLE_PLAYERS} or {@link #MIX_ROLE_INJECTOR}
     */
    public @MixType int getTargetMixType() {
        return mTargetMixType;
    public @MixRole int getTargetMixRole() {
        return mTargetMixType == AudioMix.MIX_TYPE_RECORDERS ? MIX_ROLE_INJECTOR : MIX_ROLE_PLAYERS;
    }

    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@@ -485,26 +502,23 @@ public class AudioMixingRule {
        }

        /**
         * Sets target mix type of the mixing rule.
         * Sets target mix role of the mixing rule.
         *
         * <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.
         * <p>The mix role indicates playback streams will be captured or recording source will be
         * injected. If not specified, the mix role will be decided automatically when
         * {@link #addRule(AudioAttributes, int)} or {@link #addMixRule(int, Object)} be called.
         *
         * @param mixType {@link AudioMix#MIX_TYPE_PLAYERS} or {@link AudioMix#MIX_TYPE_RECORDERS}
         * @param mixRole integer value of {@link #MIX_ROLE_PLAYERS} or {@link #MIX_ROLE_INJECTOR}
         * @return the same Builder instance.
         */
        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");
        public @NonNull Builder setTargetMixRole(@MixRole int mixRole) {
            if (mixRole != MIX_ROLE_PLAYERS && mixRole != MIX_ROLE_INJECTOR) {
                throw new IllegalArgumentException("Illegal argument for mix role");
            }

            mTargetMixType = mixType;
            Log.i("AudioMixingRule", "Builder setTargetMixType " + mixType);
            Log.i("AudioMixingRule", "Builder setTargetMixRole " + mixRole);
            mTargetMixType = mixRole == MIX_ROLE_INJECTOR
                    ? AudioMix.MIX_TYPE_RECORDERS : AudioMix.MIX_TYPE_PLAYERS;
            return this;
        }

+3 −3
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ public class AudioPolicyConfig implements Parcelable {
            // write voice communication capture allowed flag
            dest.writeBoolean(mix.getRule().voiceCommunicationCaptureAllowed());
            // write specified mix type
            dest.writeInt(mix.getRule().getTargetMixType());
            dest.writeInt(mix.getRule().getTargetMixRole());
            // write mix rules
            final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria();
            dest.writeInt(criteria.size());
@@ -137,7 +137,7 @@ public class AudioPolicyConfig implements Parcelable {
            // read voice capture allowed flag
            ruleBuilder.voiceCommunicationCaptureAllowed(in.readBoolean());
            // read specified mix type
            ruleBuilder.setTargetMixType(in.readInt());
            ruleBuilder.setTargetMixRole(in.readInt());
            // read mix rules
            int nbRules = in.readInt();
            for (int j = 0 ; j < nbRules ; j++) {
@@ -181,7 +181,7 @@ public class AudioPolicyConfig implements Parcelable {
                    + mix.getRule().voiceCommunicationCaptureAllowed() + "\n";
            // write mix rules
            textDump += "  specified mix type="
                    + mix.getRule().getTargetMixType() + "\n";
                    + mix.getRule().getTargetMixRole() + "\n";
            final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria();
            for (AudioMixMatchCriterion criterion : criteria) {
                switch(criterion.mRule) {