From 6444762e6d9e44bc3739124df1e9e971262ba9f4 Mon Sep 17 00:00:00 2001 From: shaoweishen Date: Mon, 19 Sep 2022 10:21:29 +0000 Subject: [PATCH] [Output Switcher] Dismiss dialog when play state change to STOP Dismiss Dialog only when Play state change to STOP. Dynamically update deivces list height. Bug: 246958375 Test: Verified on device Change-Id: I1c5793f012e8a541994cdbb0bf33a3f3ff23309a --- packages/SystemUI/res/values/dimens.xml | 1 + .../media/dialog/MediaOutputBaseDialog.java | 13 ++++++++++--- .../media/dialog/MediaOutputController.java | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index eb6c457479245..a15d17ae6bd4f 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;