diff options
| author | 2018-01-20 17:58:25 +0000 | |
|---|---|---|
| committer | 2018-01-20 17:58:25 +0000 | |
| commit | 51a9a31ba58171c147b4c0c16c6acd54a97a5f65 (patch) | |
| tree | c7f316c639b597c82dcccbe7a2458c5697fd4721 | |
| parent | d931b3494413796baee3eeb70d5ac1ec993b6196 (diff) | |
| parent | 82e06463f2571a06286f9da0bf3ad5a0e58461a2 (diff) | |
Merge "Multi-A2DP support - add a new internal API to suppress Audio Noisy intent"
| -rw-r--r-- | media/java/android/media/AudioManager.java | 27 | ||||
| -rw-r--r-- | media/java/android/media/IAudioService.aidl | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 16 | 
3 files changed, 42 insertions, 4 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 3b77aa1e1bd4..4d5343c97b05 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -3761,6 +3761,33 @@ public class AudioManager {      }       /** +     * Indicate A2DP source or sink connection state change and eventually suppress +     * the {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY} intent. +     * @param device Bluetooth device connected/disconnected +     * @param state  new connection state (BluetoothProfile.STATE_xxx) +     * @param profile profile for the A2DP device +     * (either {@link android.bluetooth.BluetoothProfile.A2DP} or +     * {@link android.bluetooth.BluetoothProfile.A2DP_SINK}) +     * @param suppressNoisyIntent if true the +     * {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY} intent will not be sent. +     * @return a delay in ms that the caller should wait before broadcasting +     * BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED intent. +     * {@hide} +     */ +    public int setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent( +                BluetoothDevice device, int state, int profile, boolean suppressNoisyIntent) { +        final IAudioService service = getService(); +        int delay = 0; +        try { +            delay = service.setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(device, +                state, profile, suppressNoisyIntent); +        } catch (RemoteException e) { +            throw e.rethrowFromSystemServer(); +        } +        return delay; +    } + +     /**       * Indicate A2DP device configuration has changed.       * @param device Bluetooth device whose configuration has changed.       * {@hide} diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index bb6ae9863d31..6c6522328e8d 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -203,5 +203,8 @@ interface IAudioService {      oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio); +    int setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(in BluetoothDevice device, +            int state, int profile, boolean suppressNoisyIntent); +      // WARNING: read warning at top of file, it is recommended to add new methods at the end  } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index f72104981bc0..a7147206bda2 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -4155,22 +4155,30 @@ public class AudioService extends IAudioService.Stub      public int setBluetoothA2dpDeviceConnectionState(BluetoothDevice device, int state, int profile)      { +        return setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent( +                device, state, profile, false /* suppressNoisyIntent */); +    } + +    public int setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(BluetoothDevice device, +                int state, int profile, boolean suppressNoisyIntent) +    {          if (mAudioHandler.hasMessages(MSG_SET_A2DP_SINK_CONNECTION_STATE, device)) {              return 0;          }          return setBluetoothA2dpDeviceConnectionStateInt( -                device, state, profile, AudioSystem.DEVICE_NONE); +                device, state, profile, suppressNoisyIntent, AudioSystem.DEVICE_NONE);      }      public int setBluetoothA2dpDeviceConnectionStateInt( -            BluetoothDevice device, int state, int profile, int musicDevice) +            BluetoothDevice device, int state, int profile, boolean suppressNoisyIntent, +            int musicDevice)      {          int delay;          if (profile != BluetoothProfile.A2DP && profile != BluetoothProfile.A2DP_SINK) {              throw new IllegalArgumentException("invalid profile " + profile);          }          synchronized (mConnectedDevices) { -            if (profile == BluetoothProfile.A2DP) { +            if (profile == BluetoothProfile.A2DP && !suppressNoisyIntent) {                  int intState = (state == BluetoothA2dp.STATE_CONNECTED) ? 1 : 0;                  delay = checkSendBecomingNoisyIntent(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,                          intState, musicDevice); @@ -5423,7 +5431,7 @@ public class AudioService extends IAudioService.Stub                     // consistent with audio policy manager state                     setBluetoothA2dpDeviceConnectionStateInt(                             btDevice, BluetoothA2dp.STATE_DISCONNECTED, BluetoothProfile.A2DP, -                           musicDevice); +                           false /* suppressNoisyIntent */, musicDevice);                 }              }          }  |