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

Commit fc76bdb3 authored by Yan Han's avatar Yan Han Committed by Automerger Merge Worker
Browse files

Merge "Update volume behavior documentation." into udc-dev am: 2c351648 am: 374e6f81

parents f61c694b 374e6f81
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -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
     * Throws IAE on an invalid volume behavior value
     */
    @IntDef({
        DEVICE_VOLUME_BEHAVIOR_VARIABLE,
        DEVICE_VOLUME_BEHAVIOR_FULL,
        DEVICE_VOLUME_BEHAVIOR_FIXED,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface SettableDeviceVolumeBehavior {}

    /**
     * @hide
     * 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 {
+1 −1
Original line number Diff line number Diff line
@@ -7235,7 +7235,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:"