Merge "Fix page indicator bugs for foldable" into udc-qpr-dev am: 828f9f326e

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/24399441

Change-Id: Ie3d61e4acb941296d8a3ea3651351ebefabb8f08
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Federico Baron
2023-08-17 21:21:14 +00:00
committed by Automerger Merge Worker
3 changed files with 28 additions and 3 deletions
+3 -2
View File
@@ -2325,6 +2325,7 @@ public class Launcher extends StatefulActivity<LauncherState>
@Override
public void bindScreens(IntArray orderedScreenIds) {
mWorkspace.mPageIndicator.setAreScreensBinding(true);
int firstScreenPosition = 0;
if (FeatureFlags.QSB_ON_FIRST_SCREEN &&
orderedScreenIds.indexOf(Workspace.FIRST_SCREEN_ID) != firstScreenPosition) {
@@ -2822,8 +2823,8 @@ public class Launcher extends StatefulActivity<LauncherState>
getViewCache().setCacheSize(R.layout.folder_page, 2);
TraceHelper.INSTANCE.endSection();
mWorkspace.removeExtraEmptyScreen(true);
mWorkspace.removeExtraEmptyScreen(/* stripEmptyScreens= */ true);
mWorkspace.mPageIndicator.setAreScreensBinding(false);
}
private boolean canAnimatePageChange() {
@@ -26,6 +26,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.
*/
@@ -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);
}
@@ -358,6 +364,16 @@ public class PageIndicatorDots extends View implements Insettable, PageIndicator
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
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Add extra spacing of mDotRadius on all sides so than entry animation could be run.