Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17abc748 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Use padding in pages instead of pageMargin

ViewPager pageMargin does some rounding when calculating the offset of
each page, leading to positions that are not integers at the snapping
points. This is usually not an issue, except that we use those positions
to drive the PageIndicator.

Instead, set padding on the pages and negative margin in
PagedTileLayout. As everything has clip false, this produces the exact
same effect.

Test: manual
Fixes: 187954110
Change-Id: Ie1055a34c26214b012e96e3ec032ce4db576694d
parent 1dfd9484
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -18,4 +18,8 @@
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tile_page"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
    android:layout_height="match_parent"
    android:paddingStart="@dimen/notification_side_paddings"
    android:paddingEnd="@dimen/notification_side_paddings"
    android:clipChildren="false"
    android:clipToPadding="false" />
+16 −2
Original line number Diff line number Diff line
@@ -80,8 +80,22 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {

    @Override
    public void setPageMargin(int marginPixels) {
        if (marginPixels != getPageMargin()) {
            super.setPageMargin(marginPixels);
        // Using page margins creates some rounding issues that interfere with the correct position
        // in the onPageChangedListener and therefore present bad positions to the PageIndicator.
        // Instead, we use negative margins in the container and positive padding in the pages,
        // matching the margin set from QSContainerImpl (note that new pages will always be inflated
        // with the correct value.
        // QSContainerImpl resources are set onAttachedView, so this view will always have the right
        // values when attached.
        MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams();
        lp.setMarginStart(-marginPixels);
        lp.setMarginEnd(-marginPixels);
        setLayoutParams(lp);

        int nPages = mPages.size();
        for (int i = 0; i < nPages; i++) {
            View v = mPages.get(i);
            v.setPadding(marginPixels, v.getPaddingTop(), marginPixels, v.getPaddingBottom());
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@ public class QSContainerImpl extends FrameLayout {
                qsPanelController.setContentMargins(mContentPadding, mContentPadding);
                // Set it as double the side margin (to simulate end margin of current page +
                // start margin of next page).
                qsPanelController.setPageMargin(2 * mSideMargins);
                qsPanelController.setPageMargin(mSideMargins);
            } else if (view == mHeader) {
                // No content padding for the header.
            } else {