diff options
author | fbaron <fbaron@google.com> | 2023-08-10 23:39:56 -0700 |
---|---|---|
committer | fbaron <fbaron@google.com> | 2023-08-17 10:58:15 -0700 |
commit | c7a605ea823e250facac2d65fec5e12996f5ddbd (patch) | |
tree | 799d01bd1b86222c4f1363e1a78e37b7023a24ac /src/com/android/launcher3/pageindicators | |
parent | 73c3611b3244e27cb4c5eff62f9edc54c8bb95e7 (diff) | |
download | Launcher3-c7a605ea823e250facac2d65fec5e12996f5ddbd.tar.gz |
Fix page indicator bugs for foldable
There are bugs when unfolding the felix device where the page indicator will appear in the wrong place, and have to animate all the way back to where it should go. Here we fix those issues.
Fix: 294229186
Fix: 294231977
Flag: no flag
Test: n/a
Change-Id: I962042efcee6fcea2e46acd585b7f1403078b548
Diffstat (limited to 'src/com/android/launcher3/pageindicators')
-rw-r--r-- | src/com/android/launcher3/pageindicators/PageIndicator.java | 8 | ||||
-rw-r--r-- | src/com/android/launcher3/pageindicators/PageIndicatorDots.java | 18 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/com/android/launcher3/pageindicators/PageIndicator.java b/src/com/android/launcher3/pageindicators/PageIndicator.java index 570d6ff267..4ab20373b4 100644 --- a/src/com/android/launcher3/pageindicators/PageIndicator.java +++ b/src/com/android/launcher3/pageindicators/PageIndicator.java @@ -27,6 +27,14 @@ public interface PageIndicator { 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. */ default void setShouldAutoHide(boolean shouldAutoHide) { diff --git a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java index 073e5234f9..ce71275001 100644 --- a/src/com/android/launcher3/pageindicators/PageIndicatorDots.java +++ b/src/com/android/launcher3/pageindicators/PageIndicatorDots.java @@ -130,6 +130,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator */ private float mCurrentPosition; private float mFinalPosition; + private boolean mAreScreensBinding; private ObjectAnimator mAnimator; private @Nullable ObjectAnimator mAlphaAnimator; @@ -163,7 +164,7 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator @Override 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); return; } @@ -172,6 +173,11 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator return; } + // Skip scroll update during binding. We will update it when binding completes. + if (mAreScreensBinding) { + return; + } + if (mShouldAutoHide) { animatePaginationToAlpha(VISIBLE_ALPHA); } @@ -359,6 +365,16 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator } @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 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // Add extra spacing of mDotRadius on all sides so than entry animation could be run. int width = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY ? |