Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +17 −8 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.settingslib.media.MediaDevice; import com.android.systemui.R; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * Adapter for media output dialog. Loading @@ -53,12 +54,20 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final float DEVICE_DISCONNECTED_ALPHA = 0.5f; private static final float DEVICE_CONNECTED_ALPHA = 1f; protected List<MediaItem> mMediaItemList = new CopyOnWriteArrayList<>(); public MediaOutputAdapter(MediaOutputController controller) { super(controller); setHasStableIds(true); } @Override public void updateItems() { mMediaItemList.clear(); mMediaItemList.addAll(mController.getMediaItemList()); notifyDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { Loading @@ -80,14 +89,14 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { if (mController.isAdvancedLayoutSupported()) { if (position >= mController.getMediaItemList().size()) { if (position >= mMediaItemList.size()) { if (DEBUG) { Log.d(TAG, "Incorrect position: " + position + " list size: " + mController.getMediaItemList().size()); + mMediaItemList.size()); } return; } MediaItem currentMediaItem = mController.getMediaItemList().get(position); MediaItem currentMediaItem = mMediaItemList.get(position); switch (currentMediaItem.getMediaItemType()) { case MediaItem.MediaItemType.TYPE_GROUP_DIVIDER: ((MediaGroupDividerViewHolder) viewHolder).onBind(currentMediaItem.getTitle()); Loading Loading @@ -120,11 +129,11 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public long getItemId(int position) { if (mController.isAdvancedLayoutSupported()) { if (position >= mController.getMediaItemList().size()) { if (position >= mMediaItemList.size()) { Log.d(TAG, "Incorrect position for item id: " + position); return position; } MediaItem currentMediaItem = mController.getMediaItemList().get(position); MediaItem currentMediaItem = mMediaItemList.get(position); return currentMediaItem.getMediaDevice().isPresent() ? currentMediaItem.getMediaDevice().get().getId().hashCode() : position; Loading @@ -144,12 +153,12 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public int getItemViewType(int position) { if (mController.isAdvancedLayoutSupported() && position >= mController.getMediaItemList().size()) { && position >= mMediaItemList.size()) { Log.d(TAG, "Incorrect position for item type: " + position); return MediaItem.MediaItemType.TYPE_GROUP_DIVIDER; } return mController.isAdvancedLayoutSupported() ? mController.getMediaItemList().get(position).getMediaItemType() ? mMediaItemList.get(position).getMediaItemType() : super.getItemViewType(position); } Loading @@ -157,7 +166,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { public int getItemCount() { // Add extra one for "pair new" return mController.isAdvancedLayoutSupported() ? mController.getMediaItemList().size() ? mMediaItemList.size() : mController.getMediaDevices().size() + 1; } Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,11 @@ public abstract class MediaOutputBaseAdapter extends mIsInitVolumeFirstTime = true; } /** * Refresh current dataset */ public abstract void updateItems(); @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +1 −1 Original line number Diff line number Diff line Loading @@ -382,7 +382,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements && currentActivePosition < mAdapter.getItemCount()) { mAdapter.notifyItemChanged(currentActivePosition); } else { mAdapter.notifyDataSetChanged(); mAdapter.updateItems(); } } else { mMediaOutputController.setRefreshing(false); Loading packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { mMediaItems.add(new MediaItem(mMediaDevice2)); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mSpyMediaOutputSeekbar = spy(mViewHolder.mSeekBar); Loading Loading @@ -205,9 +206,11 @@ public class MediaOutputAdapterTest extends SysuiTestCase { public void advanced_onBindViewHolder_bindPairNew_verifyView() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaItems.add(new MediaItem()); mMediaOutputAdapter.updateItems(); mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2); assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE); Loading @@ -226,6 +229,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { Collectors.toList())); when(mMediaOutputController.getSessionName()).thenReturn(TEST_SESSION_NAME); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaOutputAdapter.getItemCount(); Loading @@ -246,6 +250,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { Collectors.toList())); when(mMediaOutputController.getSessionName()).thenReturn(null); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaOutputAdapter.getItemCount(); Loading Loading @@ -605,9 +610,11 @@ public class MediaOutputAdapterTest extends SysuiTestCase { public void advanced_onItemClick_clickPairNew_verifyLaunchBluetoothPairing() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaItems.add(new MediaItem()); mMediaOutputAdapter.updateItems(); mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2); mViewHolder.mContainerLayout.performClick(); Loading Loading @@ -719,6 +726,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { mMediaItems.stream().map((item) -> item.getMediaDevice().get()).collect( Collectors.toList())); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); List<MediaDevice> selectableDevices = new ArrayList<>(); Loading Loading @@ -753,4 +761,18 @@ public class MediaOutputAdapterTest extends SysuiTestCase { verify(mMediaOutputController).setCurrentColorScheme(wallpaperColors, true); } @Test public void updateItems_controllerItemsUpdated_notUpdatesInAdapterUntilUpdateItems() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter.updateItems(); List<MediaItem> updatedList = new ArrayList<>(); updatedList.add(new MediaItem()); when(mMediaOutputController.getMediaItemList()).thenReturn(updatedList); assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaItems.size()); mMediaOutputAdapter.updateItems(); assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(updatedList.size()); } } packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -239,7 +239,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { when(mMediaOutputBaseAdapter.isDragging()).thenReturn(false); mMediaOutputBaseDialogImpl.refresh(); verify(mMediaOutputBaseAdapter).notifyDataSetChanged(); verify(mMediaOutputBaseAdapter).updateItems(); } @Test Loading Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +17 −8 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.settingslib.media.MediaDevice; import com.android.systemui.R; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * Adapter for media output dialog. Loading @@ -53,12 +54,20 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final float DEVICE_DISCONNECTED_ALPHA = 0.5f; private static final float DEVICE_CONNECTED_ALPHA = 1f; protected List<MediaItem> mMediaItemList = new CopyOnWriteArrayList<>(); public MediaOutputAdapter(MediaOutputController controller) { super(controller); setHasStableIds(true); } @Override public void updateItems() { mMediaItemList.clear(); mMediaItemList.addAll(mController.getMediaItemList()); notifyDataSetChanged(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { Loading @@ -80,14 +89,14 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { if (mController.isAdvancedLayoutSupported()) { if (position >= mController.getMediaItemList().size()) { if (position >= mMediaItemList.size()) { if (DEBUG) { Log.d(TAG, "Incorrect position: " + position + " list size: " + mController.getMediaItemList().size()); + mMediaItemList.size()); } return; } MediaItem currentMediaItem = mController.getMediaItemList().get(position); MediaItem currentMediaItem = mMediaItemList.get(position); switch (currentMediaItem.getMediaItemType()) { case MediaItem.MediaItemType.TYPE_GROUP_DIVIDER: ((MediaGroupDividerViewHolder) viewHolder).onBind(currentMediaItem.getTitle()); Loading Loading @@ -120,11 +129,11 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public long getItemId(int position) { if (mController.isAdvancedLayoutSupported()) { if (position >= mController.getMediaItemList().size()) { if (position >= mMediaItemList.size()) { Log.d(TAG, "Incorrect position for item id: " + position); return position; } MediaItem currentMediaItem = mController.getMediaItemList().get(position); MediaItem currentMediaItem = mMediaItemList.get(position); return currentMediaItem.getMediaDevice().isPresent() ? currentMediaItem.getMediaDevice().get().getId().hashCode() : position; Loading @@ -144,12 +153,12 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { @Override public int getItemViewType(int position) { if (mController.isAdvancedLayoutSupported() && position >= mController.getMediaItemList().size()) { && position >= mMediaItemList.size()) { Log.d(TAG, "Incorrect position for item type: " + position); return MediaItem.MediaItemType.TYPE_GROUP_DIVIDER; } return mController.isAdvancedLayoutSupported() ? mController.getMediaItemList().get(position).getMediaItemType() ? mMediaItemList.get(position).getMediaItemType() : super.getItemViewType(position); } Loading @@ -157,7 +166,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { public int getItemCount() { // Add extra one for "pair new" return mController.isAdvancedLayoutSupported() ? mController.getMediaItemList().size() ? mMediaItemList.size() : mController.getMediaDevices().size() + 1; } Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +5 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,11 @@ public abstract class MediaOutputBaseAdapter extends mIsInitVolumeFirstTime = true; } /** * Refresh current dataset */ public abstract void updateItems(); @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +1 −1 Original line number Diff line number Diff line Loading @@ -382,7 +382,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements && currentActivePosition < mAdapter.getItemCount()) { mAdapter.notifyItemChanged(currentActivePosition); } else { mAdapter.notifyDataSetChanged(); mAdapter.updateItems(); } } else { mMediaOutputController.setRefreshing(false); Loading
packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { mMediaItems.add(new MediaItem(mMediaDevice2)); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mSpyMediaOutputSeekbar = spy(mViewHolder.mSeekBar); Loading Loading @@ -205,9 +206,11 @@ public class MediaOutputAdapterTest extends SysuiTestCase { public void advanced_onBindViewHolder_bindPairNew_verifyView() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaItems.add(new MediaItem()); mMediaOutputAdapter.updateItems(); mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2); assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE); Loading @@ -226,6 +229,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { Collectors.toList())); when(mMediaOutputController.getSessionName()).thenReturn(TEST_SESSION_NAME); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaOutputAdapter.getItemCount(); Loading @@ -246,6 +250,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { Collectors.toList())); when(mMediaOutputController.getSessionName()).thenReturn(null); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaOutputAdapter.getItemCount(); Loading Loading @@ -605,9 +610,11 @@ public class MediaOutputAdapterTest extends SysuiTestCase { public void advanced_onItemClick_clickPairNew_verifyLaunchBluetoothPairing() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); mMediaItems.add(new MediaItem()); mMediaOutputAdapter.updateItems(); mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2); mViewHolder.mContainerLayout.performClick(); Loading Loading @@ -719,6 +726,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { mMediaItems.stream().map((item) -> item.getMediaDevice().get()).collect( Collectors.toList())); mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController); mMediaOutputAdapter.updateItems(); mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter .onCreateViewHolder(new LinearLayout(mContext), 0); List<MediaDevice> selectableDevices = new ArrayList<>(); Loading Loading @@ -753,4 +761,18 @@ public class MediaOutputAdapterTest extends SysuiTestCase { verify(mMediaOutputController).setCurrentColorScheme(wallpaperColors, true); } @Test public void updateItems_controllerItemsUpdated_notUpdatesInAdapterUntilUpdateItems() { when(mMediaOutputController.isAdvancedLayoutSupported()).thenReturn(true); mMediaOutputAdapter.updateItems(); List<MediaItem> updatedList = new ArrayList<>(); updatedList.add(new MediaItem()); when(mMediaOutputController.getMediaItemList()).thenReturn(updatedList); assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaItems.size()); mMediaOutputAdapter.updateItems(); assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(updatedList.size()); } }
packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -239,7 +239,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { when(mMediaOutputBaseAdapter.isDragging()).thenReturn(false); mMediaOutputBaseDialogImpl.refresh(); verify(mMediaOutputBaseAdapter).notifyDataSetChanged(); verify(mMediaOutputBaseAdapter).updateItems(); } @Test Loading