OSDN Git Service

Add getters to AudioPlaybackCaptureConfiguration
authorKevin Rocard <krocard@google.com>
Tue, 9 Apr 2019 23:25:26 +0000 (16:25 -0700)
committerKevin Rocard <krocard@google.com>
Mon, 15 Apr 2019 15:35:29 +0000 (08:35 -0700)
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>
api/current.txt
media/java/android/media/AudioPlaybackCaptureConfiguration.java
media/java/android/media/audiopolicy/AudioMixingRule.java

index 03648ea..8c8be46 100644 (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();
   }
 
index bcaef03..927afab 100644 (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.
index 947b06c..5ef19db 100644 (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;