From 47201097fcc81408c723b07ab9505162dda58b86 Mon Sep 17 00:00:00 2001 From: yuanjiahsu Date: Tue, 18 May 2021 01:56:38 +0800 Subject: [PATCH] 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 --- core/api/system-current.txt | 4 ++ .../android/media/audiopolicy/AudioMix.java | 2 - .../media/audiopolicy/AudioMixingRule.java | 37 +++++++++++++++---- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index ec29fb1ade615..6aae9ade6405e 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -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 { diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java index 0c733482b2b56..d00e5b55fd14e 100644 --- a/media/java/android/media/audiopolicy/AudioMix.java +++ b/media/java/android/media/audiopolicy/AudioMix.java @@ -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; diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java index abbcc669504d2..99ddff22f6a20 100644 --- a/media/java/android/media/audiopolicy/AudioMixingRule.java +++ b/media/java/android/media/audiopolicy/AudioMixingRule.java @@ -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 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. * - *

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}. + *

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;