Merge "Align tiles between QSPanel and QSCustomizer"

This commit is contained in:
Fabian Kozynski
2020-10-09 14:24:11 +00:00
committed by Android (Google) Code Review
4 changed files with 57 additions and 2 deletions

View File

@@ -23,6 +23,7 @@ import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.View;
import android.widget.FrameLayout;
@@ -282,7 +283,7 @@ public class QSContainerImpl extends FrameLayout {
View view = getChildAt(i);
if (view == mStatusBarBackground || view == mBackgroundGradient
|| view == mQSCustomizer) {
// Some views are always full width
// Some views are always full width or have dependent padding
continue;
}
LayoutParams lp = (LayoutParams) view.getLayoutParams();
@@ -291,6 +292,9 @@ public class QSContainerImpl extends FrameLayout {
if (view == mQSPanelContainer) {
// QS panel lays out some of its content full width
mQSPanel.setContentMargins(mContentPaddingStart, mContentPaddingEnd);
Pair<Integer, Integer> margins = mQSPanel.getVisualSideMargins();
// Apply paddings based on QSPanel
mQSCustomizer.setContentPaddings(margins.first, margins.second);
} else if (view == mHeader) {
// The header contains the QQS panel which needs to have special padding, to
// visually align them.

View File

@@ -30,6 +30,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -1080,6 +1081,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
updateTileLayoutMargins();
}
public Pair<Integer, Integer> getVisualSideMargins() {
return new Pair(mVisualMarginStart, mUsingHorizontalLayout ? 0 : mVisualMarginEnd);
}
private void updateTileLayoutMargins() {
int marginEnd = mVisualMarginEnd;
if (mUsingHorizontalLayout) {

View File

@@ -132,6 +132,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
layout.setSpanSizeLookup(mTileAdapter.getSizeLookup());
mRecyclerView.setLayoutManager(layout);
mRecyclerView.addItemDecoration(mTileAdapter.getItemDecoration());
mRecyclerView.addItemDecoration(mTileAdapter.getMarginItemDecoration());
DefaultItemAnimator animator = new DefaultItemAnimator();
animator.setMoveDuration(TileAdapter.MOVE_DURATION);
mRecyclerView.setItemAnimator(animator);
@@ -221,6 +222,22 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
}
}
/**
* Sets the padding for the RecyclerView. Also, updates the margin between the tiles in the
* {@link TileAdapter}.
*/
public void setContentPaddings(int paddingStart, int paddingEnd) {
int halfMargin = mContext.getResources()
.getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal) / 2;
mTileAdapter.changeHalfMargin(halfMargin);
mRecyclerView.setPaddingRelative(
paddingStart,
mRecyclerView.getPaddingTop(),
paddingEnd,
mRecyclerView.getPaddingBottom()
);
}
private void queryTiles() {
mTileQueryHelper.queryTiles(mHost);
}

View File

@@ -18,6 +18,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.LayoutInflater;
@@ -75,6 +76,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
private final List<TileInfo> mTiles = new ArrayList<>();
private final ItemTouchHelper mItemTouchHelper;
private final ItemDecoration mDecoration;
private final MarginTileDecoration mMarginDecoration;
private final int mMinNumTiles;
private int mEditIndex;
private int mTileDividerIndex;
@@ -97,6 +99,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
mUiEventLogger = uiEventLogger;
mItemTouchHelper = new ItemTouchHelper(mCallbacks);
mDecoration = new TileItemDecoration(context);
mMarginDecoration = new MarginTileDecoration();
mMinNumTiles = context.getResources().getInteger(R.integer.quick_settings_min_num_tiles);
mAccessibilityDelegate = new TileAdapterDelegate();
}
@@ -123,6 +126,14 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
return mDecoration;
}
public ItemDecoration getMarginItemDecoration() {
return mMarginDecoration;
}
public void changeHalfMargin(int halfMargin) {
mMarginDecoration.setHalfMargin(halfMargin);
}
public void saveSpecs(QSTileHost host) {
List<String> newSpecs = new ArrayList<>();
clearAccessibilityState();
@@ -596,7 +607,6 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
mDrawable = context.getDrawable(R.drawable.qs_customize_tile_decoration);
}
@Override
public void onDraw(Canvas c, RecyclerView parent, State state) {
super.onDraw(c, parent, state);
@@ -630,6 +640,25 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
}
}
private static class MarginTileDecoration extends ItemDecoration {
private int mHalfMargin;
public void setHalfMargin(int halfMargin) {
mHalfMargin = halfMargin;
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
@NonNull RecyclerView parent, @NonNull State state) {
if (view instanceof TextView) {
super.getItemOffsets(outRect, view, parent, state);
} else {
outRect.left = mHalfMargin;
outRect.right = mHalfMargin;
}
}
}
private final ItemTouchHelper.Callback mCallbacks = new ItemTouchHelper.Callback() {
@Override