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: Kevin Rocard <krocard@google.com>
This commit is contained in:
Kevin Rocard
2019-04-09 16:25:26 -07:00
parent 32fa3c237d
commit de5cc3c8c1
3 changed files with 48 additions and 2 deletions

View File

@@ -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();
}

View File

@@ -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.

View File

@@ -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;