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

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

Merge "Fix page indicator bugs for foldable" into main

parents 109b442a 95ed863d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2121,7 +2121,7 @@ public class Launcher extends StatefulActivity<LauncherState>

    @Override
    public void bindScreens(IntArray orderedScreenIds) {
        mWorkspace.mPageIndicator.setAreScreensBinding(true);
        mWorkspace.mPageIndicator.setAreScreensBinding(true, mDeviceProfile.isTwoPanels);
        int firstScreenPosition = 0;
        if ((FeatureFlags.QSB_ON_FIRST_SCREEN
                && mIsFirstPagePinnedItemEnabled
@@ -2650,7 +2650,7 @@ public class Launcher extends StatefulActivity<LauncherState>

        TraceHelper.INSTANCE.endSection();
        mWorkspace.removeExtraEmptyScreen(/* stripEmptyScreens= */ true);
        mWorkspace.mPageIndicator.setAreScreensBinding(false);
        mWorkspace.mPageIndicator.setAreScreensBinding(false, mDeviceProfile.isTwoPanels);
    }

    private boolean canAnimatePageChange() {
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ public interface PageIndicator {
     * 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) {
    default void setAreScreensBinding(boolean areScreensBinding, boolean isTwoPanels) {
        // No-op by default
    }

+12 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.launcher3.pageindicators;

import static com.android.launcher3.config.FeatureFlags.FOLDABLE_SINGLE_PAGE;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
@@ -129,6 +131,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
    private float mCurrentPosition;
    private float mFinalPosition;
    private boolean mAreScreensBinding;
    private boolean mIsTwoPanels;
    private ObjectAnimator mAnimator;
    private @Nullable ObjectAnimator mAlphaAnimator;

@@ -348,6 +351,12 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator

    @Override
    public void setActiveMarker(int activePage) {
        // In unfolded foldables, every page has two CellLayouts, so we need to halve the active
        // page for it to be accurate.
        if (mIsTwoPanels && !FOLDABLE_SINGLE_PAGE.get()) {
            activePage = activePage / 2;
        }

        if (mActivePage != activePage) {
            mActivePage = activePage;
        }
@@ -360,7 +369,9 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
    }

    @Override
    public void setAreScreensBinding(boolean areScreensBinding) {
    public void setAreScreensBinding(boolean areScreensBinding, boolean isTwoPanels) {
        mIsTwoPanels = isTwoPanels;

        // Reapply correct current position which was skipped during setScroll.
        if (mAreScreensBinding && !areScreensBinding) {
            CURRENT_POSITION.set(this, (float) mActivePage);