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

Commit 613d6121 authored by Kevin Rocard's avatar Kevin Rocard
Browse files

Improve Audio Playback Capture API



The API too closely resembled the underlying system API, in forcing the
client to construct a full AudioAttribute when only the usage was
useful.

Test: atest android.media.cts.AudioPlaybackCaptureTest#testCaptureMediaUsage
Bug: 111453086
Change-Id: Ic3944120ab4d5dc7b85e5baf7718a39a171a4333
Signed-off-by: default avatarKevin Rocard <krocard@google.com>
parent cf49db12
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -23405,10 +23405,10 @@ package android.media {
  public static final class AudioPlaybackCaptureConfiguration.Builder {
    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 addMatchingUsage(@NonNull android.media.AudioAttributes);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(@NonNull android.media.AudioAttributes);
    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
  }
  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+12 −14
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media;

import android.annotation.NonNull;
import android.media.AudioAttributes.AttributeUsage;
import android.media.audiopolicy.AudioMix;
import android.media.audiopolicy.AudioMixingRule;
import android.media.projection.MediaProjection;
@@ -41,12 +42,9 @@ import com.android.internal.util.Preconditions;
 * <pre>
 *     MediaProjection mediaProjection;
 *     // Retrieve a audio capable projection from the MediaProjectionManager
 *     AudioAttributes mediaAttr = new AudioAttributes.Builder()
 *         .setUsage(AudioAttributes.USAGE_MEDIA)
 *         .build();
 *     AudioPlaybackCaptureConfiguration config =
 *              new AudioPlaybackCaptureConfiguration.Builder(mediaProjection)
 *         .addMatchingUsage(mediaAttr)
 *         .addMatchingUsage(AudioAttributes.USAGE_MEDIA)
 *         .build();
 *     AudioRecord record = new AudioRecord.Builder()
 *         .setAudioPlaybackCaptureConfig(config)
@@ -121,14 +119,13 @@ public final class AudioPlaybackCaptureConfiguration {
         * attributes.
         *
         * @throws IllegalStateException if called in conjunction with
         *     {@link #excludeUsage(AudioAttributes)}.
         *     {@link #excludeUsage(int)}.
         */
        public @NonNull Builder addMatchingUsage(@NonNull AudioAttributes audioAttributes) {
            Preconditions.checkNotNull(audioAttributes);
        public @NonNull Builder addMatchingUsage(@AttributeUsage int usage) {
            Preconditions.checkState(
                    mUsageMatchType != MATCH_TYPE_EXCLUSIVE, ERROR_MESSAGE_MISMATCHED_RULES);
            mAudioMixingRuleBuilder
                    .addRule(audioAttributes, AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE);
            mAudioMixingRuleBuilder.addRule(new AudioAttributes.Builder().setUsage(usage).build(),
                                            AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE);
            mUsageMatchType = MATCH_TYPE_INCLUSIVE;
            return this;
        }
@@ -156,13 +153,14 @@ public final class AudioPlaybackCaptureConfiguration {
         * given attributes.
         *
         * @throws IllegalStateException if called in conjunction with
         *     {@link #addMatchingUsage(AudioAttributes)}.
         *     {@link #addMatchingUsage(int)}.
         */
        public @NonNull Builder excludeUsage(@NonNull AudioAttributes audioAttributes) {
            Preconditions.checkNotNull(audioAttributes);
        public @NonNull Builder excludeUsage(@AttributeUsage int usage) {
            Preconditions.checkState(
                    mUsageMatchType != MATCH_TYPE_INCLUSIVE, ERROR_MESSAGE_MISMATCHED_RULES);
            mAudioMixingRuleBuilder.excludeRule(audioAttributes,
            mAudioMixingRuleBuilder.excludeRule(new AudioAttributes.Builder()
                                                    .setUsage(usage)
                                                    .build(),
                                                AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE);
            mUsageMatchType = MATCH_TYPE_EXCLUSIVE;
            return this;