From 5a2d70e1c4e505454c0be2afc4556c30fd3f75d8 Mon Sep 17 00:00:00 2001 From: Roy Chou Date: Fri, 16 Jun 2023 07:42:26 +0000 Subject: [PATCH] fix(non linear font scaling): qs customizer page tile height is not scaling with font size Originally the tile view height in QS customizer page is fixed to 80dp, so when font size becomes larger the subtitle in tile might be cut off. Therefore, we adjust the tile view height to scale with the current font size to ensure the tile view height is enough for containing the content. Bug: 287170018 Test: manually Change-Id: I31c5479b64f71ad7bcf9a8688193e63a17d63251 --- .../res/layout/qs_customize_tile_frame.xml | 2 +- .../systemui/qs/customize/QSCustomizer.java | 8 ++++++ .../systemui/qs/customize/TileAdapter.java | 26 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/res/layout/qs_customize_tile_frame.xml b/packages/SystemUI/res/layout/qs_customize_tile_frame.xml index a2250b1975a34..0fd3c5b164353 100644 --- a/packages/SystemUI/res/layout/qs_customize_tile_frame.xml +++ b/packages/SystemUI/res/layout/qs_customize_tile_frame.xml @@ -17,7 +17,7 @@ implements TileSta private RecyclerView mRecyclerView; private int mNumColumns; + private TextView mTempTextView; + private int mMinTileViewHeight; + @Inject public TileAdapter( @QSThemedContext Context context, @@ -129,6 +134,8 @@ public class TileAdapter extends RecyclerView.Adapter implements TileSta mNumColumns = context.getResources().getInteger(NUM_COLUMNS_ID); mAccessibilityDelegate = new TileAdapterDelegate(); mSizeLookup.setSpanIndexCacheEnabled(true); + mTempTextView = new TextView(context); + mMinTileViewHeight = context.getResources().getDimensionPixelSize(R.dimen.qs_tile_height); } @Override @@ -318,6 +325,10 @@ public class TileAdapter extends RecyclerView.Adapter implements TileSta @Override public void onBindViewHolder(final Holder holder, int position) { + if (holder.mTileView != null) { + holder.mTileView.setMinimumHeight(mMinTileViewHeight); + } + if (holder.getItemViewType() == TYPE_HEADER) { setSelectableForHeaders(holder.itemView); return; @@ -860,4 +871,19 @@ public class TileAdapter extends RecyclerView.Adapter implements TileSta - buttonMinWidth - res.getDimensionPixelSize(R.dimen.qs_tile_margin_top_bottom); } + + /** + * Re-estimate the tile view height based under current font scaling. Like + * {@link TileLayout#estimateCellHeight()}, the tile view height would be estimated with 2 + * labels as general case. + */ + public void reloadTileHeight() { + final int minHeight = mContext.getResources().getDimensionPixelSize(R.dimen.qs_tile_height); + FontSizeUtils.updateFontSize(mTempTextView, R.dimen.qs_tile_text_size); + int unspecifiedSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + mTempTextView.measure(unspecifiedSpec, unspecifiedSpec); + int padding = mContext.getResources().getDimensionPixelSize(R.dimen.qs_tile_padding); + int estimatedTileViewHeight = mTempTextView.getMeasuredHeight() * 2 + padding * 2; + mMinTileViewHeight = Math.max(minHeight, estimatedTileViewHeight); + } }