Merge "Notify BluetoothRouteManager when Bluetooth turned off" am: b29a6fd37e am: ce193c831a
am: 37b5906957
Change-Id: I5e145490d3b6a8c94dfd96c3982a3f7b4dd6da5d
diff --git a/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java b/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
index 5feacbc..665b956 100644
--- a/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
+++ b/src/com/android/server/telecom/bluetooth/BluetoothDeviceManager.java
@@ -29,8 +29,13 @@
import com.android.server.telecom.BluetoothHeadsetProxy;
import com.android.server.telecom.TelecomSystem;
+import java.util.Collection;
import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.Objects;
+import java.util.stream.Collectors;
public class BluetoothDeviceManager {
private final BluetoothProfile.ServiceListener mBluetoothProfileServiceListener =
@@ -60,7 +65,14 @@
try {
synchronized (mLock) {
mBluetoothHeadsetService = null;
- Log.i(BluetoothDeviceManager.this, "Lost BluetoothHeadset service.");
+ Log.i(BluetoothDeviceManager.this, "Lost BluetoothHeadset service. " +
+ "Removing all tracked devices.");
+ List<BluetoothDevice> devicesToRemove = new LinkedList<>(
+ mConnectedDevicesByAddress.values());
+ mConnectedDevicesByAddress.clear();
+ for (BluetoothDevice device : devicesToRemove) {
+ mBluetoothRouteManager.onDeviceLost(device);
+ }
}
} finally {
Log.endSession();
diff --git a/tests/src/com/android/server/telecom/tests/BluetoothDeviceManagerTest.java b/tests/src/com/android/server/telecom/tests/BluetoothDeviceManagerTest.java
index c8cde98..68e76b8 100644
--- a/tests/src/com/android/server/telecom/tests/BluetoothDeviceManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/BluetoothDeviceManagerTest.java
@@ -131,6 +131,20 @@
mBluetoothDeviceManager.getMostRecentlyConnectedDevice(device3.getAddress()));
}
+ @SmallTest
+ public void testHeadsetServiceDisconnect() {
+ receiverUnderTest.onReceive(mContext,
+ buildConnectionActionIntent(BluetoothHeadset.STATE_CONNECTED, device1));
+ receiverUnderTest.onReceive(mContext,
+ buildConnectionActionIntent(BluetoothHeadset.STATE_CONNECTED, device2));
+ serviceListenerUnderTest.onServiceDisconnected(0);
+
+ verify(mRouteManager).onDeviceLost(device1);
+ verify(mRouteManager).onDeviceLost(device2);
+ assertNull(mBluetoothDeviceManager.getHeadsetService());
+ assertEquals(0, mBluetoothDeviceManager.getNumConnectedDevices());
+ }
+
private Intent buildConnectionActionIntent(int state, BluetoothDevice device) {
Intent i = new Intent(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
i.putExtra(BluetoothHeadset.EXTRA_STATE, state);