[Connected devices page] Move the refresh logic to main thread.

As the caller of adding or removing devices may not be performing on background thread, sync problem could occur. So here we make sure all updates to UI happens on the main thread.

Test: atest: com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceControllerTest
Bug: 365044575
Flag: EXEMPT bugfix
Change-Id: I5b697acb7cf7469fe3bbff33b820b4e9f4c5104f
This commit is contained in:
Ze Li
2024-11-29 16:41:12 +08:00
parent 13d90e8024
commit 7c11a45735
2 changed files with 35 additions and 23 deletions

View File

@@ -170,34 +170,36 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
/** Sort the preferenceGroup by most recently used. */
public void updatePreferenceGroup() {
mPreferenceGroup.removeAll();
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
// Bluetooth is supported
int order = 0;
for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
Preference preference = mDevicePreferenceMap.getOrDefault(device, null);
if (preference != null) {
Log.d(TAG, "Adding preference with order " + order + " when there are "
+ mPreferenceGroup.getPreferenceCount());
mContext.getMainExecutor().execute(() -> {
mPreferenceGroup.removeAll();
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
// Bluetooth is supported
int order = 0;
for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
Preference preference = mDevicePreferenceMap.getOrDefault(device, null);
if (preference != null) {
Log.d(TAG, "Adding preference with order " + order + " when there are "
+ mPreferenceGroup.getPreferenceCount());
preference.setOrder(order);
mPreferenceGroup.addPreference(preference);
order += 1;
}
if (order == MAX_DEVICE_NUM) {
break;
}
}
for (Preference preference : mDockDevicesList) {
if (order == MAX_DEVICE_NUM) {
break;
}
preference.setOrder(order);
mPreferenceGroup.addPreference(preference);
order += 1;
}
if (order == MAX_DEVICE_NUM) {
break;
}
}
for (Preference preference : mDockDevicesList) {
if (order == MAX_DEVICE_NUM) {
break;
}
preference.setOrder(order);
mPreferenceGroup.addPreference(preference);
order += 1;
}
}
mPreferenceGroup.addPreference(mSeeAllPreference);
updatePreferenceVisibility();
mPreferenceGroup.addPreference(mSeeAllPreference);
updatePreferenceVisibility();
});
}
@VisibleForTesting