diff options
author | weichinweng <weichinweng@google.com> | 2018-10-18 14:18:06 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-10-18 14:18:06 -0700 |
commit | c91b0fdfeb2d1f9f8483e7bcadf8cb7b05cf701a (patch) | |
tree | 890d4bae986a883550cf7c6f76ae2b9c52d0fc3b | |
parent | 2dc797e211d584fff613605ce01f4da58f8f0b31 (diff) | |
parent | f3b7821fbdccf0b07e14c4024c3ad279350cc998 (diff) | |
download | base-c91b0fdfeb2d1f9f8483e7bcadf8cb7b05cf701a.tar.gz |
Merge "AudioService: Add Hearing Aid Switch Control"
am: f3b7821fbd
Change-Id: I6abbbc268a8c391e2d400e7a9811ea0e04362bfc
-rw-r--r-- | media/java/android/media/AudioManager.java | 19 | ||||
-rw-r--r-- | media/java/android/media/IAudioService.aidl | 5 | ||||
-rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 45 |
3 files changed, 43 insertions, 26 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index bbc51ce37a52..aec45204ef08 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -3932,18 +3932,31 @@ public class AudioManager { } /** - * Indicate Hearing Aid connection state change. + * Indicate Hearing Aid 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 musicDevice Default get system volume for the connecting device. + * (either {@link android.bluetooth.BluetoothProfile.hearingaid} or + * {@link android.bluetooth.BluetoothProfile.HEARING_AID}) + * @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 + * BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED intent. * {@hide} */ - public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state) { + public int setBluetoothHearingAidDeviceConnectionState( + BluetoothDevice device, int state, boolean suppressNoisyIntent, + int musicDevice) { final IAudioService service = getService(); + int delay = 0; try { - service.setHearingAidDeviceConnectionState(device, state); + delay = service.setBluetoothHearingAidDeviceConnectionState(device, + state, suppressNoisyIntent, musicDevice); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } + return delay; } /** diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 569db16c312e..abd64119de61 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -151,8 +151,6 @@ interface IAudioService { void setWiredDeviceConnectionState(int type, int state, String address, String name, String caller); - void setHearingAidDeviceConnectionState(in BluetoothDevice device, int state); - int setBluetoothA2dpDeviceConnectionState(in BluetoothDevice device, int state, int profile); void handleBluetoothA2dpDeviceConfigChange(in BluetoothDevice device); @@ -210,6 +208,9 @@ interface IAudioService { oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio); + int setBluetoothHearingAidDeviceConnectionState(in BluetoothDevice device, + int state, boolean suppressNoisyIntent, int musicDevice); + int setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(in BluetoothDevice device, int state, int profile, boolean suppressNoisyIntent, int a2dpVolume); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index f3fdf6db90ed..46cdd02f3d42 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -4661,22 +4661,15 @@ public class AudioService extends IAudioService.Stub } } - @Override - public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state) - { - mDeviceLogger.log((new AudioEventLogger.StringEvent( - "setHearingAidDeviceConnectionState state=" + state - + " addr=" + device.getAddress())).printLog(TAG)); - - setBluetoothHearingAidDeviceConnectionState( - device, state, false /* suppressNoisyIntent */, AudioSystem.DEVICE_NONE); - } - public int setBluetoothHearingAidDeviceConnectionState( BluetoothDevice device, int state, boolean suppressNoisyIntent, int musicDevice) { int delay; + mDeviceLogger.log((new AudioEventLogger.StringEvent( + "setHearingAidDeviceConnectionState state=" + state + + " addr=" + device.getAddress() + + " supprNoisy=" + suppressNoisyIntent)).printLog(TAG)); synchronized (mConnectedDevices) { if (!suppressNoisyIntent) { int intState = (state == BluetoothHearingAid.STATE_CONNECTED) ? 1 : 0; @@ -5866,6 +5859,7 @@ public class AudioService extends IAudioService.Stub address)); sendMsg(mAudioHandler, MSG_ACCESSORY_PLUG_MEDIA_UNMUTE, SENDMSG_QUEUE, AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, null, 0); + setCurrentAudioRouteNameIfPossible(name); } private void onSendBecomingNoisyIntent() { @@ -5887,7 +5881,7 @@ public class AudioService extends IAudioService.Stub mConnectedDevices.remove( makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address)); // Remove A2DP routes as well - setCurrentAudioRouteName(null); + setCurrentAudioRouteNameIfPossible(null); if (mDockAddress == address) { mDockAddress = null; } @@ -5957,6 +5951,7 @@ public class AudioService extends IAudioService.Stub sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE, AudioSystem.DEVICE_OUT_HEARING_AID, 0, mStreamStates[AudioSystem.STREAM_MUSIC], 0); + setCurrentAudioRouteNameIfPossible(name); } // must be called synchronized on mConnectedDevices @@ -5966,7 +5961,7 @@ public class AudioService extends IAudioService.Stub mConnectedDevices.remove( makeDeviceListKey(AudioSystem.DEVICE_OUT_HEARING_AID, address)); // Remove Hearing Aid routes as well - setCurrentAudioRouteName(null); + setCurrentAudioRouteNameIfPossible(null); } // must be called synchronized on mConnectedDevices @@ -6011,7 +6006,6 @@ public class AudioService extends IAudioService.Stub } else { makeA2dpDeviceUnavailableNow(address); } - setCurrentAudioRouteName(null); } else if (!isConnected && state == BluetoothProfile.STATE_CONNECTED) { if (btDevice.isBluetoothDock()) { // this could be a reconnection after a transient disconnection @@ -6035,7 +6029,6 @@ public class AudioService extends IAudioService.Stub } makeA2dpDeviceAvailable(address, btDevice.getName(), "onSetA2dpSinkConnectionState"); - setCurrentAudioRouteName(btDevice.getAliasName()); } } } @@ -6087,25 +6080,35 @@ public class AudioService extends IAudioService.Stub if (isConnected && state != BluetoothProfile.STATE_CONNECTED) { makeHearingAidDeviceUnavailable(address); - setCurrentAudioRouteName(null); } else if (!isConnected && state == BluetoothProfile.STATE_CONNECTED) { makeHearingAidDeviceAvailable(address, btDevice.getName(), "onSetHearingAidConnectionState"); - setCurrentAudioRouteName(btDevice.getAliasName()); } } } - private void setCurrentAudioRouteName(String name){ + private void setCurrentAudioRouteNameIfPossible(String name) { synchronized (mCurAudioRoutes) { if (!TextUtils.equals(mCurAudioRoutes.bluetoothName, name)) { - mCurAudioRoutes.bluetoothName = name; - sendMsg(mAudioHandler, MSG_REPORT_NEW_ROUTES, - SENDMSG_NOOP, 0, 0, null, 0); + if (name != null || !isCurrentDeviceConnected()) { + mCurAudioRoutes.bluetoothName = name; + sendMsg(mAudioHandler, MSG_REPORT_NEW_ROUTES, + SENDMSG_NOOP, 0, 0, null, 0); + } } } } + private boolean isCurrentDeviceConnected() { + for (int i = 0; i < mConnectedDevices.size(); i++) { + DeviceListSpec deviceSpec = mConnectedDevices.valueAt(i); + if (TextUtils.equals(deviceSpec.mDeviceName, mCurAudioRoutes.bluetoothName)) { + return true; + } + } + return false; + } + private void onBluetoothA2dpDeviceConfigChange(BluetoothDevice btDevice) { if (DEBUG_DEVICES) { |