diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java | 11 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java | 24 |
2 files changed, 33 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index 9ebc8e410013..53daffc7859d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -713,7 +713,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, dividerItems.forEach((key, item) -> { finalMediaItems.add(key, item); }); - finalMediaItems.add(new MediaItem()); + attachConnectNewDeviceItemIfNeeded(finalMediaItems); mMediaItemList.clear(); mMediaItemList.addAll(finalMediaItems); } @@ -749,7 +749,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, finalMediaItems.add(new MediaItem(device)); } } - finalMediaItems.add(new MediaItem()); + attachConnectNewDeviceItemIfNeeded(finalMediaItems); mMediaItemList.clear(); mMediaItemList.addAll(finalMediaItems); } @@ -760,6 +760,13 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback, new MediaItem(title, MediaItem.MediaItemType.TYPE_GROUP_DIVIDER)); } + private void attachConnectNewDeviceItemIfNeeded(List<MediaItem> mediaItems) { + // Attach "Connect a device" item only when current output is not remote and not a group + if (!isCurrentConnectedDeviceRemote() && getSelectedMediaDevice().size() == 1) { + mediaItems.add(new MediaItem()); + } + } + private void attachRangeInfo(List<MediaDevice> devices) { for (MediaDevice mediaDevice : devices) { if (mNearbyDeviceInfoMap.containsKey(mediaDevice.getId())) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java index 0bdcaf464cfd..de0c6a701ef3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java @@ -342,6 +342,30 @@ public class MediaOutputControllerTest extends SysuiTestCase { } @Test + public void advanced_onDeviceListUpdateWithConnectedDeviceRemote_verifyItemSize() { + when(mFlags.isEnabled(Flags.OUTPUT_SWITCHER_ADVANCED_LAYOUT)).thenReturn(true); + when(mMediaDevice1.getFeatures()).thenReturn( + ImmutableList.of(MediaRoute2Info.FEATURE_REMOTE_PLAYBACK)); + when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice1); + mMediaOutputController.start(mCb); + reset(mCb); + + mMediaOutputController.onDeviceListUpdate(mMediaDevices); + final List<MediaDevice> devices = new ArrayList<>(); + for (MediaItem item : mMediaOutputController.getMediaItemList()) { + if (item.getMediaDevice().isPresent()) { + devices.add(item.getMediaDevice().get()); + } + } + + assertThat(devices.containsAll(mMediaDevices)).isTrue(); + assertThat(devices.size()).isEqualTo(mMediaDevices.size()); + assertThat(mMediaOutputController.getMediaItemList().size()).isEqualTo( + mMediaDevices.size() + 1); + verify(mCb).onDeviceListChanged(); + } + + @Test public void advanced_categorizeMediaItems_withSuggestedDevice_verifyDeviceListSize() { when(mFlags.isEnabled(Flags.OUTPUT_SWITCHER_ADVANCED_LAYOUT)).thenReturn(true); when(mMediaDevice1.isSuggestedDevice()).thenReturn(true); |