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

Commit 3f045c85 authored by François Gaffie's avatar François Gaffie Committed by Oscar Azucena
Browse files

audio: multizones readiness: add zone ID to strategy



Bug: 316643994
Test: atest AudioManagerTest
Flag: android.media.audiopolicy.multi_zone_audio

Change-Id: Ifd72653dcc03bfb03b72d686707d0973abfa3551
Signed-off-by: default avatarFrançois Gaffie <francois.gaffie@renault.com>
parent 9cbe827c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -7569,6 +7569,7 @@ package android.media {
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getPreferredDevicesForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) public int getStreamTypeAlias(int);
    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getSupportedSystemUsages();
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE", android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED}) public int getVolumeGroupIdForAttributes(@NonNull android.media.AudioAttributes, int);
    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int getVolumeGroupMaxVolumeIndex(int);
    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int getVolumeGroupMinVolumeIndex(int);
    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int getVolumeGroupVolumeIndex(int);
@@ -8099,11 +8100,19 @@ package android.media.audiopolicy {
    method @NonNull public static android.media.audiopolicy.AudioProductStrategy createInvalidAudioProductStrategy(int);
    method public int describeContents();
    method @NonNull public android.media.AudioAttributes getAudioAttributes();
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") @Nullable public static android.media.audiopolicy.AudioProductStrategy getAudioProductStrategyForAudioAttributes(@NonNull android.media.AudioAttributes, int, boolean);
    method public int getId();
    method @NonNull public String getName();
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public static int getVolumeGroupIdForAudioAttributes(@NonNull android.media.AudioAttributes, int, boolean);
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public int getVolumeGroupIdForAudioAttributes(@NonNull android.media.AudioAttributes, int);
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public int getZoneId();
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public static int getZoneIdForAudioVolumeGroupId(int);
    method public boolean supportsAudioAttributes(@NonNull android.media.AudioAttributes);
    method @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public boolean supportsAudioAttributes(@NonNull android.media.AudioAttributes, int);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategy> CREATOR;
    field @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public static final int DEFAULT_ZONE_ID = 0; // 0x0
    field @FlaggedApi("android.media.audiopolicy.multi_zone_audio") public static final int INVALID_ZONE_ID = -1; // 0xffffffff
  }
  public final class AudioVolumeGroup implements android.os.Parcelable {
+8 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ static jmethodID gAudioProductStrategyCstor;
static struct {
    jfieldID    mAudioAttributesGroups;
    jfieldID    mName;
    jfieldID    mZoneId;
    jfieldID    mId;
} gAudioProductStrategyFields;

@@ -79,11 +80,13 @@ static jint convertAudioProductStrategiesFromNative(
    jobject jAudioAttribute = NULL;
    jstring jName = NULL;
    jint jStrategyId = NULL;
    jint jZoneId = NULL;
    jint numAttributesGroups;
    size_t indexGroup = 0;

    jName = env->NewStringUTF(strategy.getName().c_str());
    jStrategyId = static_cast<jint>(strategy.getId());
    jZoneId = static_cast<jint>(strategy.getZoneId());

    // Audio Attributes Group array
    int attrGroupIndex = 0;
@@ -150,7 +153,7 @@ static jint convertAudioProductStrategiesFromNative(
    }
    *jAudioStrategy = env->NewObject(gAudioProductStrategyClass, gAudioProductStrategyCstor,
                                     jName,
                                     jStrategyId,
                                     jStrategyId, jZoneId,
                                     jAudioAttributesGroups);
exit:
    if (jAudioAttributes != NULL) {
@@ -229,7 +232,8 @@ int register_android_media_AudioProductStrategies(JNIEnv *env)
    gAudioProductStrategyClass = MakeGlobalRefOrDie(env, audioProductStrategyClass);
    gAudioProductStrategyCstor = GetMethodIDOrDie(
                env, audioProductStrategyClass, "<init>",
                "(Ljava/lang/String;I[Landroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;)V");
                "(Ljava/lang/String;"
                "II[Landroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;)V");
    gAudioProductStrategyFields.mAudioAttributesGroups = GetFieldIDOrDie(
                env, audioProductStrategyClass, "mAudioAttributesGroups",
                "[Landroid/media/audiopolicy/AudioProductStrategy$AudioAttributesGroup;");
@@ -237,6 +241,8 @@ int register_android_media_AudioProductStrategies(JNIEnv *env)
                env, audioProductStrategyClass, "mName", "Ljava/lang/String;");
    gAudioProductStrategyFields.mId = GetFieldIDOrDie(
                env, audioProductStrategyClass, "mId", "I");
    gAudioProductStrategyFields.mZoneId = GetFieldIDOrDie(
                env, audioProductStrategyClass, "mZoneId", "I");

    jclass audioAttributesGroupClass = FindClassOrDie(env, kAudioAttributesGroupsClassPathName);
    gAudioAttributesGroupClass = MakeGlobalRefOrDie(env, audioAttributesGroupClass);
+26 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.media.audio.Flags.autoPublicVolumeApiHardening;
import static android.media.audio.Flags.cacheGetStreamMinMaxVolume;
import static android.media.audio.Flags.cacheGetStreamVolume;
import static android.media.audiopolicy.Flags.FLAG_ENABLE_FADE_MANAGER_CONFIGURATION;
import static android.media.audiopolicy.Flags.FLAG_MULTI_ZONE_AUDIO;

import android.Manifest;
import android.annotation.CallbackExecutor;
@@ -1651,6 +1652,31 @@ public class AudioManager {
                /* fallbackOnDefault= */ true);
    }

    /**
     * Returns the volume group id associated to the given {@link AudioAttributes} and zoneId.
     *
     * @param attributes The {@link AudioAttributes} to consider.
     * @param zoneId to consider.
     * @return audio volume group id supporting the given {@link AudioAttributes} if found,
     * {@code android.media.audiopolicy.AudioVolumeGroup.DEFAULT_VOLUME_GROUP} otherwise.
     *
     * @hide
     */
    @SystemApi
    @FlaggedApi(FLAG_MULTI_ZONE_AUDIO)
    @RequiresPermission(anyOf = {
            Manifest.permission.MODIFY_AUDIO_ROUTING,
            Manifest.permission.QUERY_AUDIO_STATE,
            Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
    })
    public int getVolumeGroupIdForAttributes(@NonNull AudioAttributes attributes, int zoneId) {
        try {
            return getService().getVolumeGroupIdForAttributes(attributes, zoneId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Sets the volume index for a particular group associated to given id.
     * <p> Call first in prior {@link #getVolumeGroupIdForAttributes(AudioAttributes)}
+3 −0
Original line number Diff line number Diff line
@@ -154,6 +154,9 @@ interface IAudioService {
    @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
    List<AudioVolumeGroup> getAudioVolumeGroups();

    @EnforcePermission(anyOf={"MODIFY_AUDIO_ROUTING", "QUERY_AUDIO_STATE", "MODIFY_AUDIO_SETTINGS_PRIVILEGED"})
    int getVolumeGroupIdForAttributes(in AudioAttributes attributes, int zoneId);

    @EnforcePermission(anyOf={"MODIFY_AUDIO_SETTINGS_PRIVILEGED", "MODIFY_AUDIO_ROUTING"})
    void setVolumeGroupVolumeIndex(int groupId, int index, int flags, String callingPackage,
            in String attributionTag);
+293 −17

File changed.

Preview size limit exceeded, changes collapsed.

Loading