Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f203247 authored by shaoweishen's avatar shaoweishen Committed by Shaowei Shen
Browse files

[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
parent c50be496
Loading
Loading
Loading
Loading
+14 −1
Original line number Original line Diff line number Diff line
@@ -182,6 +182,11 @@ public class InfoMediaManager extends MediaManager {
        return false;
        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.
     * Remove a {@code device} from current media.
     *
     *
@@ -616,7 +621,6 @@ public class InfoMediaManager extends MediaManager {
            return finalizedItemList;
            return finalizedItemList;
        }
        }



        @DoNotInline
        @DoNotInline
        static synchronized List<MediaRoute2Info> filterDuplicatedIds(List<MediaRoute2Info> infos) {
        static synchronized List<MediaRoute2Info> filterDuplicatedIds(List<MediaRoute2Info> infos) {
            List<MediaRoute2Info> filteredInfos = new ArrayList<>();
            List<MediaRoute2Info> filteredInfos = new ArrayList<>();
@@ -653,5 +657,14 @@ public class InfoMediaManager extends MediaManager {
            }
            }
            return sortedInfoList;
            return sortedInfoList;
        }
        }

        @DoNotInline
        static boolean preferRouteListingOrdering(MediaRouter2Manager mediaRouter2Manager,
                String packageName) {
            RouteListingPreference routeListingPreference =
                    mediaRouter2Manager.getRouteListingPreference(packageName);
            return routeListingPreference != null
                    && !routeListingPreference.getUseSystemOrdering();
        }
    }
    }
}
}
+9 −0
Original line number Original line Diff line number Diff line
@@ -209,6 +209,15 @@ public class LocalMediaManager implements BluetoothCallback {
        return mInfoMediaManager.isRoutingSessionAvailableForVolumeControl();
        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
     * Start scan connected MediaDevice
     */
     */
+27 −0
Original line number Original line Diff line number Diff line
@@ -340,6 +340,33 @@ public class InfoMediaManagerTest {
        assertThat(mInfoMediaManager.mMediaDevices).hasSize(routes.size());
        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() {
    private List<MediaRoute2Info> getRoutesListWithDuplicatedIds() {
        final List<MediaRoute2Info> routes = new ArrayList<>();
        final List<MediaRoute2Info> routes = new ArrayList<>();
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
        final MediaRoute2Info info = mock(MediaRoute2Info.class);
+9 −4
Original line number Original line Diff line number Diff line
@@ -630,10 +630,11 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,


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


    public boolean isRouteProcessSupported() {
        return mFeatureFlags.isEnabled(Flags.OUTPUT_SWITCHER_ROUTES_PROCESSING);
    }

    List<MediaDevice> getGroupMediaDevices() {
    List<MediaDevice> getGroupMediaDevices() {
        final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
        final List<MediaDevice> selectedDevices = getSelectedMediaDevice();
        final List<MediaDevice> selectableDevices = getSelectableMediaDevice();
        final List<MediaDevice> selectableDevices = getSelectableMediaDevice();