Add isVolumeFixed to AudioManagerCompat
Bug: 194239360
Relnote: Add isVolumeFixed to AudioManagerCompat
Test: AudioManagerCompatTest
Change-Id: I26d0f7d38a43fdb6d42c53586a205209be10141b
diff --git a/media/media/api/current.txt b/media/media/api/current.txt
index e82dbe2..bee633f 100644
--- a/media/media/api/current.txt
+++ b/media/media/api/current.txt
@@ -596,6 +596,7 @@
method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
method @IntRange(from=0) public static int getStreamMaxVolume(android.media.AudioManager, int);
method @IntRange(from=0) public static int getStreamMinVolume(android.media.AudioManager, int);
+ method public static boolean isVolumeFixed(android.media.AudioManager);
method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
diff --git a/media/media/api/public_plus_experimental_current.txt b/media/media/api/public_plus_experimental_current.txt
index e82dbe2..bee633f 100644
--- a/media/media/api/public_plus_experimental_current.txt
+++ b/media/media/api/public_plus_experimental_current.txt
@@ -596,6 +596,7 @@
method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
method @IntRange(from=0) public static int getStreamMaxVolume(android.media.AudioManager, int);
method @IntRange(from=0) public static int getStreamMinVolume(android.media.AudioManager, int);
+ method public static boolean isVolumeFixed(android.media.AudioManager);
method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
diff --git a/media/media/api/restricted_current.txt b/media/media/api/restricted_current.txt
index bd39a46..5fea5ac 100644
--- a/media/media/api/restricted_current.txt
+++ b/media/media/api/restricted_current.txt
@@ -619,6 +619,7 @@
method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
method @IntRange(from=0) public static int getStreamMaxVolume(android.media.AudioManager, @androidx.core.app.NotificationCompat.StreamType int);
method @IntRange(from=0) public static int getStreamMinVolume(android.media.AudioManager, @androidx.core.app.NotificationCompat.StreamType int);
+ method public static boolean isVolumeFixed(android.media.AudioManager);
method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
diff --git a/media/media/src/main/java/androidx/media/AudioManagerCompat.java b/media/media/src/main/java/androidx/media/AudioManagerCompat.java
index 8215406..aaec259 100644
--- a/media/media/src/main/java/androidx/media/AudioManagerCompat.java
+++ b/media/media/src/main/java/androidx/media/AudioManagerCompat.java
@@ -155,11 +155,38 @@
}
}
+ /**
+ * Indicates if the device implements a fixed volume policy.
+ *
+ * <p>Some devices may not have volume control and may operate at a fixed volume, and may not
+ * enable muting or changing the volume of audio streams. This method will return {@code true}
+ * on such devices.
+ *
+ * <p>Compatibility: It returns {@code false} on API level below 21.
+ */
+ public static boolean isVolumeFixed(@NonNull AudioManager audioManager) {
+ if (Build.VERSION.SDK_INT >= 21) {
+ return Api21Impl.isVolumeFixed(audioManager);
+ } else {
+ return false;
+ }
+ }
+
private AudioManagerCompat() {}
+ @RequiresApi(21)
+ private static class Api21Impl {
+
+ @DoNotInline
+ static boolean isVolumeFixed(AudioManager audioManager) {
+ return audioManager.isVolumeFixed();
+ }
+
+ private Api21Impl() {}
+ }
+
@RequiresApi(26)
private static class Api26Impl {
- private Api26Impl() {}
@DoNotInline
static int abandonAudioFocusRequest(AudioManager audioManager,
@@ -171,15 +198,18 @@
static int requestAudioFocus(AudioManager audioManager, AudioFocusRequest focusRequest) {
return audioManager.requestAudioFocus(focusRequest);
}
+
+ private Api26Impl() {}
}
@RequiresApi(28)
private static class Api28Impl {
- private Api28Impl() {}
@DoNotInline
static int getStreamMinVolume(AudioManager audioManager, int streamType) {
return audioManager.getStreamMinVolume(streamType);
}
+
+ private Api28Impl() {}
}
}
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/AudioManagerCompatTest.java b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/AudioManagerCompatTest.java
index 8f6c15a..0b6faa1 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/AudioManagerCompatTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/AudioManagerCompatTest.java
@@ -17,6 +17,7 @@
package android.support.mediacompat.client;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import android.content.Context;
import android.media.AudioManager;
@@ -67,4 +68,18 @@
public void getStreamMinVolume_underP_returnsZero() {
assertEquals(0, AudioManagerCompat.getStreamMinVolume(mAudioManager, mStreamType));
}
+
+ @SdkSuppress(minSdkVersion = 21)
+ @Test
+ public void isVolumeFixed_fromApi21_returnsIsVolumeFixed() {
+ assertEquals(
+ mAudioManager.isVolumeFixed(),
+ AudioManagerCompat.isVolumeFixed(mAudioManager));
+ }
+
+ @SdkSuppress(maxSdkVersion = 20)
+ @Test
+ public void isVolumeFixed_underApi21_returnsFalse() {
+ assertFalse(AudioManagerCompat.isVolumeFixed(mAudioManager));
+ }
}