AudioService: Add Hearing Aid Switch Control
1) Add setBluetoothHearingAidDeviceConnectionState interface to control suppressNoisyIntent flag. 2) Add check to confirm the previous device is active or not when want to clean it. Bug: 112279820 Test: Build Pass, BT off/on when play A2DP, Switch active device Change-Id: I73f1236d44213c6cf4a2708f3c96144416cfa67d
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user