To refresh/register/unregister all of the devices with same groupId am: ef7a75c394
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23308381
Change-Id: I715fcfd8d93f557a485b2caba663fd8bb40851f3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
index 5dabb7a..988a13c 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
@@ -16,7 +16,6 @@
package com.android.settings.bluetooth;
-import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -89,7 +88,7 @@
mManager = manager;
mProfileManager = mManager.getProfileManager();
mCachedDevice = device;
- mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
+ mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
lifecycle.addObserver(this);
}
@@ -319,20 +318,6 @@
return result;
}
- private List<CachedBluetoothDevice> getAllOfCachedBluetoothDevices() {
- List<CachedBluetoothDevice> cachedBluetoothDevices = new ArrayList<>();
- if (mCachedDevice == null) {
- return cachedBluetoothDevices;
- }
- cachedBluetoothDevices.add(mCachedDevice);
- if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
- for (CachedBluetoothDevice member : mCachedDevice.getMemberDevice()) {
- cachedBluetoothDevices.add(member);
- }
- }
- return cachedBluetoothDevices;
- }
-
/**
* Disable the Le Audio profile, VCP, and CSIP for each of the Le Audio devices.
*
@@ -480,7 +465,7 @@
for (CachedBluetoothDevice item : mAllOfCachedDevices) {
item.unregisterCallback(this);
}
- mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
+ mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
for (CachedBluetoothDevice item : mAllOfCachedDevices) {
item.registerCallback(this);
}
diff --git a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
index 7bf9fdb..e30bbfb 100644
--- a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
@@ -16,7 +16,6 @@
package com.android.settings.bluetooth;
-import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothLeAudio;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -48,7 +47,6 @@
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.LayoutPreference;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -91,7 +89,7 @@
@VisibleForTesting
LayoutPreference mLayoutPreference;
private CachedBluetoothDevice mCachedDevice;
- private List<CachedBluetoothDevice> mLeAudioDevices;
+ private List<CachedBluetoothDevice> mAllOfCachedDevices;
@VisibleForTesting
Handler mHandler = new Handler(Looper.getMainLooper());
@VisibleForTesting
@@ -129,12 +127,8 @@
return;
}
mIsRegisterCallback = true;
- if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
- for (CachedBluetoothDevice item : mLeAudioDevices) {
- item.registerCallback(this);
- }
- } else {
- mCachedDevice.registerCallback(this);
+ for (CachedBluetoothDevice item : mAllOfCachedDevices) {
+ item.registerCallback(this);
}
refresh();
}
@@ -144,13 +138,10 @@
if (!mIsRegisterCallback) {
return;
}
- if (mLeAudioDevices != null && !mLeAudioDevices.isEmpty()) {
- for (CachedBluetoothDevice item : mLeAudioDevices) {
- item.unregisterCallback(this);
- }
- } else {
- mCachedDevice.unregisterCallback(this);
+ for (CachedBluetoothDevice item : mAllOfCachedDevices) {
+ item.unregisterCallback(this);
}
+
mIsRegisterCallback = false;
}
@@ -162,8 +153,7 @@
LocalBluetoothManager bluetoothManager) {
mCachedDevice = cachedBluetoothDevice;
mProfileManager = bluetoothManager.getProfileManager();
- mLeAudioDevices = getAllOfLeAudioDevices();
-
+ mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
}
@VisibleForTesting
@@ -234,26 +224,11 @@
updateBatteryLayout(R.id.bt_battery_right, BluetoothUtils.META_INT_ERROR);
}
- private List<CachedBluetoothDevice> getAllOfLeAudioDevices() {
- if (mCachedDevice == null) {
- return null;
- }
- List<CachedBluetoothDevice> leAudioDevices = new ArrayList<>();
- leAudioDevices.add(mCachedDevice);
- if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
- for (CachedBluetoothDevice member : mCachedDevice.getMemberDevice()) {
- leAudioDevices.add(member);
- }
- }
- Log.d(TAG, "mLeAudioDevices is " + mLeAudioDevices);
- return leAudioDevices;
- }
-
private void updateBatteryLayout() {
// Init the battery layouts.
hideAllOfBatteryLayouts();
LeAudioProfile leAudioProfile = mProfileManager.getLeAudioProfile();
- if (mLeAudioDevices == null || mLeAudioDevices.isEmpty()) {
+ if (mAllOfCachedDevices.isEmpty()) {
Log.e(TAG, "There is no LeAudioProfile.");
return;
}
@@ -267,7 +242,7 @@
return;
}
- for (CachedBluetoothDevice cachedDevice : mLeAudioDevices) {
+ for (CachedBluetoothDevice cachedDevice : mAllOfCachedDevices) {
int deviceId = leAudioProfile.getAudioLocation(cachedDevice.getDevice());
Log.d(TAG, "LeAudioDevices:" + cachedDevice.getDevice().getAnonymizedAddress()
+ ", deviceId:" + deviceId);
@@ -322,7 +297,15 @@
@Override
public void onDeviceAttributesChanged() {
- if (mCachedDevice != null) {
+ for (CachedBluetoothDevice item : mAllOfCachedDevices) {
+ item.unregisterCallback(this);
+ }
+ mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
+ for (CachedBluetoothDevice item : mAllOfCachedDevices) {
+ item.registerCallback(this);
+ }
+
+ if (!mAllOfCachedDevices.isEmpty()) {
refresh();
}
}
diff --git a/src/com/android/settings/bluetooth/Utils.java b/src/com/android/settings/bluetooth/Utils.java
index 46d8e70..79a2de0 100644
--- a/src/com/android/settings/bluetooth/Utils.java
+++ b/src/com/android/settings/bluetooth/Utils.java
@@ -19,6 +19,7 @@
import static android.os.Process.BLUETOOTH_UID;
import android.app.settings.SettingsEnums;
+import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -39,9 +40,12 @@
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.BluetoothUtils.ErrorListener;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
@@ -225,4 +229,47 @@
}
throw new NameNotFoundException("Could not find main bluetooth package");
}
+
+ /**
+ * Returns all cachedBluetoothDevices with the same groupId.
+ * @param cachedBluetoothDevice The main cachedBluetoothDevice.
+ * @return all cachedBluetoothDevices with the same groupId.
+ */
+ public static List<CachedBluetoothDevice> getAllOfCachedBluetoothDevices(Context context,
+ CachedBluetoothDevice cachedBluetoothDevice) {
+ List<CachedBluetoothDevice> cachedBluetoothDevices = new ArrayList<>();
+ if (cachedBluetoothDevice == null) {
+ Log.e(TAG, "getAllOfCachedBluetoothDevices: no cachedBluetoothDevice");
+ return cachedBluetoothDevices;
+ }
+ int deviceGroupId = cachedBluetoothDevice.getGroupId();
+ if (deviceGroupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
+ cachedBluetoothDevices.add(cachedBluetoothDevice);
+ return cachedBluetoothDevices;
+ }
+
+ final LocalBluetoothManager localBtMgr = Utils.getLocalBtManager(context);
+ if (localBtMgr == null) {
+ Log.e(TAG, "getAllOfCachedBluetoothDevices: no LocalBluetoothManager");
+ return cachedBluetoothDevices;
+ }
+ CachedBluetoothDevice mainDevice =
+ localBtMgr.getCachedDeviceManager().getCachedDevicesCopy().stream()
+ .filter(cachedDevice -> cachedDevice.getGroupId() == deviceGroupId)
+ .findFirst().orElse(null);
+ if (mainDevice == null) {
+ Log.e(TAG, "getAllOfCachedBluetoothDevices: groupId = " + deviceGroupId
+ + ", no main device.");
+ return cachedBluetoothDevices;
+ }
+ cachedBluetoothDevice = mainDevice;
+ cachedBluetoothDevices.add(cachedBluetoothDevice);
+ for (CachedBluetoothDevice member : cachedBluetoothDevice.getMemberDevice()) {
+ cachedBluetoothDevices.add(member);
+ }
+ Log.d(TAG, "getAllOfCachedBluetoothDevices: groupId = " + deviceGroupId
+ + " , cachedBluetoothDevice = " + cachedBluetoothDevice
+ + " , deviceList = " + cachedBluetoothDevices);
+ return cachedBluetoothDevices;
+ }
}