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

Commit 828f9f32 authored by Federico Baron's avatar Federico Baron Committed by Android (Google) Code Review
Browse files

Merge "Fix page indicator bugs for foldable" into udc-qpr-dev

parents 7af0db7e c7a605ea
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -2325,6 +2325,7 @@ public class Launcher extends StatefulActivity<LauncherState>


    @Override
    @Override
    public void bindScreens(IntArray orderedScreenIds) {
    public void bindScreens(IntArray orderedScreenIds) {
        mWorkspace.mPageIndicator.setAreScreensBinding(true);
        int firstScreenPosition = 0;
        int firstScreenPosition = 0;
        if (FeatureFlags.QSB_ON_FIRST_SCREEN &&
        if (FeatureFlags.QSB_ON_FIRST_SCREEN &&
                orderedScreenIds.indexOf(Workspace.FIRST_SCREEN_ID) != firstScreenPosition) {
                orderedScreenIds.indexOf(Workspace.FIRST_SCREEN_ID) != firstScreenPosition) {
@@ -2822,8 +2823,8 @@ public class Launcher extends StatefulActivity<LauncherState>
        getViewCache().setCacheSize(R.layout.folder_page, 2);
        getViewCache().setCacheSize(R.layout.folder_page, 2);


        TraceHelper.INSTANCE.endSection();
        TraceHelper.INSTANCE.endSection();

        mWorkspace.removeExtraEmptyScreen(/* stripEmptyScreens= */ true);
        mWorkspace.removeExtraEmptyScreen(true);
        mWorkspace.mPageIndicator.setAreScreensBinding(false);
    }
    }


    private boolean canAnimatePageChange() {
    private boolean canAnimatePageChange() {
+8 −0
Original line number Original line Diff line number Diff line
@@ -26,6 +26,14 @@ public interface PageIndicator {


    void setMarkersCount(int numMarkers);
    void setMarkersCount(int numMarkers);


    /**
     * Sets flag to indicate when the screens are in the process of binding so that we don't animate
     * during that period.
     */
    default void setAreScreensBinding(boolean areScreensBinding) {
        // No-op by default
    }

    /**
    /**
     * Sets the flag if the Page Indicator should autohide.
     * Sets the flag if the Page Indicator should autohide.
     */
     */
+17 −1
Original line number Original line Diff line number Diff line
@@ -130,6 +130,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
     */
     */
    private float mCurrentPosition;
    private float mCurrentPosition;
    private float mFinalPosition;
    private float mFinalPosition;
    private boolean mAreScreensBinding;
    private ObjectAnimator mAnimator;
    private ObjectAnimator mAnimator;
    private @Nullable ObjectAnimator mAlphaAnimator;
    private @Nullable ObjectAnimator mAlphaAnimator;


@@ -163,7 +164,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator


    @Override
    @Override
    public void setScroll(int currentScroll, int totalScroll) {
    public void setScroll(int currentScroll, int totalScroll) {
        if (SHOW_DOT_PAGINATION.get() && mActivePage != 0 && currentScroll == 0) {
        if (SHOW_DOT_PAGINATION.get() && currentScroll == 0 && totalScroll == 0) {
            CURRENT_POSITION.set(this, (float) mActivePage);
            CURRENT_POSITION.set(this, (float) mActivePage);
            return;
            return;
        }
        }
@@ -172,6 +173,11 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
            return;
            return;
        }
        }


        // Skip scroll update during binding. We will update it when binding completes.
        if (mAreScreensBinding) {
            return;
        }

        if (mShouldAutoHide) {
        if (mShouldAutoHide) {
            animatePaginationToAlpha(VISIBLE_ALPHA);
            animatePaginationToAlpha(VISIBLE_ALPHA);
        }
        }
@@ -358,6 +364,16 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
        requestLayout();
        requestLayout();
    }
    }


    @Override
    public void setAreScreensBinding(boolean areScreensBinding) {
        // Reapply correct current position which was skipped during setScroll.
        if (mAreScreensBinding && !areScreensBinding) {
            CURRENT_POSITION.set(this, (float) mActivePage);
        }

        mAreScreensBinding = areScreensBinding;
    }

    @Override
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Add extra spacing of mDotRadius on all sides so than entry animation could be run.
        // Add extra spacing of mDotRadius on all sides so than entry animation could be run.