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

Commit d244a4f5 authored by Derek Jedral's avatar Derek Jedral Committed by Android (Google) Code Review
Browse files

Merge "Don't sort selected devices when RLP does not exist" into main

parents 9481c588 ac4cc62a
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -580,8 +580,24 @@ public class MediaSwitchingController
        synchronized (mMediaDevicesLock) {
            if (!mLocalMediaManager.isPreferenceRouteListingExist()) {
                attachRangeInfo(devices);
                if (Flags.enableOutputSwitcherDeviceGrouping()) {
                    List<MediaDevice> selectedDevices = new ArrayList<>();
                    Set<String> selectedDeviceIds =
                            getSelectedMediaDevice().stream()
                                    .map(MediaDevice::getId)
                                    .collect(Collectors.toSet());
                    for (MediaDevice device : devices) {
                        if (selectedDeviceIds.contains(device.getId())) {
                            selectedDevices.add(device);
                        }
                    }
                    devices.removeAll(selectedDevices);
                    Collections.sort(devices, Comparator.naturalOrder());
                    devices.addAll(0, selectedDevices);
                } else {
                    Collections.sort(devices, Comparator.naturalOrder());
                }
            }
            if (Flags.fixOutputMediaItemListIndexOutOfBoundsException()) {
                // For the first time building list, to make sure the top device is the connected
                // device.
+88 −2
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

@SmallTest
@RunWith(ParameterizedAndroidJunit4.class)
@@ -151,8 +152,10 @@ public class MediaSwitchingControllerTest extends SysuiTestCase {
    private MediaDevice mMediaDevice1;
    @Mock
    private MediaDevice mMediaDevice2;
    @Mock
    private NearbyDevice mNearbyDevice1;
    @Mock private MediaDevice mMediaDevice3;
    @Mock private MediaDevice mMediaDevice4;
    @Mock private MediaDevice mMediaDevice5;
    @Mock private NearbyDevice mNearbyDevice1;
    @Mock
    private NearbyDevice mNearbyDevice2;
    @Mock
@@ -1550,6 +1553,89 @@ public class MediaSwitchingControllerTest extends SysuiTestCase {
        assertThat(items.get(1).getMediaDevice().get()).isEqualTo(mMediaDevice2);
    }

    @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING)
    @Test
    public void selectedDevicesAddedInSameOrderWhenRlpDoesNotExist() {
        setUpSelectedDevicesAndOrdering();

        mMediaSwitchingController.onDeviceListUpdate(mMediaDevices);

        List<MediaDevice> devices =
                mMediaSwitchingController.getMediaItemList().stream()
                        .filter(item -> item.getMediaDevice().isPresent())
                        .map(item -> item.getMediaDevice().orElse(null))
                        .collect(Collectors.toList());
        assertThat(devices)
                .containsExactly(
                        mMediaDevice4,
                        mMediaDevice3,
                        mMediaDevice5,
                        mMediaDevice1,
                        mMediaDevice2)
                .inOrder();
    }

    @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING)
    @Test
    public void selectedDevicesAddedInSortedOrderWhenRlpDoesNotExist() {
        setUpSelectedDevicesAndOrdering();

        mMediaSwitchingController.onDeviceListUpdate(mMediaDevices);

        List<MediaDevice> devices =
                mMediaSwitchingController.getMediaItemList().stream()
                        .filter(item -> item.getMediaDevice().isPresent())
                        .map(item -> item.getMediaDevice().orElse(null))
                        .collect(Collectors.toList());

        assertThat(devices)
                .containsExactly(
                        mMediaDevice5,
                        mMediaDevice4,
                        mMediaDevice3,
                        mMediaDevice1,
                        mMediaDevice2)
                .inOrder();
    }

    private void setUpSelectedDevicesAndOrdering() {
        when(mMediaDevice1.getId()).thenReturn(TEST_DEVICE_1_ID);
        when(mMediaDevice2.getId()).thenReturn(TEST_DEVICE_2_ID);
        when(mMediaDevice3.getId()).thenReturn(TEST_DEVICE_3_ID);
        when(mMediaDevice4.getId()).thenReturn(TEST_DEVICE_4_ID);
        when(mMediaDevice5.getId()).thenReturn(TEST_DEVICE_5_ID);
        mMediaDevices.clear();
        Collections.addAll(
                mMediaDevices,
                mMediaDevice2,
                mMediaDevice1,
                mMediaDevice4,
                mMediaDevice3,
                mMediaDevice5);
        List<MediaDevice> selectedMediaDevices = new ArrayList<>();
        Collections.addAll(selectedMediaDevices, mMediaDevice3, mMediaDevice4, mMediaDevice5);
        doReturn(selectedMediaDevices).when(mLocalMediaManager).getSelectedMediaDevice();
        // Sort the media devices in the order they appear in the deviceOrder list
        List<MediaDevice> deviceOrder = new ArrayList<>();
        Collections.addAll(
                deviceOrder,
                mMediaDevice1,
                mMediaDevice2,
                mMediaDevice3,
                mMediaDevice4,
                mMediaDevice5);
        for (int i = 0; i < deviceOrder.size(); i++) {
            for (int j = i + 1; j < deviceOrder.size(); j++) {
                when(deviceOrder.get(i).compareTo(deviceOrder.get(j))).thenReturn(-1);
                when(deviceOrder.get(j).compareTo(deviceOrder.get(i))).thenReturn(1);
            }
        }
        when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false);
        mMediaSwitchingController.start(mCb);
        reset(mCb);
        mMediaSwitchingController.getMediaItemList().clear();
    }

    @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING)
    @Test
    public void selectedDevicesAddedInReverseOrder() {