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
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="@dimen/qs_tile_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="@dimen/qs_tile_margin_top_bottom"
|
||||
android:layout_marginBottom="@dimen/qs_tile_margin_top_bottom"
|
||||
|
||||
@@ -114,11 +114,18 @@ public class QSCustomizer extends LinearLayout {
|
||||
mQs = qs;
|
||||
}
|
||||
|
||||
private void reloadAdapterTileHeight(@Nullable RecyclerView.Adapter adapter) {
|
||||
if (adapter instanceof TileAdapter) {
|
||||
((TileAdapter) adapter).reloadTileHeight();
|
||||
}
|
||||
}
|
||||
|
||||
/** Animate and show QSCustomizer panel.
|
||||
* @param x,y Location on screen of {@code edit} button to determine center of animation.
|
||||
*/
|
||||
void show(int x, int y, TileAdapter tileAdapter) {
|
||||
if (!isShown) {
|
||||
reloadAdapterTileHeight(tileAdapter);
|
||||
mRecyclerView.getLayoutManager().scrollToPosition(0);
|
||||
int[] containerLocation = findViewById(R.id.customize_container).getLocationOnScreen();
|
||||
mX = x - containerLocation[0];
|
||||
@@ -136,6 +143,7 @@ public class QSCustomizer extends LinearLayout {
|
||||
|
||||
void showImmediately() {
|
||||
if (!isShown) {
|
||||
reloadAdapterTileHeight(mRecyclerView.getAdapter());
|
||||
mRecyclerView.getLayoutManager().scrollToPosition(0);
|
||||
setVisibility(VISIBLE);
|
||||
mClipper.cancelAnimator();
|
||||
|
||||
@@ -43,9 +43,11 @@ import androidx.recyclerview.widget.RecyclerView.State;
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSEditEvent;
|
||||
import com.android.systemui.qs.QSHost;
|
||||
import com.android.systemui.qs.TileLayout;
|
||||
import com.android.systemui.qs.customize.TileAdapter.Holder;
|
||||
import com.android.systemui.qs.customize.TileQueryHelper.TileInfo;
|
||||
import com.android.systemui.qs.customize.TileQueryHelper.TileStateListener;
|
||||
@@ -114,6 +116,9 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> 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<Holder> 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<Holder> 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<Holder> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user