diff options
| -rw-r--r-- | api/current.txt | 4 | ||||
| -rw-r--r-- | media/java/android/media/AudioPlaybackCaptureConfiguration.java | 36 | ||||
| -rw-r--r-- | media/java/android/media/audiopolicy/AudioMixingRule.java | 10 |
3 files changed, 48 insertions, 2 deletions
diff --git a/api/current.txt b/api/current.txt index 1cfec749caa2..6c7f28c45d54 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23424,6 +23424,10 @@ package android.media { } public final class AudioPlaybackCaptureConfiguration { + method @NonNull public int[] getExcludeUids(); + method @NonNull public int[] getExcludeUsages(); + method @NonNull public int[] getMatchingUids(); + method @NonNull public int[] getMatchingUsages(); method @NonNull public android.media.projection.MediaProjection getMediaProjection(); } diff --git a/media/java/android/media/AudioPlaybackCaptureConfiguration.java b/media/java/android/media/AudioPlaybackCaptureConfiguration.java index d61f14c25c7e..fe5005a7cc9a 100644 --- a/media/java/android/media/AudioPlaybackCaptureConfiguration.java +++ b/media/java/android/media/AudioPlaybackCaptureConfiguration.java @@ -20,11 +20,14 @@ import android.annotation.NonNull; import android.media.AudioAttributes.AttributeUsage; import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioMixingRule; +import android.media.audiopolicy.AudioMixingRule.AudioMixMatchCriterion; import android.media.projection.MediaProjection; import android.os.RemoteException; import com.android.internal.util.Preconditions; +import java.util.function.ToIntFunction; + /** * Configuration for capturing audio played by other apps. * @@ -83,6 +86,39 @@ public final class AudioPlaybackCaptureConfiguration { return mProjection; } + /** @return the usages passed to {@link Builder#addMatchingUsage(int)}. */ + @AttributeUsage + public @NonNull int[] getMatchingUsages() { + return getIntPredicates(AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE, + criterion -> criterion.getAudioAttributes().getUsage()); + } + + /** @return the UIDs passed to {@link Builder#addMatchingUid(int)}. */ + public @NonNull int[] getMatchingUids() { + return getIntPredicates(AudioMixingRule.RULE_MATCH_UID, + criterion -> criterion.getIntProp()); + } + + /** @return the usages passed to {@link Builder#excludeUsage(int)}. */ + @AttributeUsage + public @NonNull int[] getExcludeUsages() { + return getIntPredicates(AudioMixingRule.RULE_EXCLUDE_ATTRIBUTE_USAGE, + criterion -> criterion.getAudioAttributes().getUsage()); + } + + /** @return the UIDs passed to {@link Builder#excludeUid(int)}. */ + public @NonNull int[] getExcludeUids() { + return getIntPredicates(AudioMixingRule.RULE_EXCLUDE_UID, + criterion -> criterion.getIntProp()); + } + + private int[] getIntPredicates(int rule, + ToIntFunction<AudioMixMatchCriterion> getPredicate) { + return mAudioMixingRule.getCriteria().stream() + .filter(criterion -> criterion.getRule() == rule) + .mapToInt(getPredicate) + .toArray(); + } /** * Returns a mix that routes audio back into the app while still playing it from the speakers. diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java index 947b06cdf6b2..5ef19db4c5e6 100644 --- a/media/java/android/media/audiopolicy/AudioMixingRule.java +++ b/media/java/android/media/audiopolicy/AudioMixingRule.java @@ -92,7 +92,8 @@ public class AudioMixingRule { public static final int RULE_EXCLUDE_UID = RULE_EXCLUSION_MASK | RULE_MATCH_UID; - static final class AudioMixMatchCriterion { + /** @hide */ + public static final class AudioMixMatchCriterion { @UnsupportedAppUsage final AudioAttributes mAttr; @UnsupportedAppUsage @@ -137,6 +138,10 @@ public class AudioMixingRule { dest.writeInt(-1); } } + + public AudioAttributes getAudioAttributes() { return mAttr; } + public int getIntProp() { return mIntProp; } + public int getRule() { return mRule; } } boolean isAffectingUsage(int usage) { @@ -163,7 +168,8 @@ public class AudioMixingRule { int getTargetMixType() { return mTargetMixType; } @UnsupportedAppUsage private final ArrayList<AudioMixMatchCriterion> mCriteria; - ArrayList<AudioMixMatchCriterion> getCriteria() { return mCriteria; } + /** @hide */ + public ArrayList<AudioMixMatchCriterion> getCriteria() { return mCriteria; } @UnsupportedAppUsage private boolean mAllowPrivilegedPlaybackCapture = false; |