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

This commit is contained in:
Ze Li
2024-12-03 08:06:04 +00:00
committed by Android (Google) Code Review
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. */ /** Sort the preferenceGroup by most recently used. */
public void updatePreferenceGroup() { public void updatePreferenceGroup() {
mPreferenceGroup.removeAll(); mContext.getMainExecutor().execute(() -> {
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) { mPreferenceGroup.removeAll();
// Bluetooth is supported if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
int order = 0; // Bluetooth is supported
for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) { int order = 0;
Preference preference = mDevicePreferenceMap.getOrDefault(device, null); for (BluetoothDevice device : mBluetoothAdapter.getMostRecentlyConnectedDevices()) {
if (preference != null) { Preference preference = mDevicePreferenceMap.getOrDefault(device, null);
Log.d(TAG, "Adding preference with order " + order + " when there are " if (preference != null) {
+ mPreferenceGroup.getPreferenceCount()); 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); preference.setOrder(order);
mPreferenceGroup.addPreference(preference); mPreferenceGroup.addPreference(preference);
order += 1; order += 1;
} }
if (order == MAX_DEVICE_NUM) {
break;
}
} }
for (Preference preference : mDockDevicesList) { mPreferenceGroup.addPreference(mSeeAllPreference);
if (order == MAX_DEVICE_NUM) { updatePreferenceVisibility();
break; });
}
preference.setOrder(order);
mPreferenceGroup.addPreference(preference);
order += 1;
}
}
mPreferenceGroup.addPreference(mSeeAllPreference);
updatePreferenceVisibility();
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -24,6 +24,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
@@ -31,6 +32,7 @@ import android.bluetooth.BluetoothManager;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Looper;
import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.util.Pair; import android.util.Pair;
@@ -226,6 +228,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mContext, mCachedDevice1, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT); mContext, mCachedDevice1, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
mPreConnectedDeviceController.onDeviceAdded(preference1); mPreConnectedDeviceController.onDeviceAdded(preference1);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
} }
@@ -236,6 +239,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mContext, null /* AttributeSet */); mContext, null /* AttributeSet */);
mPreConnectedDeviceController.onDeviceAdded(dockPreference); mPreConnectedDeviceController.onDeviceAdded(dockPreference);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
} }
@@ -258,6 +262,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mPreConnectedDeviceController.onDeviceAdded(preference3); mPreConnectedDeviceController.onDeviceAdded(preference3);
mPreConnectedDeviceController.onDeviceAdded(preference4); mPreConnectedDeviceController.onDeviceAdded(preference4);
mPreConnectedDeviceController.onDeviceAdded(dockPreference); mPreConnectedDeviceController.onDeviceAdded(dockPreference);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
// 3 BluetoothDevicePreference and 1 see all preference // 3 BluetoothDevicePreference and 1 see all preference
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4);
@@ -269,6 +274,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT); mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
mPreConnectedDeviceController.onDeviceAdded(preference); mPreConnectedDeviceController.onDeviceAdded(preference);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
// 1 see all preference // 1 see all preference
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
@@ -280,6 +286,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT); mContext, mCachedDevice5, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
mPreConnectedDeviceController.onDeviceAdded(preference); mPreConnectedDeviceController.onDeviceAdded(preference);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
// 1 see all preference // 1 see all preference
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
@@ -296,6 +303,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mPreConnectedDeviceController.onDeviceRemoved(preference1); mPreConnectedDeviceController.onDeviceRemoved(preference1);
mPreConnectedDeviceController.onDeviceRemoved(dockPreference); mPreConnectedDeviceController.onDeviceRemoved(dockPreference);
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
} }
@@ -345,6 +353,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mPreConnectedDeviceController.onDeviceAdded(preference2); mPreConnectedDeviceController.onDeviceAdded(preference2);
mPreConnectedDeviceController.updatePreferenceGroup(); mPreConnectedDeviceController.updatePreferenceGroup();
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
// Refer to the order of {@link #mMostRecentlyConnectedDevices}, the first one is see all // Refer to the order of {@link #mMostRecentlyConnectedDevices}, the first one is see all
// preference // preference
@@ -380,6 +389,7 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mPreConnectedDeviceController.onDeviceAdded(preference2); mPreConnectedDeviceController.onDeviceAdded(preference2);
mPreConnectedDeviceController.updatePreferenceGroup(); mPreConnectedDeviceController.updatePreferenceGroup();
shadowOf(Looper.getMainLooper()).runToEndOfTasks();
// 1 see all preference // 1 see all preference
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1); assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);