[Output Switcher] Implements method for checking preference list

complete the implementation of checking preference list, wrap method
under AdvancedRoutesProcessor

Test: make RunSettingsLibRoboTests -j40
Bug: b/257851968
Change-Id: I0445ecb0528fe090709e984a7d2165b6d901bd9c
This commit is contained in:
shaoweishen
2022-12-19 09:32:13 +00:00
committed by Shaowei Shen
parent c50be49679
commit 0f2032479f
4 changed files with 59 additions and 5 deletions

View File

@@ -182,6 +182,11 @@ public class InfoMediaManager extends MediaManager {
return false;
}
boolean preferRouteListingOrdering() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
&& Api34Impl.preferRouteListingOrdering(mRouterManager, mPackageName);
}
/**
* Remove a {@code device} from current media.
*
@@ -616,7 +621,6 @@ public class InfoMediaManager extends MediaManager {
return finalizedItemList;
}
@DoNotInline
static synchronized List<MediaRoute2Info> filterDuplicatedIds(List<MediaRoute2Info> infos) {
List<MediaRoute2Info> filteredInfos = new ArrayList<>();
@@ -653,5 +657,14 @@ public class InfoMediaManager extends MediaManager {
}
return sortedInfoList;
}
@DoNotInline
static boolean preferRouteListingOrdering(MediaRouter2Manager mediaRouter2Manager,
String packageName) {
RouteListingPreference routeListingPreference =
mediaRouter2Manager.getRouteListingPreference(packageName);
return routeListingPreference != null
&& !routeListingPreference.getUseSystemOrdering();
}
}
}

View File

@@ -209,6 +209,15 @@ public class LocalMediaManager implements BluetoothCallback {
return mInfoMediaManager.isRoutingSessionAvailableForVolumeControl();
}
/**
* Returns if media app establishes a preferred route listing order.
*
* @return True if route list ordering exist and not using system ordering, false otherwise.
*/
public boolean isPreferenceRouteListingExist() {
return mInfoMediaManager.preferRouteListingOrdering();
}
/**
* Start scan connected MediaDevice
*/

View File

@@ -340,6 +340,33 @@ public class InfoMediaManagerTest {
assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
}
@Test
public void hasPreferenceRouteListing_oldSdkVersion_returnsFalse() {
assertThat(mInfoMediaManager.preferRouteListingOrdering()).isFalse();
}
@Test
public void hasPreferenceRouteListing_newSdkVersionWithPreferenceExist_returnsTrue() {
ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT",
Build.VERSION_CODES.UPSIDE_DOWN_CAKE);
when(mRouterManager.getRouteListingPreference(any())).thenReturn(
new RouteListingPreference.Builder().setItems(
ImmutableList.of()).setUseSystemOrdering(false).build());
mInfoMediaManager.mRouterManager = mRouterManager;
assertThat(mInfoMediaManager.preferRouteListingOrdering()).isTrue();
}
@Test
public void hasPreferenceRouteListing_newSdkVersionWithPreferenceNotExist_returnsFalse() {
ReflectionHelpers.setStaticField(Build.VERSION.class, "SDK_INT",
Build.VERSION_CODES.UPSIDE_DOWN_CAKE);
when(mRouterManager.getRouteListingPreference(any())).thenReturn(null);
assertThat(mInfoMediaManager.preferRouteListingOrdering()).isFalse();
}
private List<MediaRoute2Info> getRoutesListWithDuplicatedIds() {
final List<MediaRoute2Info> routes = new ArrayList<>();
final MediaRoute2Info info = mock(MediaRoute2Info.class);

View File

@@ -630,10 +630,11 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
private void buildMediaItems(List<MediaDevice> devices) {
synchronized (mMediaDevicesLock) {
//TODO(b/257851968): do the organization only when there's no suggested sorted order
// we get from application
attachRangeInfo(devices);
Collections.sort(devices, Comparator.naturalOrder());
if (!isRouteProcessSupported() || (isRouteProcessSupported()
&& !mLocalMediaManager.isPreferenceRouteListingExist())) {
attachRangeInfo(devices);
Collections.sort(devices, Comparator.naturalOrder());
}
// For the first time building list, to make sure the top device is the connected
// device.
if (mMediaItemList.isEmpty()) {
@@ -751,6 +752,10 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ADVANCED_LAYOUT);
}
public boolean isRouteProcessSupported() {
return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ROUTES_PROCESSING);
}
List<MediaDevice> getGroupMediaDevices() {
final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
final List<MediaDevice> selectableDevices = getSelectableMediaDevice();