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;