Merge changes I1136ede4,I5f0877fe into udc-dev am: 106d91d04c am: f080503675 am: 63beda8af0

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

Change-Id: Ia7d4167eeb1c5214490e63ac1c52f2d187a8cabe
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Fengjiang Li
2023-05-17 00:18:54 +00:00
committed by Automerger Merge Worker
2 changed files with 43 additions and 27 deletions
+8 -4
View File
@@ -559,7 +559,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
.inflate(R.layout.user_folder_icon_normalized, null); .inflate(R.layout.user_folder_icon_normalized, null);
} }
private void startAnimation(final AnimatorSet a) { private void addAnimationStartListeners(AnimatorSet a) {
mLauncherDelegate.forEachVisibleWorkspacePage( mLauncherDelegate.forEachVisibleWorkspacePage(
visiblePage -> addAnimatorListenerForPage(a, (CellLayout) visiblePage)); visiblePage -> addAnimatorListenerForPage(a, (CellLayout) visiblePage));
@@ -575,7 +575,6 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
mCurrentAnimator = null; mCurrentAnimator = null;
} }
}); });
a.start();
} }
private void addAnimatorListenerForPage(AnimatorSet a, CellLayout currentCellLayout) { private void addAnimatorListenerForPage(AnimatorSet a, CellLayout currentCellLayout) {
@@ -735,10 +734,14 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
mPageIndicator.stopAllAnimations(); mPageIndicator.stopAllAnimations();
// b/282158620 because setCurrentPlayTime() below will start animator, we need to register
// {@link AnimatorListener} before it so that {@link AnimatorListener#onAnimationStart} can
// be called to register mCurrentAnimator, which will be used to cancel animator
addAnimationStartListeners(anim);
// Because t=0 has the folder match the folder icon, we can skip the // Because t=0 has the folder match the folder icon, we can skip the
// first frame and have the same movement one frame earlier. // first frame and have the same movement one frame earlier.
anim.setCurrentPlayTime(Math.min(getSingleFrameMs(getContext()), anim.getTotalDuration())); anim.setCurrentPlayTime(Math.min(getSingleFrameMs(getContext()), anim.getTotalDuration()));
startAnimation(anim); anim.start();
// Make sure the folder picks up the last drag move even if the finger doesn't move. // Make sure the folder picks up the last drag move even if the finger doesn't move.
if (mDragController.isDragging()) { if (mDragController.isDragging()) {
@@ -816,7 +819,8 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
mIsAnimatingClosed = false; mIsAnimatingClosed = false;
} }
}); });
startAnimation(a); addAnimationStartListeners(a);
a.start();
} }
@Override @Override
@@ -265,23 +265,37 @@ public class FolderAnimationManager {
Animator z = getAnimator(mFolder, View.TRANSLATION_Z, -mFolder.getElevation(), 0); Animator z = getAnimator(mFolder, View.TRANSLATION_Z, -mFolder.getElevation(), 0);
play(a, z, mIsOpening ? midDuration : 0, midDuration); play(a, z, mIsOpening ? midDuration : 0, midDuration);
// Store clip variables // Store clip variables.
CellLayout cellLayout = mContent.getCurrentCellLayout(); // Because {@link #onAnimationStart} and {@link #onAnimationEnd} callbacks are sent to
boolean folderClipChildren = mFolder.getClipChildren(); // message queue and executed on separate frame, we should save states in
boolean folderClipToPadding = mFolder.getClipToPadding(); // {@link #onAnimationStart} instead of before creating animator, so that cancelling
boolean contentClipChildren = mContent.getClipChildren(); // animation A and restarting animation B allows A to reset states in
boolean contentClipToPadding = mContent.getClipToPadding(); // {@link #onAnimationEnd} before B reads new UI state from {@link #onAnimationStart}.
boolean cellLayoutClipChildren = cellLayout.getClipChildren();
boolean cellLayoutClipPadding = cellLayout.getClipToPadding();
mFolder.setClipChildren(false);
mFolder.setClipToPadding(false);
mContent.setClipChildren(false);
mContent.setClipToPadding(false);
cellLayout.setClipChildren(false);
cellLayout.setClipToPadding(false);
a.addListener(new AnimatorListenerAdapter() { a.addListener(new AnimatorListenerAdapter() {
private CellLayout mCellLayout;
private boolean mFolderClipToPadding;
private boolean mContentClipChildren;
private boolean mContentClipToPadding;
private boolean mCellLayoutClipChildren;
private boolean mCellLayoutClipPadding;
@Override
public void onAnimationStart(Animator animator) {
super.onAnimationStart(animator);
mCellLayout = mContent.getCurrentCellLayout();
mFolderClipToPadding = mFolder.getClipToPadding();
mContentClipChildren = mContent.getClipChildren();
mContentClipToPadding = mContent.getClipToPadding();
mCellLayoutClipChildren = mCellLayout.getClipChildren();
mCellLayoutClipPadding = mCellLayout.getClipToPadding();
mFolder.setClipToPadding(false);
mContent.setClipChildren(false);
mContent.setClipToPadding(false);
mCellLayout.setClipChildren(false);
mCellLayout.setClipToPadding(false);
}
@Override @Override
public void onAnimationEnd(Animator animation) { public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation); super.onAnimationEnd(animation);
@@ -295,13 +309,11 @@ public class FolderAnimationManager {
mFolder.mFooter.setTranslationX(0f); mFolder.mFooter.setTranslationX(0f);
mFolder.mFolderName.setAlpha(1f); mFolder.mFolderName.setAlpha(1f);
mFolder.setClipChildren(folderClipChildren); mFolder.setClipToPadding(mFolderClipToPadding);
mFolder.setClipToPadding(folderClipToPadding); mContent.setClipChildren(mContentClipChildren);
mContent.setClipChildren(contentClipChildren); mContent.setClipToPadding(mContentClipToPadding);
mContent.setClipToPadding(contentClipToPadding); mCellLayout.setClipChildren(mCellLayoutClipChildren);
cellLayout.setClipChildren(cellLayoutClipChildren); mCellLayout.setClipToPadding(mCellLayoutClipPadding);
cellLayout.setClipToPadding(cellLayoutClipPadding);
} }
}); });