summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-06-30 10:58:25 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-06-30 10:58:25 +0000
commitbf5ad04eba81dd723967e77abc1576d14522ee71 (patch)
tree7281aa12f907d23631ad25b371d2c226d773f883
parent2365d61a53756026e03d7ea6157ca30487cf8af2 (diff)
parent870c2eb28a6a0299c7bc52c6ae2635008326b797 (diff)
Merge "Handle Active device changed A2DP <-> Hearing Aid" into rvc-dev am: afe43da899 am: 870c2eb28a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12004939 Change-Id: Ia0345fe741a21459112c64c5f71379aa8a0754a8
-rw-r--r--services/core/java/com/android/server/media/BluetoothRouteProvider.java47
1 files changed, 27 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java
index 25bbfa02fa05..3a4dfaf9bfcd 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 com.android.internal.R;
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 @@ class BluetoothRouteProvider {
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 @@ class BluetoothRouteProvider {
}
}
- 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);
+ }
}
+ }
- BluetoothHearingAid hearingAidProfile = mHearingAidProfile;
- if (hearingAidProfile == null) {
- return;
+ private void addActiveHearingAidDevices(BluetoothDevice device) {
+ if (DEBUG) {
+ Log.d(TAG, "Setting active hearing aid devices. device=" + device);
}
- 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 @@ class BluetoothRouteProvider {
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;