Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java +26 −8 Original line number Original line Diff line number Diff line Loading @@ -609,8 +609,7 @@ public class MediaSwitchingController devices, devices, getSelectedMediaDevice(), getSelectedMediaDevice(), connectedMediaDevice, connectedMediaDevice, needToHandleMutingExpectedDevice, needToHandleMutingExpectedDevice); getConnectNewDeviceItem()); } else { } else { List<MediaItem> updatedMediaItems = List<MediaItem> updatedMediaItems = buildMediaItems( buildMediaItems( Loading Loading @@ -701,7 +700,6 @@ public class MediaSwitchingController } } } } dividerItems.forEach(finalMediaItems::add); dividerItems.forEach(finalMediaItems::add); attachConnectNewDeviceItemIfNeeded(finalMediaItems); return finalMediaItems; return finalMediaItems; } } } } Loading Loading @@ -765,7 +763,6 @@ public class MediaSwitchingController finalMediaItems.add(MediaItem.createDeviceMediaItem(device)); finalMediaItems.add(MediaItem.createDeviceMediaItem(device)); } } } } attachConnectNewDeviceItemIfNeeded(finalMediaItems); return finalMediaItems; return finalMediaItems; } } Loading Loading @@ -879,6 +876,15 @@ public class MediaSwitchingController }); }); } } private List<MediaItem> getOutputDeviceList(boolean addConnectDeviceButton) { List<MediaItem> mediaItems = new ArrayList<>( mOutputMediaItemListProxy.getOutputMediaItemList()); if (addConnectDeviceButton) { attachConnectNewDeviceItemIfNeeded(mediaItems); } return mediaItems; } private void addInputDevices(List<MediaItem> mediaItems) { private void addInputDevices(List<MediaItem> mediaItems) { mediaItems.add( mediaItems.add( MediaItem.createGroupDividerMediaItem( MediaItem.createGroupDividerMediaItem( Loading @@ -886,22 +892,34 @@ public class MediaSwitchingController mediaItems.addAll(mInputMediaItemList); mediaItems.addAll(mInputMediaItemList); } } private void addOutputDevices(List<MediaItem> mediaItems) { private void addOutputDevices(List<MediaItem> mediaItems, boolean addConnectDeviceButton) { mediaItems.add( mediaItems.add( MediaItem.createGroupDividerMediaItem( MediaItem.createGroupDividerMediaItem( mContext.getString(R.string.media_output_group_title))); mContext.getString(R.string.media_output_group_title))); mediaItems.addAll(mOutputMediaItemListProxy.getOutputMediaItemList()); mediaItems.addAll(getOutputDeviceList(addConnectDeviceButton)); } } /** * Returns a list of media items to be rendered in the device list. For backward compatibility * reasons, adds a "Connect a device" button by default. */ public List<MediaItem> getMediaItemList() { public List<MediaItem> getMediaItemList() { return getMediaItemList(true /* addConnectDeviceButton */); } /** * Returns a list of media items to be rendered in the device list. * @param addConnectDeviceButton Whether to add a "Connect a device" button to the list. */ public List<MediaItem> getMediaItemList(boolean addConnectDeviceButton) { // If input routing is not enabled, only return output media items. // If input routing is not enabled, only return output media items. if (!enableInputRouting()) { if (!enableInputRouting()) { return mOutputMediaItemListProxy.getOutputMediaItemList(); return getOutputDeviceList(addConnectDeviceButton); } } // If input routing is enabled, return both output and input media items. // If input routing is enabled, return both output and input media items. List<MediaItem> mediaItems = new ArrayList<>(); List<MediaItem> mediaItems = new ArrayList<>(); addOutputDevices(mediaItems); addOutputDevices(mediaItems, addConnectDeviceButton); addInputDevices(mediaItems); addInputDevices(mediaItems); return mediaItems; return mediaItems; } } Loading packages/SystemUI/src/com/android/systemui/media/dialog/OutputMediaItemListProxy.java +2 −14 Original line number Original line Diff line number Diff line Loading @@ -44,7 +44,6 @@ public class OutputMediaItemListProxy { private final List<MediaItem> mSelectedMediaItems; private final List<MediaItem> mSelectedMediaItems; private final List<MediaItem> mSuggestedMediaItems; private final List<MediaItem> mSuggestedMediaItems; private final List<MediaItem> mSpeakersAndDisplaysMediaItems; private final List<MediaItem> mSpeakersAndDisplaysMediaItems; @Nullable private MediaItem mConnectNewDeviceMediaItem; public OutputMediaItemListProxy(Context context) { public OutputMediaItemListProxy(Context context) { mContext = context; mContext = context; Loading Loading @@ -88,9 +87,6 @@ public class OutputMediaItemListProxy { R.string.media_output_group_title_speakers_and_displays))); R.string.media_output_group_title_speakers_and_displays))); finalMediaItems.addAll(mSpeakersAndDisplaysMediaItems); finalMediaItems.addAll(mSpeakersAndDisplaysMediaItems); } } if (mConnectNewDeviceMediaItem != null) { finalMediaItems.add(mConnectNewDeviceMediaItem); } return finalMediaItems; return finalMediaItems; } } Loading @@ -99,8 +95,7 @@ public class OutputMediaItemListProxy { List<MediaDevice> devices, List<MediaDevice> devices, List<MediaDevice> selectedDevices, List<MediaDevice> selectedDevices, @Nullable MediaDevice connectedMediaDevice, @Nullable MediaDevice connectedMediaDevice, boolean needToHandleMutingExpectedDevice, boolean needToHandleMutingExpectedDevice) { @Nullable MediaItem connectNewDeviceMediaItem) { Set<String> selectedOrConnectedMediaDeviceIds = Set<String> selectedOrConnectedMediaDeviceIds = selectedDevices.stream().map(MediaDevice::getId).collect(Collectors.toSet()); selectedDevices.stream().map(MediaDevice::getId).collect(Collectors.toSet()); if (connectedMediaDevice != null) { if (connectedMediaDevice != null) { Loading Loading @@ -177,7 +172,6 @@ public class OutputMediaItemListProxy { mSuggestedMediaItems.addAll(updatedSuggestedMediaItems); mSuggestedMediaItems.addAll(updatedSuggestedMediaItems); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.addAll(updatedSpeakersAndDisplaysMediaItems); mSpeakersAndDisplaysMediaItems.addAll(updatedSpeakersAndDisplaysMediaItems); mConnectNewDeviceMediaItem = connectNewDeviceMediaItem; // The cached mOutputMediaItemList is cleared upon any update to individual media item // The cached mOutputMediaItemList is cleared upon any update to individual media item // lists. This ensures getOutputMediaItemList() computes and caches a fresh list on the next // lists. This ensures getOutputMediaItemList() computes and caches a fresh list on the next Loading @@ -197,10 +191,6 @@ public class OutputMediaItemListProxy { mSelectedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSelectedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSuggestedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSuggestedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSpeakersAndDisplaysMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSpeakersAndDisplaysMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); if (mConnectNewDeviceMediaItem != null && mConnectNewDeviceMediaItem.isMutingExpectedDevice()) { mConnectNewDeviceMediaItem = null; } } } mOutputMediaItemList.removeIf((MediaItem::isMutingExpectedDevice)); mOutputMediaItemList.removeIf((MediaItem::isMutingExpectedDevice)); } } Loading @@ -211,7 +201,6 @@ public class OutputMediaItemListProxy { mSelectedMediaItems.clear(); mSelectedMediaItems.clear(); mSuggestedMediaItems.clear(); mSuggestedMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mConnectNewDeviceMediaItem = null; } } mOutputMediaItemList.clear(); mOutputMediaItemList.clear(); } } Loading @@ -221,8 +210,7 @@ public class OutputMediaItemListProxy { if (Flags.fixOutputMediaItemListIndexOutOfBoundsException()) { if (Flags.fixOutputMediaItemListIndexOutOfBoundsException()) { return mSelectedMediaItems.isEmpty() return mSelectedMediaItems.isEmpty() && mSuggestedMediaItems.isEmpty() && mSuggestedMediaItems.isEmpty() && mSpeakersAndDisplaysMediaItems.isEmpty() && mSpeakersAndDisplaysMediaItems.isEmpty(); && (mConnectNewDeviceMediaItem == null); } else { } else { return mOutputMediaItemList.isEmpty(); return mOutputMediaItemList.isEmpty(); } } Loading packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java +49 −7 Original line number Original line Diff line number Diff line Loading @@ -1483,6 +1483,44 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { verify(mLocalMediaManager, atLeastOnce()).connectDevice(outputMediaDevice); verify(mLocalMediaManager, atLeastOnce()).connectDevice(outputMediaDevice); } } @Test public void connectDeviceButton_remoteDevice_noButton() { when(mMediaDevice1.getFeatures()).thenReturn( ImmutableList.of(MediaRoute2Info.FEATURE_REMOTE_PLAYBACK)); when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList(); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(0); } @Test public void connectDeviceButton_localDevice_hasButton() { when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList(); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(1); assertThat(resultList.get(resultList.size() - 1).getMediaItemType()).isEqualTo( MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE); } @Test public void connectDeviceButton_localDeviceButtonDisabledByParam_noButton() { when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList( false /* addConnectDeviceButton */); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(0); } @DisableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @DisableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @Test @Test public void connectDeviceButton_presentAtAllTimesForNonGroupOutputs() { public void connectDeviceButton_presentAtAllTimesForNonGroupOutputs() { Loading @@ -1495,7 +1533,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); // Verify that there is initially one "Connect a device" button present. // Verify that there is initially one "Connect a device" button present. assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); // Change the selected device, and verify that there is still one "Connect a device" button // Change the selected device, and verify that there is still one "Connect a device" button // present. // present. Loading @@ -1504,7 +1543,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); } } @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) Loading @@ -1523,7 +1563,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { doReturn(selectedInputMediaDevice).when(mInputRouteManager).getSelectedInputDevice(); doReturn(selectedInputMediaDevice).when(mInputRouteManager).getSelectedInputDevice(); // Verify that there is initially one "Connect a device" button present. // Verify that there is initially one "Connect a device" button present. assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); // Change the selected device, and verify that there is still one "Connect a device" button // Change the selected device, and verify that there is still one "Connect a device" button // present. // present. Loading @@ -1532,7 +1573,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); } } @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) Loading Loading @@ -1633,7 +1675,7 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); mMediaSwitchingController.start(mCb); mMediaSwitchingController.start(mCb); reset(mCb); reset(mCb); mMediaSwitchingController.getMediaItemList().clear(); mMediaSwitchingController.clearMediaItemList(); } } @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) Loading Loading @@ -1691,9 +1733,9 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { assertThat(items.get(0).isFirstDeviceInGroup()).isTrue(); assertThat(items.get(0).isFirstDeviceInGroup()).isTrue(); } } private int getNumberOfConnectDeviceButtons() { private int getNumberOfConnectDeviceButtons(List<MediaItem> itemList) { int numberOfConnectDeviceButtons = 0; int numberOfConnectDeviceButtons = 0; for (MediaItem item : mMediaSwitchingController.getMediaItemList()) { for (MediaItem item : itemList) { if (item.getMediaItemType() == MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE) { if (item.getMediaItemType() == MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE) { numberOfConnectDeviceButtons++; numberOfConnectDeviceButtons++; } } Loading packages/SystemUI/tests/src/com/android/systemui/media/dialog/OutputMediaItemListProxyTest.java +8 −59 Original line number Original line Diff line number Diff line Loading @@ -58,7 +58,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { private MediaItem mMediaItem1; private MediaItem mMediaItem1; private MediaItem mMediaItem2; private MediaItem mMediaItem2; private MediaItem mConnectNewDeviceMediaItem; private OutputMediaItemListProxy mOutputMediaItemListProxy; private OutputMediaItemListProxy mOutputMediaItemListProxy; @Parameters(name = "{0}") @Parameters(name = "{0}") Loading @@ -83,7 +82,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { when(mMediaDevice4.getId()).thenReturn(DEVICE_ID_4); when(mMediaDevice4.getId()).thenReturn(DEVICE_ID_4); mMediaItem1 = MediaItem.createDeviceMediaItem(mMediaDevice1); mMediaItem1 = MediaItem.createDeviceMediaItem(mMediaDevice1); mMediaItem2 = MediaItem.createDeviceMediaItem(mMediaDevice2); mMediaItem2 = MediaItem.createDeviceMediaItem(mMediaDevice2); mConnectNewDeviceMediaItem = MediaItem.createPairNewDeviceMediaItem(); mOutputMediaItemListProxy = new OutputMediaItemListProxy(mContext); mOutputMediaItemListProxy = new OutputMediaItemListProxy(mContext); } } Loading @@ -98,8 +96,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a media item with the selected mMediaDevice3 Loading @@ -115,8 +112,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected route mMediaDevice3 // * a media item with the selected route mMediaDevice3 Loading @@ -136,8 +132,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected route mMediaDevice3 // * a media item with the selected route mMediaDevice3 Loading @@ -161,8 +156,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice2, mMediaDevice4, mMediaDevice3, mMediaDevice1), /* devices= */ List.of(mMediaDevice2, mMediaDevice4, mMediaDevice3, mMediaDevice1), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice2, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading Loading @@ -197,8 +191,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice2, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading Loading @@ -233,8 +226,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice4), /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice4), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading @@ -261,47 +253,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { } } } } @EnableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @Test public void updateMediaDevices_withConnectNewDeviceMediaItem_shouldUpdateMediaItemList() { assertThat(mOutputMediaItemListProxy.isEmpty()).isTrue(); // Create the initial output media item list with a connect new device media item. mOutputMediaItemListProxy.updateMediaDevices( /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, mConnectNewDeviceMediaItem); // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a group divider for suggested devices // * a media item with the mMediaDevice2 // * a connect new device media item assertThat(mOutputMediaItemListProxy.getOutputMediaItemList()) .contains(mConnectNewDeviceMediaItem); assertThat(getMediaDevices(mOutputMediaItemListProxy.getOutputMediaItemList())) .containsExactly(mMediaDevice3, null, mMediaDevice2, null); // Update the output media item list without a connect new device media item. mOutputMediaItemListProxy.updateMediaDevices( /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a group divider for suggested devices // * a media item with the mMediaDevice2 assertThat(mOutputMediaItemListProxy.getOutputMediaItemList()) .doesNotContain(mConnectNewDeviceMediaItem); assertThat(getMediaDevices(mOutputMediaItemListProxy.getOutputMediaItemList())) .containsExactly(mMediaDevice3, null, mMediaDevice2); } @DisableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @DisableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @Test @Test public void clearAndAddAll_shouldUpdateMediaItemList() { public void clearAndAddAll_shouldUpdateMediaItemList() { Loading @@ -325,8 +276,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1), /* devices= */ List.of(mMediaDevice1), /* selectedDevices */ List.of(), /* selectedDevices */ List.of(), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); mOutputMediaItemListProxy.clear(); mOutputMediaItemListProxy.clear(); Loading Loading @@ -354,8 +304,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1), /* devices= */ List.of(mMediaDevice1), /* selectedDevices */ List.of(), /* selectedDevices */ List.of(), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); mOutputMediaItemListProxy.removeMutingExpectedDevices(); mOutputMediaItemListProxy.removeMutingExpectedDevices(); Loading Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java +26 −8 Original line number Original line Diff line number Diff line Loading @@ -609,8 +609,7 @@ public class MediaSwitchingController devices, devices, getSelectedMediaDevice(), getSelectedMediaDevice(), connectedMediaDevice, connectedMediaDevice, needToHandleMutingExpectedDevice, needToHandleMutingExpectedDevice); getConnectNewDeviceItem()); } else { } else { List<MediaItem> updatedMediaItems = List<MediaItem> updatedMediaItems = buildMediaItems( buildMediaItems( Loading Loading @@ -701,7 +700,6 @@ public class MediaSwitchingController } } } } dividerItems.forEach(finalMediaItems::add); dividerItems.forEach(finalMediaItems::add); attachConnectNewDeviceItemIfNeeded(finalMediaItems); return finalMediaItems; return finalMediaItems; } } } } Loading Loading @@ -765,7 +763,6 @@ public class MediaSwitchingController finalMediaItems.add(MediaItem.createDeviceMediaItem(device)); finalMediaItems.add(MediaItem.createDeviceMediaItem(device)); } } } } attachConnectNewDeviceItemIfNeeded(finalMediaItems); return finalMediaItems; return finalMediaItems; } } Loading Loading @@ -879,6 +876,15 @@ public class MediaSwitchingController }); }); } } private List<MediaItem> getOutputDeviceList(boolean addConnectDeviceButton) { List<MediaItem> mediaItems = new ArrayList<>( mOutputMediaItemListProxy.getOutputMediaItemList()); if (addConnectDeviceButton) { attachConnectNewDeviceItemIfNeeded(mediaItems); } return mediaItems; } private void addInputDevices(List<MediaItem> mediaItems) { private void addInputDevices(List<MediaItem> mediaItems) { mediaItems.add( mediaItems.add( MediaItem.createGroupDividerMediaItem( MediaItem.createGroupDividerMediaItem( Loading @@ -886,22 +892,34 @@ public class MediaSwitchingController mediaItems.addAll(mInputMediaItemList); mediaItems.addAll(mInputMediaItemList); } } private void addOutputDevices(List<MediaItem> mediaItems) { private void addOutputDevices(List<MediaItem> mediaItems, boolean addConnectDeviceButton) { mediaItems.add( mediaItems.add( MediaItem.createGroupDividerMediaItem( MediaItem.createGroupDividerMediaItem( mContext.getString(R.string.media_output_group_title))); mContext.getString(R.string.media_output_group_title))); mediaItems.addAll(mOutputMediaItemListProxy.getOutputMediaItemList()); mediaItems.addAll(getOutputDeviceList(addConnectDeviceButton)); } } /** * Returns a list of media items to be rendered in the device list. For backward compatibility * reasons, adds a "Connect a device" button by default. */ public List<MediaItem> getMediaItemList() { public List<MediaItem> getMediaItemList() { return getMediaItemList(true /* addConnectDeviceButton */); } /** * Returns a list of media items to be rendered in the device list. * @param addConnectDeviceButton Whether to add a "Connect a device" button to the list. */ public List<MediaItem> getMediaItemList(boolean addConnectDeviceButton) { // If input routing is not enabled, only return output media items. // If input routing is not enabled, only return output media items. if (!enableInputRouting()) { if (!enableInputRouting()) { return mOutputMediaItemListProxy.getOutputMediaItemList(); return getOutputDeviceList(addConnectDeviceButton); } } // If input routing is enabled, return both output and input media items. // If input routing is enabled, return both output and input media items. List<MediaItem> mediaItems = new ArrayList<>(); List<MediaItem> mediaItems = new ArrayList<>(); addOutputDevices(mediaItems); addOutputDevices(mediaItems, addConnectDeviceButton); addInputDevices(mediaItems); addInputDevices(mediaItems); return mediaItems; return mediaItems; } } Loading
packages/SystemUI/src/com/android/systemui/media/dialog/OutputMediaItemListProxy.java +2 −14 Original line number Original line Diff line number Diff line Loading @@ -44,7 +44,6 @@ public class OutputMediaItemListProxy { private final List<MediaItem> mSelectedMediaItems; private final List<MediaItem> mSelectedMediaItems; private final List<MediaItem> mSuggestedMediaItems; private final List<MediaItem> mSuggestedMediaItems; private final List<MediaItem> mSpeakersAndDisplaysMediaItems; private final List<MediaItem> mSpeakersAndDisplaysMediaItems; @Nullable private MediaItem mConnectNewDeviceMediaItem; public OutputMediaItemListProxy(Context context) { public OutputMediaItemListProxy(Context context) { mContext = context; mContext = context; Loading Loading @@ -88,9 +87,6 @@ public class OutputMediaItemListProxy { R.string.media_output_group_title_speakers_and_displays))); R.string.media_output_group_title_speakers_and_displays))); finalMediaItems.addAll(mSpeakersAndDisplaysMediaItems); finalMediaItems.addAll(mSpeakersAndDisplaysMediaItems); } } if (mConnectNewDeviceMediaItem != null) { finalMediaItems.add(mConnectNewDeviceMediaItem); } return finalMediaItems; return finalMediaItems; } } Loading @@ -99,8 +95,7 @@ public class OutputMediaItemListProxy { List<MediaDevice> devices, List<MediaDevice> devices, List<MediaDevice> selectedDevices, List<MediaDevice> selectedDevices, @Nullable MediaDevice connectedMediaDevice, @Nullable MediaDevice connectedMediaDevice, boolean needToHandleMutingExpectedDevice, boolean needToHandleMutingExpectedDevice) { @Nullable MediaItem connectNewDeviceMediaItem) { Set<String> selectedOrConnectedMediaDeviceIds = Set<String> selectedOrConnectedMediaDeviceIds = selectedDevices.stream().map(MediaDevice::getId).collect(Collectors.toSet()); selectedDevices.stream().map(MediaDevice::getId).collect(Collectors.toSet()); if (connectedMediaDevice != null) { if (connectedMediaDevice != null) { Loading Loading @@ -177,7 +172,6 @@ public class OutputMediaItemListProxy { mSuggestedMediaItems.addAll(updatedSuggestedMediaItems); mSuggestedMediaItems.addAll(updatedSuggestedMediaItems); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.addAll(updatedSpeakersAndDisplaysMediaItems); mSpeakersAndDisplaysMediaItems.addAll(updatedSpeakersAndDisplaysMediaItems); mConnectNewDeviceMediaItem = connectNewDeviceMediaItem; // The cached mOutputMediaItemList is cleared upon any update to individual media item // The cached mOutputMediaItemList is cleared upon any update to individual media item // lists. This ensures getOutputMediaItemList() computes and caches a fresh list on the next // lists. This ensures getOutputMediaItemList() computes and caches a fresh list on the next Loading @@ -197,10 +191,6 @@ public class OutputMediaItemListProxy { mSelectedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSelectedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSuggestedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSuggestedMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSpeakersAndDisplaysMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); mSpeakersAndDisplaysMediaItems.removeIf((MediaItem::isMutingExpectedDevice)); if (mConnectNewDeviceMediaItem != null && mConnectNewDeviceMediaItem.isMutingExpectedDevice()) { mConnectNewDeviceMediaItem = null; } } } mOutputMediaItemList.removeIf((MediaItem::isMutingExpectedDevice)); mOutputMediaItemList.removeIf((MediaItem::isMutingExpectedDevice)); } } Loading @@ -211,7 +201,6 @@ public class OutputMediaItemListProxy { mSelectedMediaItems.clear(); mSelectedMediaItems.clear(); mSuggestedMediaItems.clear(); mSuggestedMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mSpeakersAndDisplaysMediaItems.clear(); mConnectNewDeviceMediaItem = null; } } mOutputMediaItemList.clear(); mOutputMediaItemList.clear(); } } Loading @@ -221,8 +210,7 @@ public class OutputMediaItemListProxy { if (Flags.fixOutputMediaItemListIndexOutOfBoundsException()) { if (Flags.fixOutputMediaItemListIndexOutOfBoundsException()) { return mSelectedMediaItems.isEmpty() return mSelectedMediaItems.isEmpty() && mSuggestedMediaItems.isEmpty() && mSuggestedMediaItems.isEmpty() && mSpeakersAndDisplaysMediaItems.isEmpty() && mSpeakersAndDisplaysMediaItems.isEmpty(); && (mConnectNewDeviceMediaItem == null); } else { } else { return mOutputMediaItemList.isEmpty(); return mOutputMediaItemList.isEmpty(); } } Loading
packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaSwitchingControllerTest.java +49 −7 Original line number Original line Diff line number Diff line Loading @@ -1483,6 +1483,44 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { verify(mLocalMediaManager, atLeastOnce()).connectDevice(outputMediaDevice); verify(mLocalMediaManager, atLeastOnce()).connectDevice(outputMediaDevice); } } @Test public void connectDeviceButton_remoteDevice_noButton() { when(mMediaDevice1.getFeatures()).thenReturn( ImmutableList.of(MediaRoute2Info.FEATURE_REMOTE_PLAYBACK)); when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList(); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(0); } @Test public void connectDeviceButton_localDevice_hasButton() { when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList(); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(1); assertThat(resultList.get(resultList.size() - 1).getMediaItemType()).isEqualTo( MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE); } @Test public void connectDeviceButton_localDeviceButtonDisabledByParam_noButton() { when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); mMediaSwitchingController.start(mCb); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); List<MediaItem> resultList = mMediaSwitchingController.getMediaItemList( false /* addConnectDeviceButton */); assertThat(getNumberOfConnectDeviceButtons(resultList)).isEqualTo(0); } @DisableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @DisableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @Test @Test public void connectDeviceButton_presentAtAllTimesForNonGroupOutputs() { public void connectDeviceButton_presentAtAllTimesForNonGroupOutputs() { Loading @@ -1495,7 +1533,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); // Verify that there is initially one "Connect a device" button present. // Verify that there is initially one "Connect a device" button present. assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); // Change the selected device, and verify that there is still one "Connect a device" button // Change the selected device, and verify that there is still one "Connect a device" button // present. // present. Loading @@ -1504,7 +1543,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); } } @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) @EnableFlags(Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL) Loading @@ -1523,7 +1563,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { doReturn(selectedInputMediaDevice).when(mInputRouteManager).getSelectedInputDevice(); doReturn(selectedInputMediaDevice).when(mInputRouteManager).getSelectedInputDevice(); // Verify that there is initially one "Connect a device" button present. // Verify that there is initially one "Connect a device" button present. assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); // Change the selected device, and verify that there is still one "Connect a device" button // Change the selected device, and verify that there is still one "Connect a device" button // present. // present. Loading @@ -1532,7 +1573,8 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { .getSelectedMediaDevice(); .getSelectedMediaDevice(); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); mMediaSwitchingController.onDeviceListUpdate(mMediaDevices); assertThat(getNumberOfConnectDeviceButtons()).isEqualTo(1); assertThat(getNumberOfConnectDeviceButtons( mMediaSwitchingController.getMediaItemList())).isEqualTo(1); } } @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) @EnableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) Loading Loading @@ -1633,7 +1675,7 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); when(mLocalMediaManager.isPreferenceRouteListingExist()).thenReturn(false); mMediaSwitchingController.start(mCb); mMediaSwitchingController.start(mCb); reset(mCb); reset(mCb); mMediaSwitchingController.getMediaItemList().clear(); mMediaSwitchingController.clearMediaItemList(); } } @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING) Loading Loading @@ -1691,9 +1733,9 @@ public class MediaSwitchingControllerTest extends SysuiTestCase { assertThat(items.get(0).isFirstDeviceInGroup()).isTrue(); assertThat(items.get(0).isFirstDeviceInGroup()).isTrue(); } } private int getNumberOfConnectDeviceButtons() { private int getNumberOfConnectDeviceButtons(List<MediaItem> itemList) { int numberOfConnectDeviceButtons = 0; int numberOfConnectDeviceButtons = 0; for (MediaItem item : mMediaSwitchingController.getMediaItemList()) { for (MediaItem item : itemList) { if (item.getMediaItemType() == MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE) { if (item.getMediaItemType() == MediaItem.MediaItemType.TYPE_PAIR_NEW_DEVICE) { numberOfConnectDeviceButtons++; numberOfConnectDeviceButtons++; } } Loading
packages/SystemUI/tests/src/com/android/systemui/media/dialog/OutputMediaItemListProxyTest.java +8 −59 Original line number Original line Diff line number Diff line Loading @@ -58,7 +58,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { private MediaItem mMediaItem1; private MediaItem mMediaItem1; private MediaItem mMediaItem2; private MediaItem mMediaItem2; private MediaItem mConnectNewDeviceMediaItem; private OutputMediaItemListProxy mOutputMediaItemListProxy; private OutputMediaItemListProxy mOutputMediaItemListProxy; @Parameters(name = "{0}") @Parameters(name = "{0}") Loading @@ -83,7 +82,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { when(mMediaDevice4.getId()).thenReturn(DEVICE_ID_4); when(mMediaDevice4.getId()).thenReturn(DEVICE_ID_4); mMediaItem1 = MediaItem.createDeviceMediaItem(mMediaDevice1); mMediaItem1 = MediaItem.createDeviceMediaItem(mMediaDevice1); mMediaItem2 = MediaItem.createDeviceMediaItem(mMediaDevice2); mMediaItem2 = MediaItem.createDeviceMediaItem(mMediaDevice2); mConnectNewDeviceMediaItem = MediaItem.createPairNewDeviceMediaItem(); mOutputMediaItemListProxy = new OutputMediaItemListProxy(mContext); mOutputMediaItemListProxy = new OutputMediaItemListProxy(mContext); } } Loading @@ -98,8 +96,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a media item with the selected mMediaDevice3 Loading @@ -115,8 +112,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected route mMediaDevice3 // * a media item with the selected route mMediaDevice3 Loading @@ -136,8 +132,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // Check the output media items to be // * a media item with the selected route mMediaDevice3 // * a media item with the selected route mMediaDevice3 Loading @@ -161,8 +156,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice2, mMediaDevice4, mMediaDevice3, mMediaDevice1), /* devices= */ List.of(mMediaDevice2, mMediaDevice4, mMediaDevice3, mMediaDevice1), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice1, mMediaDevice2, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading Loading @@ -197,8 +191,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* devices= */ List.of(mMediaDevice4, mMediaDevice1, mMediaDevice3, mMediaDevice2), /* selectedDevices */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice2, mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading Loading @@ -233,8 +226,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice4), /* devices= */ List.of(mMediaDevice1, mMediaDevice3, mMediaDevice4), /* selectedDevices */ List.of(mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); if (Flags.enableOutputSwitcherDeviceGrouping()) { if (Flags.enableOutputSwitcherDeviceGrouping()) { // When the device grouping is enabled, the order of selected devices are preserved: // When the device grouping is enabled, the order of selected devices are preserved: Loading @@ -261,47 +253,6 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { } } } } @EnableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @Test public void updateMediaDevices_withConnectNewDeviceMediaItem_shouldUpdateMediaItemList() { assertThat(mOutputMediaItemListProxy.isEmpty()).isTrue(); // Create the initial output media item list with a connect new device media item. mOutputMediaItemListProxy.updateMediaDevices( /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, mConnectNewDeviceMediaItem); // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a group divider for suggested devices // * a media item with the mMediaDevice2 // * a connect new device media item assertThat(mOutputMediaItemListProxy.getOutputMediaItemList()) .contains(mConnectNewDeviceMediaItem); assertThat(getMediaDevices(mOutputMediaItemListProxy.getOutputMediaItemList())) .containsExactly(mMediaDevice3, null, mMediaDevice2, null); // Update the output media item list without a connect new device media item. mOutputMediaItemListProxy.updateMediaDevices( /* devices= */ List.of(mMediaDevice2, mMediaDevice3), /* selectedDevices */ List.of(mMediaDevice3), /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* connectNewDeviceMediaItem= */ null); // Check the output media items to be // * a media item with the selected mMediaDevice3 // * a group divider for suggested devices // * a media item with the mMediaDevice2 assertThat(mOutputMediaItemListProxy.getOutputMediaItemList()) .doesNotContain(mConnectNewDeviceMediaItem); assertThat(getMediaDevices(mOutputMediaItemListProxy.getOutputMediaItemList())) .containsExactly(mMediaDevice3, null, mMediaDevice2); } @DisableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @DisableFlags(Flags.FLAG_FIX_OUTPUT_MEDIA_ITEM_LIST_INDEX_OUT_OF_BOUNDS_EXCEPTION) @Test @Test public void clearAndAddAll_shouldUpdateMediaItemList() { public void clearAndAddAll_shouldUpdateMediaItemList() { Loading @@ -325,8 +276,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1), /* devices= */ List.of(mMediaDevice1), /* selectedDevices */ List.of(), /* selectedDevices */ List.of(), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); mOutputMediaItemListProxy.clear(); mOutputMediaItemListProxy.clear(); Loading Loading @@ -354,8 +304,7 @@ public class OutputMediaItemListProxyTest extends SysuiTestCase { /* devices= */ List.of(mMediaDevice1), /* devices= */ List.of(mMediaDevice1), /* selectedDevices */ List.of(), /* selectedDevices */ List.of(), /* connectedMediaDevice= */ null, /* connectedMediaDevice= */ null, /* needToHandleMutingExpectedDevice= */ false, /* needToHandleMutingExpectedDevice= */ false); /* connectNewDeviceMediaItem= */ null); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); assertThat(mOutputMediaItemListProxy.isEmpty()).isFalse(); mOutputMediaItemListProxy.removeMutingExpectedDevices(); mOutputMediaItemListProxy.removeMutingExpectedDevices(); Loading