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

Commit bdb5424f authored by Jon Miranda's avatar Jon Miranda Committed by Jonathan Miranda
Browse files

Fade in the FolderIcon stroke after Folder animates closed.

When the Folder animates closed, it hides itself the same
time as the FolderIcon becomes visible. Because the Folder
does not have the white stroke outline, there is a visual
jump between the closed Folder and the FolderIcon.

This change is a subtle and easy step towards reducing
the visual jump.

Bug: 35064148
Change-Id: I8aeeed873e7144499d19f3b01c85bfa8a792097f
parent d9125d84
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -783,6 +783,7 @@ public class Folder extends AbstractFloatingView implements DragSource, View.OnC
        if (mFolderIcon != null) {
            mFolderIcon.setVisibility(View.VISIBLE);
            if (wasAnimated) {
                mFolderIcon.mBackground.animateBackgroundStroke();
                mFolderIcon.requestFocus();
            }
        }
+33 −1
Original line number Diff line number Diff line
@@ -547,6 +547,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
        private float mScale = 1f;
        private float mColorMultiplier = 1f;
        private float mStrokeWidth;
        private int mStrokeAlpha = MAX_BG_OPACITY;
        private View mInvalidateDelegate;

        public int previewSize;
@@ -572,6 +573,21 @@ public class FolderIcon extends FrameLayout implements FolderListener {
        private static final int SHADOW_OPACITY = 40;

        ValueAnimator mScaleAnimator;
        ObjectAnimator mStrokeAlphaAnimator;

        private static final Property<PreviewBackground, Integer> STROKE_ALPHA =
                new Property<PreviewBackground, Integer>(Integer.class, "strokeAlpha") {
                    @Override
                    public Integer get(PreviewBackground previewBackground) {
                        return previewBackground.mStrokeAlpha;
                    }

                    @Override
                    public void set(PreviewBackground previewBackground, Integer alpha) {
                        previewBackground.mStrokeAlpha = alpha;
                        previewBackground.invalidate();
                    }
                };

        public void setup(DisplayMetrics dm, DeviceProfile grid, View invalidateDelegate,
                   int availableSpace, int topPadding) {
@@ -681,8 +697,24 @@ public class FolderIcon extends FrameLayout implements FolderListener {
            canvas.restoreToCount(saveCount);
        }

        public void animateBackgroundStroke() {
            if (mStrokeAlphaAnimator != null) {
                mStrokeAlphaAnimator.cancel();
            }
            mStrokeAlphaAnimator = ObjectAnimator
                    .ofArgb(this, STROKE_ALPHA, MAX_BG_OPACITY / 2, MAX_BG_OPACITY)
                    .setDuration(100);
            mStrokeAlphaAnimator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    mStrokeAlphaAnimator = null;
                }
            });
            mStrokeAlphaAnimator.start();
        }

        public void drawBackgroundStroke(Canvas canvas) {
            mPaint.setColor(Color.argb(255, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
            mPaint.setColor(Color.argb(mStrokeAlpha, BG_INTENSITY, BG_INTENSITY, BG_INTENSITY));
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(mStrokeWidth);
            drawCircle(canvas, 1 /* deltaRadius */);