From c5f69571efb2537b8fc312ce4ef9e93c39f19b71 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Tue, 14 Sep 2021 10:46:55 -0700 Subject: [PATCH] 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 --- core/api/current.txt | 6 +++++- media/java/android/media/AudioManager.java | 11 +++-------- media/java/android/media/Spatializer.java | 4 ---- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index d684e4b82bbed..ec8dce0837cd4 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -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 { diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index ee75a8d6f4b23..38f9607c95292 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -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); } diff --git a/media/java/android/media/Spatializer.java b/media/java/android/media/Spatializer.java index c64bf2c601172..d8519b689a562 100644 --- a/media/java/android/media/Spatializer.java +++ b/media/java/android/media/Spatializer.java @@ -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.