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

Commit 6d69bde3 authored by Hayden Gomes's avatar Hayden Gomes
Browse files

Replacing AudioProductStrategies with List

- Removed AudioProductStrategies and updated usages to work with
List<AudioProductStrategy>
- ditributed looping logic to the respective callers

Test: built successfully with make and ran on device
Bug: 129265140
Change-Id: If95ba9c2418a1fda29590ca1af2d04e7395c2130
parent 5c7c6a4b
Loading
Loading
Loading
Loading
+1 −17
Original line number Diff line number Diff line
@@ -3497,7 +3497,7 @@ package android.media {
    method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
    method public void clearAudioServerStateCallback();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioProductStrategies getAudioProductStrategies();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.audiopolicy.AudioVolumeGroups getAudioVolumeGroups();
    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
@@ -3677,22 +3677,6 @@ package android.media.audiopolicy {
    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setLooper(@NonNull android.os.Looper) throws java.lang.IllegalArgumentException;
  }
  public final class AudioProductStrategies implements java.lang.Iterable<android.media.audiopolicy.AudioProductStrategy> android.os.Parcelable {
    ctor public AudioProductStrategies();
    method public int describeContents();
    method @NonNull public android.media.AudioAttributes getAudioAttributesForLegacyStreamType(int);
    method @NonNull public android.media.AudioAttributes getAudioAttributesForProductStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
    method @Nullable public android.media.audiopolicy.AudioProductStrategy getById(int);
    method public int getLegacyStreamTypeForAudioAttributes(@NonNull android.media.AudioAttributes);
    method @Nullable public android.media.audiopolicy.AudioProductStrategy getProductStrategyForAudioAttributes(@NonNull android.media.AudioAttributes);
    method public int getVolumeGroupIdForAttributes(@NonNull android.media.AudioAttributes);
    method public int getVolumeGroupIdForLegacyStreamType(int);
    method @NonNull public java.util.Iterator<android.media.audiopolicy.AudioProductStrategy> iterator();
    method public int size();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategies> CREATOR;
  }
  public final class AudioProductStrategy implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+49 −13
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.preference;

import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
@@ -27,7 +28,7 @@ import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroups;
import android.net.Uri;
import android.os.Handler;
@@ -44,6 +45,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.Preconditions;

/**
 * Turns a {@link SeekBar} into a volume control.
@@ -67,7 +69,6 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba

    private static final int MSG_GROUP_VOLUME_CHANGED = 1;
    private final Handler mVolumeHandler = new VolumeHandler();
    private final AudioProductStrategies mAudioProductStrategies;
    private AudioAttributes mAttributes;
    private int mVolumeGroupId;

@@ -161,11 +162,9 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
        }
        mZenMode = mNotificationManager.getZenMode();

        mAudioProductStrategies = mAudioManager.getAudioProductStrategies();
        if (mAudioProductStrategies.size() > 0) {
            mVolumeGroupId = mAudioProductStrategies.getVolumeGroupIdForLegacyStreamType(
                    mStreamType);
            mAttributes = mAudioProductStrategies.getAudioAttributesForLegacyStreamType(
        if (AudioManager.getAudioProductStrategies().size() > 0) {
            mVolumeGroupId = getVolumeGroupIdForLegacyStreamType(mStreamType);
            mAttributes = getAudioAttributesForLegacyStreamType(
                    mStreamType);
        }

@@ -190,6 +189,44 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
        mDefaultUri = defaultUri;
    }

    private int getVolumeGroupIdForLegacyStreamType(int streamType) {
        for (final AudioProductStrategy productStrategy :
                AudioManager.getAudioProductStrategies()) {
            int volumeGroupId = productStrategy.getVolumeGroupIdForLegacyStreamType(streamType);
            if (volumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
                return volumeGroupId;
            }
        }
        // The default volume group is the one hosted by default product strategy, i.e.
        // supporting Default Attributes
        return getVolumeGroupIdForAttributesInt(AudioProductStrategy.sDefaultAttributes);
    }

    private int getVolumeGroupIdForAttributesInt(@NonNull AudioAttributes attributes) {
        Preconditions.checkNotNull(attributes, "attributes must not be null");
        for (final AudioProductStrategy productStrategy :
                AudioManager.getAudioProductStrategies()) {
            int volumeGroupId = productStrategy.getVolumeGroupIdForAudioAttributes(attributes);
            if (volumeGroupId != AudioVolumeGroups.DEFAULT_VOLUME_GROUP) {
                return volumeGroupId;
            }
        }
        return AudioVolumeGroups.DEFAULT_VOLUME_GROUP;
    }

    private @NonNull AudioAttributes getAudioAttributesForLegacyStreamType(int streamType) {
        for (final AudioProductStrategy productStrategy :
                AudioManager.getAudioProductStrategies()) {
            AudioAttributes aa = productStrategy.getAudioAttributesForLegacyStreamType(streamType);
            if (aa != null) {
                return aa;
            }
        }
        return new AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
                .setUsage(AudioAttributes.USAGE_UNKNOWN).build();
    }

    private static boolean isNotificationOrRing(int stream) {
        return stream == AudioManager.STREAM_RING || stream == AudioManager.STREAM_NOTIFICATION;
    }
@@ -329,7 +366,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
        postStopSample();
        mContext.getContentResolver().unregisterContentObserver(mVolumeObserver);
        mReceiver.setListening(false);
        if (mAudioProductStrategies.size() > 0) {
        if (AudioManager.getAudioProductStrategies().size() > 0) {
            unregisterVolumeGroupCb();
        }
        mSeekBar.setOnSeekBarChangeListener(null);
@@ -349,7 +386,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
                System.getUriFor(System.VOLUME_SETTINGS_INT[mStreamType]),
                false, mVolumeObserver);
        mReceiver.setListening(true);
        if (mAudioProductStrategies.size() > 0) {
        if (AudioManager.getAudioProductStrategies().size() > 0) {
            registerVolumeGroupCb();
        }
    }
@@ -507,7 +544,7 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
            if (AudioManager.VOLUME_CHANGED_ACTION.equals(action)) {
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                int streamValue = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_VALUE, -1);
                if (mAudioProductStrategies.size() == 0) {
                if (AudioManager.getAudioProductStrategies().size() == 0) {
                    updateVolumeSlider(streamType, streamValue);
                }
            } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
@@ -519,12 +556,11 @@ public class SeekBarVolumizer implements OnSeekBarChangeListener, Handler.Callba
                }
            } else if (AudioManager.STREAM_DEVICES_CHANGED_ACTION.equals(action)) {
                int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
                if (mAudioProductStrategies.size() == 0) {
                if (AudioManager.getAudioProductStrategies().size() == 0) {
                    int streamVolume = mAudioManager.getStreamVolume(streamType);
                    updateVolumeSlider(streamType, streamVolume);
                } else {
                    int volumeGroup = mAudioProductStrategies.getVolumeGroupIdForLegacyStreamType(
                            streamType);
                    int volumeGroup = getVolumeGroupIdForLegacyStreamType(streamType);
                    if (volumeGroup != AudioVolumeGroups.DEFAULT_VOLUME_GROUP
                            && volumeGroup == mVolumeGroupId) {
                        int streamVolume = mAudioManager.getStreamVolume(streamType);
+1 −23
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@
using namespace android;

// ----------------------------------------------------------------------------
static const char* const kClassPathName = "android/media/audiopolicy/AudioProductStrategies";
static const char* const kClassPathName = "android/media/audiopolicy/AudioProductStrategy";
static const char* const kAudioProductStrategyClassPathName =
        "android/media/audiopolicy/AudioProductStrategy";

@@ -194,34 +194,12 @@ exit:
    return jStatus;
}

static jint
android_media_AudioSystem_getProductStrategyFromAudioAttributes(JNIEnv *env, jobject clazz,
                                                                jobject jAudioAttributes)
{
    JNIAudioAttributeHelper::UniqueAaPtr attributes = JNIAudioAttributeHelper::makeUnique();
    jint jStatus = JNIAudioAttributeHelper::nativeFromJava(env,
                                                           jAudioAttributes,
                                                           attributes.get());
    if (jStatus != (jint)AUDIO_JAVA_SUCCESS) {
        return jStatus;
    }
    product_strategy_t psId;
    status_t status = AudioSystem::getProductStrategyFromAudioAttributes(
                AudioAttributes(*attributes.get()), psId);
    if (status != NO_ERROR) {
        return nativeToJavaStatus(status);
    }
    return psId;
}

/*
 * JNI registration.
 */
static const JNINativeMethod gMethods[] = {
    {"native_list_audio_product_strategies", "(Ljava/util/ArrayList;)I",
                        (void *)android_media_AudioSystem_listAudioProductStrategies},
    {"native_get_product_strategies_from_audio_attributes", "(Landroid/media/AudioAttributes;)I",
                        (void *)android_media_AudioSystem_getProductStrategyFromAudioAttributes},
};

int register_android_media_AudioProductStrategies(JNIEnv *env)
+7 −7
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.AudioProductStrategy;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
@@ -783,9 +783,10 @@ public final class AudioAttributes implements Parcelable {
         */
        @UnsupportedAppUsage
        public Builder setInternalLegacyStreamType(int streamType) {
            final AudioProductStrategies ps = new AudioProductStrategies();
            if (ps.size() > 0) {
                AudioAttributes attributes = ps.getAudioAttributesForLegacyStreamType(streamType);
            if (AudioProductStrategy.getAudioProductStrategies().size() > 0) {
                AudioAttributes attributes =
                        AudioProductStrategy.getAudioAttributesForStrategyWithLegacyStreamType(
                                streamType);
                if (attributes != null) {
                    return new Builder(attributes);
                }
@@ -1165,9 +1166,8 @@ public final class AudioAttributes implements Parcelable {
                    AudioSystem.STREAM_MUSIC : AudioSystem.STREAM_TTS;
        }

        final AudioProductStrategies ps = new AudioProductStrategies();
        if (ps.size() > 0) {
            return ps.getLegacyStreamTypeForAudioAttributes(aa);
        if (AudioProductStrategy.getAudioProductStrategies().size() > 0) {
            return AudioProductStrategy.getLegacyStreamTypeForStrategyWithAudioAttributes(aa);
        }
        // usage to stream type mapping
        switch (aa.getUsage()) {
+3 −2
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import android.content.Context;
import android.content.Intent;
import android.media.audiopolicy.AudioPolicy;
import android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroupChangeHandler;
import android.media.audiopolicy.AudioVolumeGroups;
import android.media.projection.MediaProjection;
@@ -5406,8 +5406,9 @@ public class AudioManager {
     *         {@see android.media.audiopolicy.AudioProductStrategy} objects.
     */
    @SystemApi
    @NonNull
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
    public @NonNull AudioProductStrategies getAudioProductStrategies() {
    public static List<AudioProductStrategy> getAudioProductStrategies() {
        final IAudioService service = getService();
        try {
            return service.getAudioProductStrategies();
Loading