Loading media/java/android/media/AudioManager.java +16 −3 Original line number Diff line number Diff line Loading @@ -3896,18 +3896,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; } /** Loading media/java/android/media/IAudioService.aidl +3 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading services/core/java/com/android/server/audio/AudioService.java +20 −19 Original line number Diff line number Diff line Loading @@ -4628,15 +4628,6 @@ public class AudioService extends IAudioService.Stub } } @Override public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state) { Log.i(TAG, "setBluetoothHearingAidDeviceConnectionState"); setBluetoothHearingAidDeviceConnectionState( device, state, false /* suppressNoisyIntent */, AudioSystem.DEVICE_NONE); } public int setBluetoothHearingAidDeviceConnectionState( BluetoothDevice device, int state, boolean suppressNoisyIntent, int musicDevice) Loading Loading @@ -5837,6 +5828,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() { Loading @@ -5856,7 +5848,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; } Loading Loading @@ -5926,6 +5918,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 Loading @@ -5935,7 +5928,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 Loading Loading @@ -5980,7 +5973,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 Loading @@ -6004,7 +5996,6 @@ public class AudioService extends IAudioService.Stub } makeA2dpDeviceAvailable(address, btDevice.getName(), "onSetA2dpSinkConnectionState"); setCurrentAudioRouteName(btDevice.getAliasName()); } } } Loading Loading @@ -6056,24 +6047,34 @@ 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)) { 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) { Loading Loading
media/java/android/media/AudioManager.java +16 −3 Original line number Diff line number Diff line Loading @@ -3896,18 +3896,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; } /** Loading
media/java/android/media/IAudioService.aidl +3 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading
services/core/java/com/android/server/audio/AudioService.java +20 −19 Original line number Diff line number Diff line Loading @@ -4628,15 +4628,6 @@ public class AudioService extends IAudioService.Stub } } @Override public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state) { Log.i(TAG, "setBluetoothHearingAidDeviceConnectionState"); setBluetoothHearingAidDeviceConnectionState( device, state, false /* suppressNoisyIntent */, AudioSystem.DEVICE_NONE); } public int setBluetoothHearingAidDeviceConnectionState( BluetoothDevice device, int state, boolean suppressNoisyIntent, int musicDevice) Loading Loading @@ -5837,6 +5828,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() { Loading @@ -5856,7 +5848,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; } Loading Loading @@ -5926,6 +5918,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 Loading @@ -5935,7 +5928,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 Loading Loading @@ -5980,7 +5973,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 Loading @@ -6004,7 +5996,6 @@ public class AudioService extends IAudioService.Stub } makeA2dpDeviceAvailable(address, btDevice.getName(), "onSetA2dpSinkConnectionState"); setCurrentAudioRouteName(btDevice.getAliasName()); } } } Loading Loading @@ -6056,24 +6047,34 @@ 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)) { 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) { Loading