Merge "Handle Active device changed A2DP <-> Hearing Aid" into rvc-dev am: afe43da899
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12004939
Change-Id: I9790745f568bb45a7390c17c6fb482b9c59abd07
diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java
index 25bbfa0..3a4dfaf 100644
--- a/services/core/java/com/android/server/media/BluetoothRouteProvider.java
+++ b/services/core/java/com/android/server/media/BluetoothRouteProvider.java
@@ -45,6 +45,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -318,16 +319,6 @@
btRoute.route = builder.build();
}
- private void clearActiveRoutes() {
- if (DEBUG) {
- Log.d(TAG, "Clearing active routes");
- }
- for (BluetoothRouteInfo btRoute : mActiveRoutes) {
- setRouteConnectionState(btRoute, STATE_DISCONNECTED);
- }
- mActiveRoutes.clear();
- }
-
private void addActiveRoute(BluetoothRouteInfo btRoute) {
if (DEBUG) {
Log.d(TAG, "Adding active route: " + btRoute.route);
@@ -348,18 +339,34 @@
}
}
- private void findAndSetActiveHearingAidDevices() {
+ private void clearActiveRoutesWithType(int type) {
if (DEBUG) {
- Log.d(TAG, "Setting active hearing aid devices");
+ Log.d(TAG, "Clearing active routes with type. type=" + type);
+ }
+ Iterator<BluetoothRouteInfo> iter = mActiveRoutes.iterator();
+ while (iter.hasNext()) {
+ BluetoothRouteInfo btRoute = iter.next();
+ if (btRoute.route.getType() == type) {
+ iter.remove();
+ setRouteConnectionState(btRoute, STATE_DISCONNECTED);
+ }
+ }
+ }
+
+ private void addActiveHearingAidDevices(BluetoothDevice device) {
+ if (DEBUG) {
+ Log.d(TAG, "Setting active hearing aid devices. device=" + device);
}
- BluetoothHearingAid hearingAidProfile = mHearingAidProfile;
- if (hearingAidProfile == null) {
- return;
- }
- List<BluetoothDevice> activeDevices = hearingAidProfile.getActiveDevices();
+ // Let the given device be the first active device
+ BluetoothRouteInfo activeBtRoute = mBluetoothRoutes.get(device.getAddress());
+ addActiveRoute(activeBtRoute);
+
+ // A bluetooth route with the same route ID should be added.
for (BluetoothRouteInfo btRoute : mBluetoothRoutes.values()) {
- if (activeDevices.contains(btRoute.btDevice)) {
+ if (TextUtils.equals(btRoute.route.getId(), activeBtRoute.route.getId())
+ && !TextUtils.equals(btRoute.btDevice.getAddress(),
+ activeBtRoute.btDevice.getAddress())) {
addActiveRoute(btRoute);
}
}
@@ -465,16 +472,16 @@
public void onReceive(Context context, Intent intent, BluetoothDevice device) {
switch (intent.getAction()) {
case BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED:
- clearActiveRoutes();
+ clearActiveRoutesWithType(MediaRoute2Info.TYPE_BLUETOOTH_A2DP);
if (device != null) {
addActiveRoute(mBluetoothRoutes.get(device.getAddress()));
}
notifyBluetoothRoutesUpdated();
break;
case BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED:
- clearActiveDevices();
+ clearActiveRoutesWithType(MediaRoute2Info.TYPE_HEARING_AID);
if (device != null) {
- findAndSetActiveHearingAidDevices();
+ addActiveHearingAidDevices(device);
}
notifyBluetoothRoutesUpdated();
break;