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

Commit c5f69571 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

AudioManager.getSpatializer() never returns null

Spatializer instance returned by AudioManager.getSpatializer()
 is never null.
Instead of having this getter return null when the device
 doesn't support spatialization, the user can query the
 instance for it's level of support for the feature.
The level of support is independent of the state of the
 spatializer.

Bug: 191404931
Test: atest SpatializerTest
Change-Id: Id08670749b4d34230313d2cd829aa5ba414dae21
parent a12a816a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -20454,7 +20454,7 @@ package android.media {
    method public String getProperty(String);
    method public int getRingerMode();
    method @Deprecated public int getRouting(int);
    method @Nullable public android.media.Spatializer getSpatializer();
    method @NonNull public android.media.Spatializer getSpatializer();
    method public int getStreamMaxVolume(int);
    method public int getStreamMinVolume(int);
    method public int getStreamVolume(int);
@@ -23854,9 +23854,13 @@ package android.media {
  public class Spatializer {
    method public void addOnSpatializerStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
    method public boolean canBeSpatialized(@NonNull android.media.AudioAttributes, @NonNull android.media.AudioFormat);
    method public int getImmersiveAudioLevel();
    method public boolean isAvailable();
    method public boolean isEnabled();
    method public void removeOnSpatializerStateChangedListener(@NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL = 1; // 0x1
    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_NONE = 0; // 0x0
    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_OTHER = -1; // 0xffffffff
  }
  public static interface Spatializer.OnSpatializerStateChangedListener {
+3 −8
Original line number Diff line number Diff line
@@ -2444,15 +2444,10 @@ public class AudioManager {
    /**
     * Return a handle to the optional platform's {@link Spatializer}
     * @return the {@code Spatializer} instance.
     * @see Spatializer#getImmersiveAudioLevel() to check for the level of support of the effect
     *   on the platform
     */
    public @Nullable Spatializer getSpatializer() {
        int level = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
        try {
            level = getService().getSpatializerImmersiveAudioLevel();
        } catch (Exception e) { /* using NONE */ }
        if (level == Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE) {
            return null;
        }
    public @NonNull Spatializer getSpatializer() {
        return new Spatializer(this);
    }

+0 −4
Original line number Diff line number Diff line
@@ -122,7 +122,6 @@ public class Spatializer {
    public @interface ImmersiveAudioLevel {};

    /**
     * @hide
     * Constant indicating the {@code Spatializer} on this device supports a spatialization
     * mode that differs from the ones available at this SDK level.
     * @see #getImmersiveAudioLevel()
@@ -130,14 +129,12 @@ public class Spatializer {
    public static final int SPATIALIZER_IMMERSIVE_LEVEL_OTHER = -1;

    /**
     * @hide
     * Constant indicating there are no spatialization capabilities supported on this device.
     * @see #getImmersiveAudioLevel()
     */
    public static final int SPATIALIZER_IMMERSIVE_LEVEL_NONE = 0;

    /**
     * @hide
     * Constant indicating the {@code Spatializer} on this device supports multichannel
     * spatialization.
     * @see #getImmersiveAudioLevel()
@@ -145,7 +142,6 @@ public class Spatializer {
    public static final int SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL = 1;

    /**
     * @hide
     * Return the level of support for the spatialization feature on this device.
     * This level of support is independent of whether the {@code Spatializer} is currently
     * enabled or available and will not change over time.