[Output Switcher] Fix list order for preference
Add system route to the top even Preference been set. add check for isScanning to prevent exception Bug: 286593457 Bug: 260055330 Test: make -j64 RunSettingsLibRoboTests ROBOTEST_FILTER="com.android.settingslib.media.InfoMediaManagerTest" Change-Id: Ic7245f9c4169eabf63aa8eabac9b6a57fbc4ea7b Merged-In: Ic7245f9c4169eabf63aa8eabac9b6a57fbc4ea7b
This commit is contained in:
committed by
Shaowei Shen
parent
f0d0864579
commit
7c9c5f29f7
@@ -91,6 +91,7 @@ public class InfoMediaManager extends MediaManager {
|
|||||||
MediaRouter2Manager mRouterManager;
|
MediaRouter2Manager mRouterManager;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
String mPackageName;
|
String mPackageName;
|
||||||
|
boolean mIsScanning = false;
|
||||||
|
|
||||||
private MediaDevice mCurrentConnectedDevice;
|
private MediaDevice mCurrentConnectedDevice;
|
||||||
private LocalBluetoothManager mBluetoothManager;
|
private LocalBluetoothManager mBluetoothManager;
|
||||||
@@ -110,22 +111,29 @@ public class InfoMediaManager extends MediaManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startScan() {
|
public void startScan() {
|
||||||
mMediaDevices.clear();
|
if (!mIsScanning) {
|
||||||
mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
|
mMediaDevices.clear();
|
||||||
mRouterManager.registerScanRequest();
|
mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
|
mRouterManager.registerScanRequest();
|
||||||
&& !TextUtils.isEmpty(mPackageName)) {
|
mIsScanning = true;
|
||||||
RouteListingPreference routeListingPreference =
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
|
||||||
mRouterManager.getRouteListingPreference(mPackageName);
|
&& !TextUtils.isEmpty(mPackageName)) {
|
||||||
Api34Impl.onRouteListingPreferenceUpdated(routeListingPreference, mPreferenceItemMap);
|
RouteListingPreference routeListingPreference =
|
||||||
|
mRouterManager.getRouteListingPreference(mPackageName);
|
||||||
|
Api34Impl.onRouteListingPreferenceUpdated(routeListingPreference,
|
||||||
|
mPreferenceItemMap);
|
||||||
|
}
|
||||||
|
refreshDevices();
|
||||||
}
|
}
|
||||||
refreshDevices();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stopScan() {
|
public void stopScan() {
|
||||||
mRouterManager.unregisterCallback(mMediaRouterCallback);
|
if (mIsScanning) {
|
||||||
mRouterManager.unregisterScanRequest();
|
mRouterManager.unregisterCallback(mMediaRouterCallback);
|
||||||
|
mRouterManager.unregisterScanRequest();
|
||||||
|
mIsScanning = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -701,20 +709,19 @@ public class InfoMediaManager extends MediaManager {
|
|||||||
List<MediaRoute2Info> selectedRouteInfos, List<MediaRoute2Info> infolist,
|
List<MediaRoute2Info> selectedRouteInfos, List<MediaRoute2Info> infolist,
|
||||||
List<RouteListingPreference.Item> preferenceRouteListing) {
|
List<RouteListingPreference.Item> preferenceRouteListing) {
|
||||||
final List<MediaRoute2Info> sortedInfoList = new ArrayList<>(selectedRouteInfos);
|
final List<MediaRoute2Info> sortedInfoList = new ArrayList<>(selectedRouteInfos);
|
||||||
|
infolist.removeAll(selectedRouteInfos);
|
||||||
|
sortedInfoList.addAll(infolist.stream().filter(
|
||||||
|
MediaRoute2Info::isSystemRoute).collect(Collectors.toList()));
|
||||||
for (RouteListingPreference.Item item : preferenceRouteListing) {
|
for (RouteListingPreference.Item item : preferenceRouteListing) {
|
||||||
for (MediaRoute2Info info : infolist) {
|
for (MediaRoute2Info info : infolist) {
|
||||||
if (item.getRouteId().equals(info.getId())
|
if (item.getRouteId().equals(info.getId())
|
||||||
&& !selectedRouteInfos.contains(info)) {
|
&& !selectedRouteInfos.contains(info)
|
||||||
|
&& !info.isSystemRoute()) {
|
||||||
sortedInfoList.add(info);
|
sortedInfoList.add(info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sortedInfoList.size() != infolist.size()) {
|
|
||||||
infolist.removeAll(sortedInfoList);
|
|
||||||
sortedInfoList.addAll(infolist.stream().filter(
|
|
||||||
MediaRoute2Info::isSystemRoute).collect(Collectors.toList()));
|
|
||||||
}
|
|
||||||
return sortedInfoList;
|
return sortedInfoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,23 @@ public class InfoMediaManagerTest {
|
|||||||
mInfoMediaManager.mRouterManager = MediaRouter2Manager.getInstance(mContext);
|
mInfoMediaManager.mRouterManager = MediaRouter2Manager.getInstance(mContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void stopScan_notStartFirst_notCallsUnregister() {
|
||||||
|
mInfoMediaManager.mRouterManager = mRouterManager;
|
||||||
|
mInfoMediaManager.stopScan();
|
||||||
|
|
||||||
|
verify(mRouterManager, never()).unregisterScanRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void stopScan_startFirst_callsUnregister() {
|
||||||
|
mInfoMediaManager.mRouterManager = mRouterManager;
|
||||||
|
mInfoMediaManager.startScan();
|
||||||
|
mInfoMediaManager.stopScan();
|
||||||
|
|
||||||
|
verify(mRouterManager).unregisterScanRequest();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onRouteAdded_getAvailableRoutes_shouldAddMediaDevice() {
|
public void onRouteAdded_getAvailableRoutes_shouldAddMediaDevice() {
|
||||||
final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
|
final List<RoutingSessionInfo> routingSessionInfos = new ArrayList<>();
|
||||||
@@ -327,11 +344,12 @@ public class InfoMediaManagerTest {
|
|||||||
routeListingPreference);
|
routeListingPreference);
|
||||||
mInfoMediaManager.mMediaRouterCallback.onRoutesUpdated();
|
mInfoMediaManager.mMediaRouterCallback.onRoutesUpdated();
|
||||||
|
|
||||||
assertThat(mInfoMediaManager.mMediaDevices).hasSize(3);
|
assertThat(mInfoMediaManager.mMediaDevices).hasSize(4);
|
||||||
assertThat(mInfoMediaManager.mMediaDevices.get(0).getId()).isEqualTo(TEST_ID);
|
assertThat(mInfoMediaManager.mMediaDevices.get(0).getId()).isEqualTo(TEST_ID);
|
||||||
assertThat(mInfoMediaManager.mMediaDevices.get(1).getId()).isEqualTo(TEST_ID_4);
|
assertThat(mInfoMediaManager.mMediaDevices.get(1).getId()).isEqualTo(TEST_ID_1);
|
||||||
assertThat(mInfoMediaManager.mMediaDevices.get(1).isSuggestedDevice()).isTrue();
|
assertThat(mInfoMediaManager.mMediaDevices.get(2).getId()).isEqualTo(TEST_ID_4);
|
||||||
assertThat(mInfoMediaManager.mMediaDevices.get(2).getId()).isEqualTo(TEST_ID_3);
|
assertThat(mInfoMediaManager.mMediaDevices.get(2).isSuggestedDevice()).isTrue();
|
||||||
|
assertThat(mInfoMediaManager.mMediaDevices.get(3).getId()).isEqualTo(TEST_ID_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -405,8 +423,13 @@ public class InfoMediaManagerTest {
|
|||||||
when(availableInfo3.getClientPackageName()).thenReturn(packageName);
|
when(availableInfo3.getClientPackageName()).thenReturn(packageName);
|
||||||
availableRoutes.add(availableInfo3);
|
availableRoutes.add(availableInfo3);
|
||||||
|
|
||||||
when(mRouterManager.getAvailableRoutes(packageName)).thenReturn(
|
final MediaRoute2Info availableInfo4 = mock(MediaRoute2Info.class);
|
||||||
availableRoutes);
|
when(availableInfo4.getId()).thenReturn(TEST_ID_1);
|
||||||
|
when(availableInfo4.isSystemRoute()).thenReturn(true);
|
||||||
|
when(availableInfo4.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
|
||||||
|
availableRoutes.add(availableInfo4);
|
||||||
|
|
||||||
|
when(mRouterManager.getAvailableRoutes(packageName)).thenReturn(availableRoutes);
|
||||||
|
|
||||||
return availableRoutes;
|
return availableRoutes;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user