diff options
| author | 2020-06-30 10:58:25 +0000 | |
|---|---|---|
| committer | 2020-06-30 10:58:25 +0000 | |
| commit | bf5ad04eba81dd723967e77abc1576d14522ee71 (patch) | |
| tree | 7281aa12f907d23631ad25b371d2c226d773f883 | |
| parent | 2365d61a53756026e03d7ea6157ca30487cf8af2 (diff) | |
| parent | 870c2eb28a6a0299c7bc52c6ae2635008326b797 (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.java | 47 |
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; |