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

Commit 2a180f11 authored by Oscar Azucena's avatar Oscar Azucena Committed by Android (Google) Code Review
Browse files

Merge "Remove user id based audio captured API."

parents d2822ad0 4e4d6e3b
Loading
Loading
Loading
Loading
+0 −4
Original line number Original line Diff line number Diff line
@@ -24377,10 +24377,8 @@ package android.media {
  public final class AudioPlaybackCaptureConfiguration {
  public final class AudioPlaybackCaptureConfiguration {
    method @NonNull public int[] getExcludeUids();
    method @NonNull public int[] getExcludeUids();
    method @NonNull public int[] getExcludeUsages();
    method @NonNull public int[] getExcludeUsages();
    method @NonNull public int[] getExcludeUserIds();
    method @NonNull public int[] getMatchingUids();
    method @NonNull public int[] getMatchingUids();
    method @NonNull public int[] getMatchingUsages();
    method @NonNull public int[] getMatchingUsages();
    method @NonNull public int[] getMatchingUserIds();
    method @NonNull public android.media.projection.MediaProjection getMediaProjection();
    method @NonNull public android.media.projection.MediaProjection getMediaProjection();
  }
  }
@@ -24388,11 +24386,9 @@ package android.media {
    ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection);
    ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUserId(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUserId(int);
  }
  }
  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+0 −48
Original line number Original line Diff line number Diff line
@@ -102,12 +102,6 @@ public final class AudioPlaybackCaptureConfiguration {
                                criterion -> criterion.getIntProp());
                                criterion -> criterion.getIntProp());
    }
    }


    /** @return the userId's passed to {@link Builder#addMatchingUserId(int)}. */
    public @NonNull int[] getMatchingUserIds() {
        return getIntPredicates(AudioMixingRule.RULE_MATCH_USERID,
                criterion -> criterion.getIntProp());
    }

    /** @return the usages passed to {@link Builder#excludeUsage(int)}. */
    /** @return the usages passed to {@link Builder#excludeUsage(int)}. */
    @AttributeUsage
    @AttributeUsage
    public @NonNull int[] getExcludeUsages() {
    public @NonNull int[] getExcludeUsages() {
@@ -121,12 +115,6 @@ public final class AudioPlaybackCaptureConfiguration {
                                criterion -> criterion.getIntProp());
                                criterion -> criterion.getIntProp());
    }
    }


    /** @return the userId's passed to {@link Builder#excludeUserId(int)}.  */
    public @NonNull int[] getExcludeUserIds() {
        return getIntPredicates(AudioMixingRule.RULE_EXCLUDE_USERID,
                criterion -> criterion.getIntProp());
    }

    private int[] getIntPredicates(int rule,
    private int[] getIntPredicates(int rule,
                                   ToIntFunction<AudioMixMatchCriterion> getPredicate) {
                                   ToIntFunction<AudioMixMatchCriterion> getPredicate) {
        return mAudioMixingRule.getCriteria().stream()
        return mAudioMixingRule.getCriteria().stream()
@@ -165,7 +153,6 @@ public final class AudioPlaybackCaptureConfiguration {
        private final MediaProjection mProjection;
        private final MediaProjection mProjection;
        private int mUsageMatchType = MATCH_TYPE_UNSPECIFIED;
        private int mUsageMatchType = MATCH_TYPE_UNSPECIFIED;
        private int mUidMatchType = MATCH_TYPE_UNSPECIFIED;
        private int mUidMatchType = MATCH_TYPE_UNSPECIFIED;
        private int mUserIdMatchType = MATCH_TYPE_UNSPECIFIED;


        /** @param projection A MediaProjection that supports audio projection. */
        /** @param projection A MediaProjection that supports audio projection. */
        public Builder(@NonNull MediaProjection projection) {
        public Builder(@NonNull MediaProjection projection) {
@@ -214,23 +201,6 @@ public final class AudioPlaybackCaptureConfiguration {
            return this;
            return this;
        }
        }


        /**
         * Only capture audio output by app with the matching {@code userId}.
         *
         * <p>If called multiple times, will capture audio output by apps whose userId is any of the
         * given userId's.
         *
         * @throws IllegalStateException if called in conjunction with {@link #excludeUserId(int)}.
         */
        public @NonNull Builder addMatchingUserId(int userId) {
            Preconditions.checkState(
                    mUserIdMatchType != MATCH_TYPE_EXCLUSIVE,
                    ERROR_MESSAGE_MISMATCHED_RULES);
            mAudioMixingRuleBuilder.addMixRule(AudioMixingRule.RULE_MATCH_USERID, userId);
            mUserIdMatchType = MATCH_TYPE_INCLUSIVE;
            return this;
        }

        /**
        /**
         * Only capture audio output that does not match the given {@link AudioAttributes}.
         * Only capture audio output that does not match the given {@link AudioAttributes}.
         *
         *
@@ -267,24 +237,6 @@ public final class AudioPlaybackCaptureConfiguration {
            return this;
            return this;
        }
        }


        /**
         * Only capture audio output by apps that do not have the matching {@code userId}.
         *
         * <p>If called multiple times, will capture audio output by apps whose userId is not any of
         * the given userId's.
         *
         * @throws IllegalStateException if called in conjunction with
         * {@link #addMatchingUserId(int)}.
         */
        public @NonNull Builder excludeUserId(int userId) {
            Preconditions.checkState(
                    mUserIdMatchType != MATCH_TYPE_INCLUSIVE,
                    ERROR_MESSAGE_MISMATCHED_RULES);
            mAudioMixingRuleBuilder.excludeMixRule(AudioMixingRule.RULE_MATCH_USERID, userId);
            mUserIdMatchType = MATCH_TYPE_EXCLUSIVE;
            return this;
        }

        /**
        /**
         * Builds the configuration instance.
         * Builds the configuration instance.
         *
         *
+8 −4
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
@@ -481,12 +482,13 @@ public class AudioPolicy {
     * @hide
     * @hide
     * Removes audio device affinity previously set by
     * Removes audio device affinity previously set by
     * {@link #setUserIdDeviceAffinity(int, java.util.List)}.
     * {@link #setUserIdDeviceAffinity(int, java.util.List)}.
     * @param userId userId of the application affected.
     * @param userId userId of the application affected, as obtained via
     * {@link UserHandle#getIdentifier}. Not to be confused with application uid.
     * @return true if the change was successful, false otherwise.
     * @return true if the change was successful, false otherwise.
     */
     */
    @TestApi
    @TestApi
    @SystemApi
    @SystemApi
    public boolean removeUserIdDeviceAffinity(int userId) {
    public boolean removeUserIdDeviceAffinity(@UserIdInt int userId) {
        synchronized (mLock) {
        synchronized (mLock) {
            if (mStatus != POLICY_STATUS_REGISTERED) {
            if (mStatus != POLICY_STATUS_REGISTERED) {
                throw new IllegalStateException("Cannot use unregistered AudioPolicy");
                throw new IllegalStateException("Cannot use unregistered AudioPolicy");
@@ -512,13 +514,15 @@ public class AudioPolicy {
     * multiple devices in the list doesn't imply the signals will be duplicated on the different
     * multiple devices in the list doesn't imply the signals will be duplicated on the different
     * audio devices, final routing will depend on the {@link AudioAttributes} of the sounds being
     * audio devices, final routing will depend on the {@link AudioAttributes} of the sounds being
     * played.
     * played.
     * @param userId Android user id to affect.
     * @param userId userId of the application affected, as obtained via
     * {@link UserHandle#getIdentifier}. Not to be confused with application uid.
     * @param devices list of devices to which the audio stream of the application may be routed.
     * @param devices list of devices to which the audio stream of the application may be routed.
     * @return true if the change was successful, false otherwise.
     * @return true if the change was successful, false otherwise.
     */
     */
    @TestApi
    @TestApi
    @SystemApi
    @SystemApi
    public boolean setUserIdDeviceAffinity(int userId, @NonNull List<AudioDeviceInfo> devices) {
    public boolean setUserIdDeviceAffinity(@UserIdInt int userId,
            @NonNull List<AudioDeviceInfo> devices) {
        Objects.requireNonNull(devices, "Illegal null list of audio devices");
        Objects.requireNonNull(devices, "Illegal null list of audio devices");
        synchronized (mLock) {
        synchronized (mLock) {
            if (mStatus != POLICY_STATUS_REGISTERED) {
            if (mStatus != POLICY_STATUS_REGISTERED) {