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

Commit 4bea465d authored by Kevin Rocard's avatar Kevin Rocard Committed by Android (Google) Code Review
Browse files

Merge "Add getters to AudioPlaybackCaptureConfiguration" into qt-dev

parents 9cf5d503 de5cc3c8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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();
  }
+36 −0
Original line number Diff line number Diff line
@@ -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.
+8 −2
Original line number Diff line number Diff line
@@ -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;