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

Commit 0699fecd authored by François Gaffie's avatar François Gaffie Committed by Hongwei Wang
Browse files

AudioManager: add Audio Product Strategies introspection SystemAPI



Bug: 124767636
Test: dumpsys media.audio_policy
Change-Id: I31b970d7439f76604079d4cffc67bc9373df08e1
Signed-off-by: default avatarFrançois Gaffie <francois.gaffie@renault.com>
parent 3f9262a9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3455,6 +3455,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 public boolean isAudioServerRunning();
    method public boolean isHdmiSystemAudioSupported();
    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+25 −0
Original line number Diff line number Diff line
@@ -36,6 +36,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.projection.MediaProjection;
import android.media.session.MediaController;
import android.media.session.MediaSession;
@@ -5221,6 +5222,30 @@ public class AudioManager {
        return AudioSystem.isHapticPlaybackSupported();
    }

    /**
     * @hide
     * Introspection API to retrieve audio product strategies.
     * When implementing {Car|Oem}AudioManager, use this method  to retrieve the collection of
     * audio product strategies, which is indexed by a weakly typed index in order to be extended
     * by OEM without any needs of AOSP patches.
     * The {Car|Oem}AudioManager can expose API to build {@link AudioAttributes} for a given product
     * strategy refered either by its index or human readable string. It will allow clients
     * application to start streaming data using these {@link AudioAttributes} on the selected
     * device by Audio Policy Engine.
     * @return a (possibly zero-length) array of
     *         {@see android.media.audiopolicy.AudioProductStrategy} objects.
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
    public @NonNull AudioProductStrategies getAudioProductStrategies() {
        final IAudioService service = getService();
        try {
            return service.getAudioProductStrategies();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }


    //---------------------------------------------------------
    // Inner classes
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.media.IVolumeController;
import android.media.PlayerBase;
import android.media.VolumePolicy;
import android.media.audiopolicy.AudioPolicyConfig;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.IAudioPolicyCallback;
import android.media.projection.IMediaProjection;

@@ -82,6 +83,8 @@ interface IAudioService {

    int getLastAudibleStreamVolume(int streamType);

    AudioProductStrategies getAudioProductStrategies();

    void setMicrophoneMute(boolean on, String callingPackage, int userId);

    void setRingerModeExternal(int ringerMode, String caller);
+14 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ import android.media.audiofx.AudioEffect;
import android.media.audiopolicy.AudioMix;
import android.media.audiopolicy.AudioPolicy;
import android.media.audiopolicy.AudioPolicyConfig;
import android.media.audiopolicy.AudioProductStrategies;
import android.media.audiopolicy.IAudioPolicyCallback;
import android.media.projection.IMediaProjection;
import android.media.projection.IMediaProjectionManager;
@@ -274,6 +275,9 @@ public class AudioService extends IAudioService.Stub

    private SettingsObserver mSettingsObserver;

    /** @see AudioProductStrategies */
    private static AudioProductStrategies sAudioProductStrategies;

    private int mMode = AudioSystem.MODE_NORMAL;
    // protects mRingerMode
    private final Object mSettingsLock = new Object();
@@ -624,6 +628,8 @@ public class AudioService extends IAudioService.Stub
        mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        mHasVibrator = mVibrator == null ? false : mVibrator.hasVibrator();

        sAudioProductStrategies = new AudioProductStrategies();

        // Initialize volume
        int maxCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_steps", -1);
        if (maxCallVolume != -1) {
@@ -988,6 +994,14 @@ public class AudioService extends IAudioService.Stub
        }
    }

    /**
     * @return the {@link android.media.audiopolicy.AudioProductStrategies} discovered from the
     * platform configuration file.
     */
    public @NonNull AudioProductStrategies getAudioProductStrategies() {
        return sAudioProductStrategies;
    }

    private void checkAllAliasStreamVolumes() {
        synchronized (mSettingsLock) {
            synchronized (VolumeStreamState.class) {