summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fabian Kozynski <kozynski@google.com> 2020-09-30 11:46:20 -0400
committer Fabian Kozynski <kozynski@google.com> 2020-09-30 11:49:35 -0400
commit8071a96b3f2c20c042eb78266aebea5af8dd7bd7 (patch)
tree445a6a2618d2f7be7bba77414bf9f76502d6a0fb
parentc8c572d1134bc5c39b87bef6f99b8e70c57d549a (diff)
Align tiles between QSPanel and QSCustomizer
Give the tiles in QSCustomizer the same margin (half of qs_tile_margin_horizontal in each side) and set the RecyclerView padding to be the same as QSPanel's TileLayout margin. That way, the tiles align when QSCustomizer opens (only in portrait) and the animation looks better. Test: manual, multiple densities Fixes: 164207558 Change-Id: Ied960c9292c93c09f5ef04853d3b1a25bd778237
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanel.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java31
4 files changed, 57 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index eba4465018ab..350faf8cceb1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -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.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index ae925d1d6ee6..682950e89140 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -25,12 +25,12 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.graphics.PointF;
import android.metrics.LogMaker;
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;
@@ -1077,6 +1077,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) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
index e5ed88c10a2e..55b67e061c13 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -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);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
index bffeb3ec3c70..43b88e79b162 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -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);
@@ -624,6 +634,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