diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index e09a6ee91fc64..0e2357611b539 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1174,6 +1174,7 @@
355dp
+ 76dp
72dp
32dp
16dp
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
index 85d8f3fdd20a7..a9e1a4d325d2d 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
@@ -99,6 +99,7 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
private Button mStopButton;
private Button mAppButton;
private int mListMaxHeight;
+ private int mItemHeight;
private WallpaperColors mWallpaperColors;
private Executor mExecutor;
private boolean mShouldLaunchLeBroadcastDialog;
@@ -106,10 +107,12 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
MediaOutputBaseAdapter mAdapter;
private final ViewTreeObserver.OnGlobalLayoutListener mDeviceListLayoutListener = () -> {
+ ViewGroup.LayoutParams params = mDeviceListLayout.getLayoutParams();
+ int totalItemsHeight = mAdapter.getItemCount() * mItemHeight;
+ int correctHeight = Math.min(totalItemsHeight, mListMaxHeight);
// Set max height for list
- if (mDeviceListLayout.getHeight() > mListMaxHeight) {
- ViewGroup.LayoutParams params = mDeviceListLayout.getLayoutParams();
- params.height = mListMaxHeight;
+ if (correctHeight != params.height) {
+ params.height = correctHeight;
mDeviceListLayout.setLayoutParams(params);
}
};
@@ -212,6 +215,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
mLayoutManager = new LayoutManagerWrapper(mContext);
mListMaxHeight = context.getResources().getDimensionPixelSize(
R.dimen.media_output_dialog_list_max_height);
+ mItemHeight = context.getResources().getDimensionPixelSize(
+ R.dimen.media_output_dialog_list_item_height);
mExecutor = Executors.newSingleThreadExecutor();
}
@@ -246,8 +251,10 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
mDeviceListLayout.getViewTreeObserver().addOnGlobalLayoutListener(
mDeviceListLayoutListener);
// Init device list
+ mLayoutManager.setAutoMeasureEnabled(true);
mDevicesRecyclerView.setLayoutManager(mLayoutManager);
mDevicesRecyclerView.setAdapter(mAdapter);
+ mDevicesRecyclerView.setHasFixedSize(false);
// Init header icon
mHeaderIcon.setOnClickListener(v -> onHeaderIconClick());
// Init bottom buttons
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 7b4ac1214a7cb..a736600c2a599 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -1013,7 +1013,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback,
return;
}
- if (newState == PlaybackState.STATE_STOPPED || newState == PlaybackState.STATE_PAUSED) {
+ if (newState == PlaybackState.STATE_STOPPED) {
mCallback.onMediaStoppedOrPaused();
}
mCurrentState = newState;