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

Commit de5cc3c8 authored by Kevin Rocard's avatar Kevin Rocard
Browse files

Add getters to AudioPlaybackCaptureConfiguration



Unfortunately AudioMixingRule being in a different package,
some of its members had to be made public @hide to be used
by AudioPlaybackCaptureConfiguration.

Bug: 129948989
Test: atest AudioAttributesTest
Change-Id: Ie8cdf67aee9ff7cf9144a66d47c301712516cf87
Signed-off-by: default avatarKevin Rocard <krocard@google.com>
parent 32fa3c23
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -23414,6 +23414,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.
 *
@@ -77,6 +80,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;