Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -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(); } media/java/android/media/AudioPlaybackCaptureConfiguration.java +36 −0 Original line number Diff line number Diff line Loading @@ -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. * Loading Loading @@ -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. Loading media/java/android/media/audiopolicy/AudioMixingRule.java +8 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading @@ -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; Loading Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -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(); }
media/java/android/media/AudioPlaybackCaptureConfiguration.java +36 −0 Original line number Diff line number Diff line Loading @@ -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. * Loading Loading @@ -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. Loading
media/java/android/media/audiopolicy/AudioMixingRule.java +8 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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) { Loading @@ -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; Loading