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:
@@ -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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user