AudioService: restore A2DP/wired headset auto selection
Restore automatic routing behavior when wired headset or BT headset is connected. This behavior was changed by commit0234587bThis change mostly reverts0234587bbut keeps public methods setBluetoothA2dpOn() and isBluetoothA2dpOn() deprecated with stub implementations. Bug: 30963785 Bug: 31424965 Change-Id: I90ea04584df595a778993595ad0076fef809ed98
This commit is contained in:
@@ -510,8 +510,11 @@ public class AudioService extends IAudioService.Stub {
|
||||
private int mDeviceOrientation = Configuration.ORIENTATION_UNDEFINED;
|
||||
|
||||
// Request to override default use of A2DP for media.
|
||||
// FIXME: remove when MediaRouter does not use setBluetoothA2dpOn() anymore
|
||||
private boolean mBluetoothA2dpEnabled;
|
||||
// FIXME: remove when MediaRouter does not use setBluetoothA2dpOn() anymore
|
||||
// state of bluetooth A2DP enable request sen by deprecated APIs setBluetoothA2dpOn() and
|
||||
// isBluettohA2dpOn()
|
||||
private boolean mBluetoothA2dpEnabledExternal;
|
||||
private final Object mBluetoothA2dpEnabledLock = new Object();
|
||||
|
||||
// Monitoring of audio routes. Protected by mCurAudioRoutes.
|
||||
@@ -840,6 +843,12 @@ public class AudioService extends IAudioService.Stub {
|
||||
RotationHelper.updateOrientation();
|
||||
}
|
||||
|
||||
synchronized (mBluetoothA2dpEnabledLock) {
|
||||
AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,
|
||||
mBluetoothA2dpEnabled ?
|
||||
AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP);
|
||||
}
|
||||
|
||||
synchronized (mSettingsLock) {
|
||||
AudioSystem.setForceUse(AudioSystem.FOR_DOCK,
|
||||
mDockAudioMediaEnabled ?
|
||||
@@ -2706,7 +2715,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
* @deprecated
|
||||
* */
|
||||
public void setBluetoothA2dpOn(boolean on) {
|
||||
mBluetoothA2dpEnabled = on;
|
||||
mBluetoothA2dpEnabledExternal = on;
|
||||
Log.e(TAG, "setBluetoothA2dpOn() is deprecated, now a no-op",
|
||||
new Exception("Deprecated use of setBluetoothA2dpOn()"));
|
||||
}
|
||||
@@ -2716,7 +2725,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
* @deprecated
|
||||
* */
|
||||
public boolean isBluetoothA2dpOn() {
|
||||
return mBluetoothA2dpEnabled;
|
||||
return mBluetoothA2dpEnabledExternal;
|
||||
}
|
||||
|
||||
/** @see AudioManager#startBluetoothSco() */
|
||||
@@ -3787,6 +3796,11 @@ public class AudioService extends IAudioService.Stub {
|
||||
Slog.i(TAG, "setWiredDeviceConnectionState(" + state + " nm: " + name + " addr:"
|
||||
+ address + ")");
|
||||
}
|
||||
if ((state == 0) && ((type == AudioSystem.DEVICE_OUT_WIRED_HEADSET) ||
|
||||
(type == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE) ||
|
||||
(type == AudioSystem.DEVICE_OUT_LINE))) {
|
||||
setBluetoothA2dpOnInt(true);
|
||||
}
|
||||
int delay = checkSendBecomingNoisyIntent(type, state);
|
||||
queueMsgUnderWakeLock(mAudioHandler,
|
||||
MSG_SET_WIRED_DEVICE_CONNECTION_STATE,
|
||||
@@ -4767,6 +4781,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
VolumeStreamState streamState = mStreamStates[AudioSystem.STREAM_MUSIC];
|
||||
sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE,
|
||||
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, streamState, 0);
|
||||
setBluetoothA2dpOnInt(true);
|
||||
AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
|
||||
AudioSystem.DEVICE_STATE_AVAILABLE, address, name);
|
||||
// Reset A2DP suspend state each time a new sink is connected
|
||||
@@ -5004,6 +5019,7 @@ public class AudioService extends IAudioService.Stub {
|
||||
devices |= dev;
|
||||
}
|
||||
}
|
||||
|
||||
if (devices == device) {
|
||||
sendMsg(mAudioHandler,
|
||||
MSG_BROADCAST_AUDIO_BECOMING_NOISY,
|
||||
@@ -5107,6 +5123,11 @@ public class AudioService extends IAudioService.Stub {
|
||||
return;
|
||||
}
|
||||
if (state != 0) {
|
||||
if ((device == AudioSystem.DEVICE_OUT_WIRED_HEADSET) ||
|
||||
(device == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE) ||
|
||||
(device == AudioSystem.DEVICE_OUT_LINE)) {
|
||||
setBluetoothA2dpOnInt(false);
|
||||
}
|
||||
if ((device & mSafeMediaVolumeDevices) != 0) {
|
||||
sendMsg(mAudioHandler,
|
||||
MSG_CHECK_MUSIC_ACTIVE,
|
||||
@@ -5572,9 +5593,26 @@ public class AudioService extends IAudioService.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
// Handles request to override default use of A2DP for media.
|
||||
// Must be called synchronized on mConnectedDevices
|
||||
public void setBluetoothA2dpOnInt(boolean on) {
|
||||
synchronized (mBluetoothA2dpEnabledLock) {
|
||||
mBluetoothA2dpEnabled = on;
|
||||
setForceUseInt_SyncDevices(AudioSystem.FOR_MEDIA,
|
||||
mBluetoothA2dpEnabled ? AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP);
|
||||
}
|
||||
}
|
||||
|
||||
// Must be called synchronized on mConnectedDevices
|
||||
private void setForceUseInt_SyncDevices(int usage, int config) {
|
||||
switch (usage) {
|
||||
case AudioSystem.FOR_MEDIA:
|
||||
if (config == AudioSystem.FORCE_NO_BT_A2DP) {
|
||||
mBecomingNoisyIntentDevices &= ~AudioSystem.DEVICE_OUT_ALL_A2DP;
|
||||
} else { // config == AudioSystem.FORCE_NONE
|
||||
mBecomingNoisyIntentDevices |= AudioSystem.DEVICE_OUT_ALL_A2DP;
|
||||
}
|
||||
break;
|
||||
case AudioSystem.FOR_DOCK:
|
||||
if (config == AudioSystem.FORCE_ANALOG_DOCK) {
|
||||
mBecomingNoisyIntentDevices |= AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET;
|
||||
|
||||
Reference in New Issue
Block a user