summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/AudioManager.java37
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java2
2 files changed, 24 insertions, 15 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index f9b6ce0a199c..5bc634976a0c 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -6251,7 +6251,6 @@ public class AudioManager {
* Volume behavior for an audio device where no software attenuation is applied, and
* the volume is kept synchronized between the host and the device itself through a
* device-specific protocol such as BT AVRCP.
- * @see #setDeviceVolumeBehavior(AudioDeviceAttributes, int)
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE = 3;
@@ -6262,7 +6261,6 @@ public class AudioManager {
* device-specific protocol (such as for hearing aids), based on the audio mode (e.g.
* normal vs in phone call).
* @see #setMode(int)
- * @see #setDeviceVolumeBehavior(AudioDeviceAttributes, int)
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE = 4;
@@ -6272,6 +6270,11 @@ public class AudioManager {
* A variant of {@link #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE} where the host cannot reliably set
* the volume percentage of the audio device. Specifically, {@link #setStreamVolume} will have
* no effect, or an unreliable effect.
+ *
+ * {@link #DEVICE_VOLUME_BEHAVIOR_FULL} will be returned instead by
+ * {@link #getDeviceVolumeBehavior} for target SDK versions before U.
+ *
+ * @see #RETURN_DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY
*/
@SystemApi
public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY = 5;
@@ -6313,18 +6316,27 @@ public class AudioManager {
public @interface AbsoluteDeviceVolumeBehavior {}
/**
+ * Volume behaviors that can be set with {@link #setDeviceVolumeBehavior}.
+ * @hide
+ */
+ @IntDef({
+ DEVICE_VOLUME_BEHAVIOR_VARIABLE,
+ DEVICE_VOLUME_BEHAVIOR_FULL,
+ DEVICE_VOLUME_BEHAVIOR_FIXED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SettableDeviceVolumeBehavior {}
+
+ /**
* @hide
- * Throws IAE on an invalid volume behavior value
+ * Throws IAE on a non-settable volume behavior value
* @param volumeBehavior behavior value to check
*/
- public static void enforceValidVolumeBehavior(int volumeBehavior) {
+ public static void enforceSettableVolumeBehavior(int volumeBehavior) {
switch (volumeBehavior) {
case DEVICE_VOLUME_BEHAVIOR_VARIABLE:
case DEVICE_VOLUME_BEHAVIOR_FULL:
case DEVICE_VOLUME_BEHAVIOR_FIXED:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE:
- case DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY:
return;
default:
throw new IllegalArgumentException("Illegal volume behavior " + volumeBehavior);
@@ -6334,11 +6346,8 @@ public class AudioManager {
/**
* @hide
* Sets the volume behavior for an audio output device.
- * @see #DEVICE_VOLUME_BEHAVIOR_VARIABLE
- * @see #DEVICE_VOLUME_BEHAVIOR_FULL
- * @see #DEVICE_VOLUME_BEHAVIOR_FIXED
- * @see #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE
- * @see #DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE
+ *
+ * @see SettableDeviceVolumeBehavior
* @param device the device to be affected
* @param deviceVolumeBehavior one of the device behaviors
*/
@@ -6348,10 +6357,10 @@ public class AudioManager {
Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED
})
public void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
- @DeviceVolumeBehavior int deviceVolumeBehavior) {
+ @SettableDeviceVolumeBehavior int deviceVolumeBehavior) {
// verify arguments (validity of device type is enforced in server)
Objects.requireNonNull(device);
- enforceValidVolumeBehavior(deviceVolumeBehavior);
+ enforceSettableVolumeBehavior(deviceVolumeBehavior);
// communicate with service
final IAudioService service = getService();
try {
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 490a33eee4e6..ee514e59f381 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -7228,7 +7228,7 @@ public class AudioService extends IAudioService.Stub
super.setDeviceVolumeBehavior_enforcePermission();
// verify arguments
Objects.requireNonNull(device);
- AudioManager.enforceValidVolumeBehavior(deviceVolumeBehavior);
+ AudioManager.enforceSettableVolumeBehavior(deviceVolumeBehavior);
sVolumeLogger.enqueue(new EventLogger.StringEvent("setDeviceVolumeBehavior: dev:"
+ AudioSystem.getOutputDeviceName(device.getInternalType()) + " addr:"