AudioService: restore A2DP/wired headset auto selection
am: 383dc532f3
Change-Id: Icc9eba1bf018356f40ef7a5bfc3b00784c37c6dc
This commit is contained in:
@@ -510,8 +510,11 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
private int mDeviceOrientation = Configuration.ORIENTATION_UNDEFINED;
|
private int mDeviceOrientation = Configuration.ORIENTATION_UNDEFINED;
|
||||||
|
|
||||||
// Request to override default use of A2DP for media.
|
// Request to override default use of A2DP for media.
|
||||||
// FIXME: remove when MediaRouter does not use setBluetoothA2dpOn() anymore
|
|
||||||
private boolean mBluetoothA2dpEnabled;
|
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();
|
private final Object mBluetoothA2dpEnabledLock = new Object();
|
||||||
|
|
||||||
// Monitoring of audio routes. Protected by mCurAudioRoutes.
|
// Monitoring of audio routes. Protected by mCurAudioRoutes.
|
||||||
@@ -840,6 +843,12 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
RotationHelper.updateOrientation();
|
RotationHelper.updateOrientation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
synchronized (mBluetoothA2dpEnabledLock) {
|
||||||
|
AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,
|
||||||
|
mBluetoothA2dpEnabled ?
|
||||||
|
AudioSystem.FORCE_NONE : AudioSystem.FORCE_NO_BT_A2DP);
|
||||||
|
}
|
||||||
|
|
||||||
synchronized (mSettingsLock) {
|
synchronized (mSettingsLock) {
|
||||||
AudioSystem.setForceUse(AudioSystem.FOR_DOCK,
|
AudioSystem.setForceUse(AudioSystem.FOR_DOCK,
|
||||||
mDockAudioMediaEnabled ?
|
mDockAudioMediaEnabled ?
|
||||||
@@ -2706,7 +2715,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
* @deprecated
|
* @deprecated
|
||||||
* */
|
* */
|
||||||
public void setBluetoothA2dpOn(boolean on) {
|
public void setBluetoothA2dpOn(boolean on) {
|
||||||
mBluetoothA2dpEnabled = on;
|
mBluetoothA2dpEnabledExternal = on;
|
||||||
Log.e(TAG, "setBluetoothA2dpOn() is deprecated, now a no-op",
|
Log.e(TAG, "setBluetoothA2dpOn() is deprecated, now a no-op",
|
||||||
new Exception("Deprecated use of setBluetoothA2dpOn()"));
|
new Exception("Deprecated use of setBluetoothA2dpOn()"));
|
||||||
}
|
}
|
||||||
@@ -2716,7 +2725,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
* @deprecated
|
* @deprecated
|
||||||
* */
|
* */
|
||||||
public boolean isBluetoothA2dpOn() {
|
public boolean isBluetoothA2dpOn() {
|
||||||
return mBluetoothA2dpEnabled;
|
return mBluetoothA2dpEnabledExternal;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @see AudioManager#startBluetoothSco() */
|
/** @see AudioManager#startBluetoothSco() */
|
||||||
@@ -3787,6 +3796,11 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
Slog.i(TAG, "setWiredDeviceConnectionState(" + state + " nm: " + name + " addr:"
|
Slog.i(TAG, "setWiredDeviceConnectionState(" + state + " nm: " + name + " addr:"
|
||||||
+ address + ")");
|
+ 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);
|
int delay = checkSendBecomingNoisyIntent(type, state);
|
||||||
queueMsgUnderWakeLock(mAudioHandler,
|
queueMsgUnderWakeLock(mAudioHandler,
|
||||||
MSG_SET_WIRED_DEVICE_CONNECTION_STATE,
|
MSG_SET_WIRED_DEVICE_CONNECTION_STATE,
|
||||||
@@ -4767,6 +4781,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
VolumeStreamState streamState = mStreamStates[AudioSystem.STREAM_MUSIC];
|
VolumeStreamState streamState = mStreamStates[AudioSystem.STREAM_MUSIC];
|
||||||
sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE,
|
sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE,
|
||||||
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, streamState, 0);
|
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, streamState, 0);
|
||||||
|
setBluetoothA2dpOnInt(true);
|
||||||
AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
|
AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
|
||||||
AudioSystem.DEVICE_STATE_AVAILABLE, address, name);
|
AudioSystem.DEVICE_STATE_AVAILABLE, address, name);
|
||||||
// Reset A2DP suspend state each time a new sink is connected
|
// Reset A2DP suspend state each time a new sink is connected
|
||||||
@@ -5004,6 +5019,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
devices |= dev;
|
devices |= dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (devices == device) {
|
if (devices == device) {
|
||||||
sendMsg(mAudioHandler,
|
sendMsg(mAudioHandler,
|
||||||
MSG_BROADCAST_AUDIO_BECOMING_NOISY,
|
MSG_BROADCAST_AUDIO_BECOMING_NOISY,
|
||||||
@@ -5107,6 +5123,11 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (state != 0) {
|
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) {
|
if ((device & mSafeMediaVolumeDevices) != 0) {
|
||||||
sendMsg(mAudioHandler,
|
sendMsg(mAudioHandler,
|
||||||
MSG_CHECK_MUSIC_ACTIVE,
|
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
|
// Must be called synchronized on mConnectedDevices
|
||||||
private void setForceUseInt_SyncDevices(int usage, int config) {
|
private void setForceUseInt_SyncDevices(int usage, int config) {
|
||||||
switch (usage) {
|
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:
|
case AudioSystem.FOR_DOCK:
|
||||||
if (config == AudioSystem.FORCE_ANALOG_DOCK) {
|
if (config == AudioSystem.FORCE_ANALOG_DOCK) {
|
||||||
mBecomingNoisyIntentDevices |= AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET;
|
mBecomingNoisyIntentDevices |= AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET;
|
||||||
|
|||||||
Reference in New Issue
Block a user