Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecf45145 authored by Jon Miranda's avatar Jon Miranda
Browse files

Polish Folder open animation during drag and drop.

We now use the current FolderIcon background radius as the
clipping size for the Folder, which results in a smoother
hand-off between the two.

Before this change, the Folder would center itself against the FolderIcon
during the hand-off. This resulted in the preview items being fully-visible
in the FolderIcon, to being clipped in the Folder.

Bug: 63709477

Change-Id: I1da187485f28dde92d171729b011ada47a506f85
parent 28032006
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -125,7 +125,8 @@ public class FolderAnimationManager {
        final Rect folderIconPos = new Rect();
        float scaleRelativeToDragLayer = mLauncher.getDragLayer()
                .getDescendantRectRelativeToSelf(mFolderIcon, folderIconPos);
        float initialSize = (mPreviewBackground.getRadius() * 2) * scaleRelativeToDragLayer;
        int scaledRadius = mPreviewBackground.getScaledRadius();
        float initialSize = (scaledRadius * 2) * scaleRelativeToDragLayer;

        // Match size/scale of icons in the preview
        float previewScale = rule.scaleForItem(0, itemsInPreview.size());
@@ -152,13 +153,9 @@ public class FolderAnimationManager {
        final int paddingOffsetY = (int) ((mFolder.getPaddingTop() + mContent.getPaddingTop())
                * initialScale);

        // Background can have a scaled radius in drag and drop mode.
        int radiusDiff = mPreviewBackground.getScaledRadius()- mPreviewBackground.getRadius();

        int initialX = folderIconPos.left + mPreviewBackground.getOffsetX() - paddingOffsetX
                - previewItemOffsetX + radiusDiff;
        int initialY = folderIconPos.top + mPreviewBackground.getOffsetY() - paddingOffsetY
                + radiusDiff;
                - previewItemOffsetX;
        int initialY = folderIconPos.top + mPreviewBackground.getOffsetY() - paddingOffsetY;
        final float xDistance = initialX - lp.x;
        final float yDistance = initialY - lp.y;

@@ -232,7 +229,11 @@ public class FolderAnimationManager {
            animator.setInterpolator(mFolderInterpolator);
        }

        addPreviewItemAnimators(a, initialScale / scaleRelativeToDragLayer, previewItemOffsetX);
        int radiusDiff = scaledRadius - mPreviewBackground.getRadius();
        addPreviewItemAnimators(a, initialScale / scaleRelativeToDragLayer,
                // Background can have a scaled radius in drag and drop mode, so we need to add the
                // difference to keep the preview items centered.
                previewItemOffsetX + radiusDiff, radiusDiff);
        return a;
    }

@@ -240,7 +241,7 @@ public class FolderAnimationManager {
     * Animate the items on the current page.
     */
    private void addPreviewItemAnimators(AnimatorSet animatorSet, final float folderScale,
            int previewItemOffsetX) {
            int previewItemOffsetX, int previewItemOffsetY) {
        FolderIcon.PreviewLayoutRule rule = mFolderIcon.getLayoutRule();
        boolean isOnFirstPage = mFolder.mContent.getCurrentPage() == 0;
        final List<BubbleTextView> itemsInPreview = isOnFirstPage
@@ -281,7 +282,7 @@ public class FolderAnimationManager {

            final int previewPosX =
                    (int) ((mTmpParams.transX - iconOffsetX + previewItemOffsetX) / folderScale);
            final int previewPosY = (int) (mTmpParams.transY / folderScale);
            final int previewPosY = (int) ((mTmpParams.transY + previewItemOffsetY) / folderScale);

            final float xDistance = previewPosX - btvLp.x;
            final float yDistance = previewPosY - btvLp.y;