Merge "Fix margins around tiles in QSCustomizer" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-06-11 13:47:15 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 10 deletions

View File

@@ -20,9 +20,11 @@ import static com.android.systemui.qs.customize.QSCustomizer.EXTRA_QS_CUSTOMIZIN
import static com.android.systemui.qs.customize.QSCustomizer.MENU_RESET;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toolbar;
import android.widget.Toolbar.OnMenuItemClickListener;
@@ -139,6 +141,20 @@ public class QSCustomizerController extends ViewController<QSCustomizer> {
RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) {
// Do not read row and column every time it changes.
}
public void calculateItemDecorationsForChild(View child, Rect outRect) {
// There's only a single item decoration that cares about the itemOffsets, so
// we just call it manually so they are never cached. This way, it's updated as the
// tiles are moved around.
// It only sets the left and right margin and only cares about tiles (not TextView).
if (!(child instanceof TextView)) {
outRect.setEmpty();
mTileAdapter.getMarginItemDecoration().getItemOffsets(outRect, child,
recyclerView, new RecyclerView.State());
((LayoutParams) child.getLayoutParams()).leftMargin = outRect.left;
((LayoutParams) child.getLayoutParams()).rightMargin = outRect.right;
}
}
};
layout.setSpanSizeLookup(mTileAdapter.getSizeLookup());
recyclerView.setLayoutManager(layout);

View File

@@ -690,9 +690,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
if (parent.getLayoutManager() == null) return;
GridLayoutManager lm = ((GridLayoutManager) parent.getLayoutManager());
SpanSizeLookup span = lm.getSpanSizeLookup();
ViewHolder holder = parent.getChildViewHolder(view);
int column = span.getSpanIndex(holder.getBindingAdapterPosition(), lm.getSpanCount());
int column = ((GridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex();
if (view instanceof TextView) {
super.getItemOffsets(outRect, view, parent, state);
@@ -702,14 +700,30 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
// columns).
outRect.left = mHalfMargin;
outRect.right = mHalfMargin;
} else if (column == 0) {
// Leftmost column when not using side margins. Should only have margin on the
// right.
outRect.right = mHalfMargin;
} else {
// Rightmost column when not using side margins. Should only have margin on the
// left.
outRect.left = mHalfMargin;
// Leftmost or rightmost column
if (parent.isLayoutRtl()) {
if (column == 0) {
// Rightmost column
outRect.left = mHalfMargin;
outRect.right = 0;
} else {
// Leftmost column
outRect.left = 0;
outRect.right = mHalfMargin;
}
} else {
// Non RTL
if (column == 0) {
// Leftmost column
outRect.left = 0;
outRect.right = mHalfMargin;
} else {
// Rightmost column
outRect.left = mHalfMargin;
outRect.right = 0;
}
}
}
}
}