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: I0d59928f2f9f43acd558a3867ab00a95e771e453
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
SongFerngWang
2023-05-18 10:31:50 +00:00
committed by Automerger Merge Worker
3 changed files with 67 additions and 52 deletions

View File

@@ -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 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
mManager = manager;
mProfileManager = mManager.getProfileManager();
mCachedDevice = device;
mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
lifecycle.addObserver(this);
}
@@ -319,20 +318,6 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
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 @@ public class BluetoothDetailsProfilesController extends BluetoothDetailsControll
for (CachedBluetoothDevice item : mAllOfCachedDevices) {
item.unregisterCallback(this);
}
mAllOfCachedDevices = getAllOfCachedBluetoothDevices();
mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
for (CachedBluetoothDevice item : mAllOfCachedDevices) {
item.registerCallback(this);
}

View File

@@ -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.OnStart;
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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
@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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
LocalBluetoothManager bluetoothManager) {
mCachedDevice = cachedBluetoothDevice;
mProfileManager = bluetoothManager.getProfileManager();
mLeAudioDevices = getAllOfLeAudioDevices();
mAllOfCachedDevices = Utils.getAllOfCachedBluetoothDevices(mContext, mCachedDevice);
}
@VisibleForTesting
@@ -234,26 +224,11 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
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 @@ public class LeAudioBluetoothDetailsHeaderController extends BasePreferenceContr
@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();
}
}

View File

@@ -19,6 +19,7 @@ package com.android.settings.bluetooth;
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.R;
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 @@ public final class Utils {
}
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;
}
}