summaryrefslogtreecommitdiff
path: root/src/com/android/launcher3/pageindicators
diff options
context:
space:
mode:
authorfbaron <fbaron@google.com>2023-08-10 23:39:56 -0700
committerfbaron <fbaron@google.com>2023-08-17 10:58:15 -0700
commitc7a605ea823e250facac2d65fec5e12996f5ddbd (patch)
tree799d01bd1b86222c4f1363e1a78e37b7023a24ac /src/com/android/launcher3/pageindicators
parent73c3611b3244e27cb4c5eff62f9edc54c8bb95e7 (diff)
downloadLauncher3-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.java8
-rw-r--r--src/com/android/launcher3/pageindicators/PageIndicatorDots.java18
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 ?