Merge "Fix sizes and paddings" into sc-dev
diff --git a/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml b/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
index 41140a7..f8f455d 100644
--- a/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
+++ b/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
@@ -17,7 +17,8 @@
 
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
     android:autoMirrored="true">
-    <item android:id="@+id/slider_foreground">
+    <item android:id="@+id/slider_foreground"
+        android:height="@dimen/rounded_slider_height">
         <shape>
             <size android:height="@dimen/rounded_slider_height" />
             <solid android:color="?android:attr/colorControlActivated" />
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog_thick.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog_thick.xml
index 4f4b2af..6cee38d 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog_thick.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog_thick.xml
@@ -16,8 +16,7 @@
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
-    android:layout_gravity="center"
-    style="@style/BrightnessDialogContainer">
+    android:layout_gravity="center">
 
     <com.android.systemui.settings.brightness.BrightnessSliderView
         android:id="@+id/brightness_slider"
@@ -35,6 +34,8 @@
             android:minHeight="48dp"
             android:thumb="@null"
             android:background="@null"
+            android:paddingStart="0dp"
+            android:paddingEnd="0dp"
             android:progressDrawable="@drawable/brightness_progress_drawable_thick"
             android:splitTrack="false"
         />
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index fcb56a4..32723b4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -87,6 +87,10 @@
                 attrs, R.styleable.PagedTileLayout, 0, 0);
         mSideLabels = t.getBoolean(R.styleable.PagedTileLayout_sideLabels, false);
         t.recycle();
+        if (mSideLabels) {
+            setPageMargin(context.getResources().getDimensionPixelOffset(
+                    R.dimen.qs_tile_margin_horizontal));
+        }
     }
     private int mLastMaxHeight = -1;
 
@@ -341,6 +345,9 @@
         // Update bottom padding, useful for removing extra space once the panel page indicator is
         // hidden.
         Resources res = getContext().getResources();
+        if (mSideLabels) {
+            setPageMargin(res.getDimensionPixelOffset(R.dimen.qs_tile_margin_horizontal));
+        }
         setPadding(0, 0, 0,
                 getContext().getResources().getDimensionPixelSize(
                         R.dimen.qs_paged_tile_layout_padding_bottom));
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 95f7e20..27cc268 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -649,7 +649,7 @@
         if (mFooter != null) {
             int footerMargin = 0;
             int indicatorMargin = 0;
-            if (mUsingHorizontalLayout) {
+            if (mUsingHorizontalLayout && !mSideLabels) {
                 footerMargin = mFooterMarginStartHorizontal;
                 indicatorMargin = footerMargin - mVisualMarginEnd;
             }
@@ -677,15 +677,19 @@
     }
 
     public Pair<Integer, Integer> getVisualSideMargins() {
-        return new Pair(mVisualMarginStart, mUsingHorizontalLayout ? 0 : mVisualMarginEnd);
+        if (mSideLabels) {
+            return new Pair(0, 0);
+        } else {
+            return new Pair(mVisualMarginStart, mUsingHorizontalLayout ? 0 : mVisualMarginEnd);
+        }
     }
 
     private void updateTileLayoutMargins() {
         int marginEnd = mVisualMarginEnd;
-        if (mUsingHorizontalLayout) {
+        if (mUsingHorizontalLayout || mSideLabels) {
             marginEnd = 0;
         }
-        updateMargins((View) mTileLayout, mVisualMarginStart, marginEnd);
+        updateMargins((View) mTileLayout, mSideLabels ? 0 : mVisualMarginStart, marginEnd);
     }
 
     private void updateDividerMargin() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 82ae2dd..8aaf84b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -370,21 +370,21 @@
             QuickQSPanelController quickQSPanelController) {
         mContentMarginStart = marginStart;
         mContentMarginEnd = marginEnd;
-        for (int i = 0; i < getChildCount(); i++) {
-            View view = getChildAt(i);
-            if (view == mHeaderQsPanel) {
-                // QS panel doesn't lays out some of its content full width
-                quickQSPanelController.setContentMargins(marginStart, marginEnd);
-            } else {
-                MarginLayoutParams lp = (MarginLayoutParams) view.getLayoutParams();
-                lp.setMarginStart(marginStart);
-                lp.setMarginEnd(marginEnd);
-                view.setLayoutParams(lp);
-            }
-        }
+        // The clock and QQS are not direct children, but the container should be just a wrapper to
+        // be able to move them together. So we set the margins to the actual views.
+        quickQSPanelController.setContentMargins(0, 0);
+        setContentMargins(mDatePrivacyView, marginStart, marginEnd);
+        setContentMargins(mClockIconsView, marginStart, marginEnd);
         updateHeadersPadding();
     }
 
+    private void setContentMargins(View view, int marginStart, int marginEnd) {
+        MarginLayoutParams lp = (MarginLayoutParams) view.getLayoutParams();
+        lp.setMarginStart(marginStart);
+        lp.setMarginEnd(marginEnd);
+        view.setLayoutParams(lp);
+    }
+
     /**
      * When QS is scrolling, mClockIconsAlpha should scroll away and fade out.
      *
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt
index d1deeca..1ba11ef 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/SideLabelTileLayout.kt
@@ -35,6 +35,10 @@
         return mRecords.size >= maxTiles()
     }
 
+    override fun useSidePadding(): Boolean {
+        return false
+    }
+
     /**
      * Return the position from the top of the layout of the tile with this index.
      *
diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
index 9e0aa5a..96712bd9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
@@ -121,6 +121,7 @@
         updateColumns();
         mMaxCellHeight = mContext.getResources().getDimensionPixelSize(mCellHeightResId);
         mCellMarginHorizontal = res.getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal);
+        mSidePadding = useSidePadding() ? mCellMarginHorizontal / 2 : 0;
         mCellMarginVertical= res.getDimensionPixelSize(R.dimen.qs_tile_margin_vertical);
         mCellMarginTop = res.getDimensionPixelSize(R.dimen.qs_tile_margin_top);
         mMaxAllowedRows = Math.max(1, getResources().getInteger(R.integer.quick_settings_max_rows));
@@ -132,6 +133,10 @@
         return false;
     }
 
+    protected boolean useSidePadding() {
+        return true;
+    }
+
     private boolean updateColumns() {
         int oldColumns = mColumns;
         mColumns = Math.min(mResourceColumns, mMaxColumns);
@@ -150,8 +155,9 @@
         if (heightMode == MeasureSpec.UNSPECIFIED) {
             mRows = (numTiles + mColumns - 1) / mColumns;
         }
+        final int gaps = mColumns - 1;
         mCellWidth =
-                (availableWidth - (mCellMarginHorizontal * mColumns)) / mColumns;
+                (availableWidth - (mCellMarginHorizontal * gaps) - mSidePadding * 2) / mColumns;
 
         // Measure each QS tile.
         View previousView = this;
@@ -241,8 +247,8 @@
     }
 
     protected int getColumnStart(int column) {
-        return getPaddingStart() + mCellMarginHorizontal / 2 +
-                column *  (mCellWidth + mCellMarginHorizontal);
+        return getPaddingStart() + mSidePadding
+                + column *  (mCellWidth + mCellMarginHorizontal);
     }
 
     @Override
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 0adc844..e9abef4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -35,6 +35,7 @@
 import androidx.annotation.Nullable;
 import androidx.core.view.AccessibilityDelegateCompat;
 import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup;
 import androidx.recyclerview.widget.ItemTouchHelper;
 import androidx.recyclerview.widget.RecyclerView;
@@ -118,11 +119,12 @@
         mUiEventLogger = uiEventLogger;
         mItemTouchHelper = new ItemTouchHelper(mCallbacks);
         mDecoration = new TileItemDecoration(context);
-        mMarginDecoration = new MarginTileDecoration();
+        mMarginDecoration = new MarginTileDecoration(!useHorizontalTiles);
         mMinNumTiles = context.getResources().getInteger(R.integer.quick_settings_min_num_tiles);
         mNumColumns = context.getResources().getInteger(NUM_COLUMNS_ID);
         mAccessibilityDelegate = new TileAdapterDelegate();
         mUseHorizontalTiles = useHorizontalTiles;
+        mSizeLookup.setSpanIndexCacheEnabled(true);
     }
 
     @Override
@@ -708,6 +710,11 @@
 
     private static class MarginTileDecoration extends ItemDecoration {
         private int mHalfMargin;
+        private final boolean mUseOutsideMargins;
+
+        private MarginTileDecoration(boolean useOutsideMargins) {
+            mUseOutsideMargins = useOutsideMargins;
+        }
 
         public void setHalfMargin(int halfMargin) {
             mHalfMargin = halfMargin;
@@ -716,11 +723,30 @@
         @Override
         public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
                 @NonNull RecyclerView parent, @NonNull State state) {
+            if (parent.getLayoutManager() == null) return;
+
+            GridLayoutManager lm = ((GridLayoutManager) parent.getLayoutManager());
+            SpanSizeLookup span = lm.getSpanSizeLookup();
+            ViewHolder holder = parent.getChildViewHolder(view);
+            int column = span.getSpanIndex(holder.getLayoutPosition(), lm.getSpanCount());
+
             if (view instanceof TextView) {
                 super.getItemOffsets(outRect, view, parent, state);
             } else {
-                outRect.left = mHalfMargin;
-                outRect.right = mHalfMargin;
+                if (mUseOutsideMargins || (column != 0 && column != lm.getSpanCount() - 1)) {
+                    // Using outside margins or in a column that's not leftmost or rightmost
+                    // (half of the margin between 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;
+                }
             }
         }
     }