Merge "Update mGlobalBluetoothA2dpOn when active device changed" into pi-dev
am: babf190396
Change-Id: I7b4dba8612a8e58172d210f6f0764079cfc98af1
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index 384efdd..a7df0e2 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -95,9 +95,8 @@
// State guarded by mLock.
private final Object mLock = new Object();
- private final SparseArray<UserRecord> mUserRecords = new SparseArray<UserRecord>();
- private final ArrayMap<IBinder, ClientRecord> mAllClientRecords =
- new ArrayMap<IBinder, ClientRecord>();
+ private final SparseArray<UserRecord> mUserRecords = new SparseArray<>();
+ private final ArrayMap<IBinder, ClientRecord> mAllClientRecords = new ArrayMap<>();
private int mCurrentUserId = -1;
private final IAudioService mAudioService;
private final AudioPlayerStateMonitor mAudioPlayerStateMonitor;
@@ -106,7 +105,7 @@
private final IntArray mActivePlayerUidMinPriorityQueue = new IntArray();
private final BroadcastReceiver mReceiver = new MediaRouterServiceBroadcastReceiver();
- BluetoothDevice mBluetoothDevice;
+ BluetoothDevice mActiveBluetoothDevice;
int mAudioRouteMainType = AudioRoutesInfo.MAIN_SPEAKER;
boolean mGlobalBluetoothA2dpOn = false;
@@ -180,7 +179,8 @@
| AudioRoutesInfo.MAIN_HEADPHONES
| AudioRoutesInfo.MAIN_USB)) == 0) {
// headset was plugged out.
- mGlobalBluetoothA2dpOn = mBluetoothDevice != null;
+ mGlobalBluetoothA2dpOn = (newRoutes.bluetoothName != null
+ || mActiveBluetoothDevice != null);
} else {
// headset was plugged in.
mGlobalBluetoothA2dpOn = false;
@@ -197,7 +197,7 @@
Slog.w(TAG, "RemoteException in the audio service.");
}
- IntentFilter intentFilter = new IntentFilter(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
+ IntentFilter intentFilter = new IntentFilter(BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED);
context.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null);
}
@@ -406,12 +406,14 @@
void restoreBluetoothA2dp() {
try {
- boolean a2dpOn = false;
+ boolean a2dpOn;
+ BluetoothDevice btDevice;
synchronized (mLock) {
a2dpOn = mGlobalBluetoothA2dpOn;
+ btDevice = mActiveBluetoothDevice;
}
// We don't need to change a2dp status when bluetooth is not connected.
- if (mBluetoothDevice != null) {
+ if (btDevice != null) {
Slog.v(TAG, "restoreBluetoothA2dp(" + a2dpOn + ")");
mAudioService.setBluetoothA2dpOn(a2dpOn);
}
@@ -653,17 +655,11 @@
final class MediaRouterServiceBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED)) {
- int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE,
- BluetoothProfile.STATE_DISCONNECTED);
- if (state == BluetoothProfile.STATE_DISCONNECTED) {
- mGlobalBluetoothA2dpOn = false;
- mBluetoothDevice = null;
- } else if (state == BluetoothProfile.STATE_CONNECTED) {
- mGlobalBluetoothA2dpOn = true;
- mBluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- // To ensure that BT A2DP is on, call restoreBluetoothA2dp().
- restoreBluetoothA2dp();
+ if (intent.getAction().equals(BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED)) {
+ BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ synchronized (mLock) {
+ mActiveBluetoothDevice = btDevice;
+ mGlobalBluetoothA2dpOn = btDevice != null;
}
}
}