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

Commit ea134a10 authored by Jon Miranda's avatar Jon Miranda Committed by Android (Google) Code Review
Browse files

Merge "Crop taskbar icons during stash/unstash animation." into tm-qpr-dev

parents bfcdd235 11b47c54
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -596,6 +596,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
            }
        }

        if (DisplayController.isTransientTaskbar(mActivity)) {
            fullLengthAnimatorSet.play(mControllers.taskbarViewController
                    .createRevealAnimToIsStashed(isStashed));
        }
        fullLengthAnimatorSet.play(mControllers.stashedHandleViewController
                .createRevealAnimToIsStashed(isStashed));
        // Return the stashed handle to its default scale in case it was changed as part of the
+41 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import static com.android.launcher3.taskbar.TaskbarManager.isPhoneMode;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_NEGATIVE;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.VERTICAL;

import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.graphics.Rect;
import android.util.FloatProperty;
@@ -49,6 +51,8 @@ import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.RevealOutlineAnimation;
import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.icons.ThemedIconDrawable;
@@ -95,6 +99,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
    private float mTaskbarIconTranslationYForSwipe;

    private final int mTaskbarBottomMargin;
    private final int mStashedHandleHeight;

    private final AnimatedFloat mThemeIconsBackground = new AnimatedFloat(
            this::updateIconsBackground);
@@ -127,6 +132,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
        mTaskbarBottomMargin = DisplayController.isTransientTaskbar(activity)
                ? activity.getResources().getDimensionPixelSize(R.dimen.transient_taskbar_margin)
                : 0;
        mStashedHandleHeight = activity.getResources()
                .getDimensionPixelSize(R.dimen.taskbar_stashed_handle_height);

        if (DisplayController.isTransientTaskbar(mActivity)) {
            mSwipeDownDetector = new SingleAxisSwipeDetector(activity,
@@ -280,6 +287,40 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
                ));
    }

    private ValueAnimator createRevealAnimForView(View view, boolean isStashed) {
        Rect viewBounds = new Rect(0, 0, view.getWidth(), view.getHeight());
        int centerY = viewBounds.centerY();
        int halfHandleHeight = mStashedHandleHeight / 2;

        Rect stashedRect = new Rect(viewBounds.left,
                centerY - halfHandleHeight,
                viewBounds.right,
                centerY + halfHandleHeight);

        float radius = 0;
        float stashedRadius = viewBounds.width() / 2f;

        return new RoundedRectRevealOutlineProvider(radius, stashedRadius, viewBounds, stashedRect)
                .createRevealAnimator(view, !isStashed, 0);
    }

    /**
     * Creates and returns a {@link RevealOutlineAnimation} Animator that updates the icon shape
     * and size.
     * @param isStashed When true, the icon crops vertically to the size of the stashed handle.
     *                  When false, the reverse happens.
     */
    public AnimatorSet createRevealAnimToIsStashed(boolean isStashed) {
        AnimatorSet as = new AnimatorSet();
        for (int i = mTaskbarView.getChildCount() - 1; i >= 0; i--) {
            View child = mTaskbarView.getChildAt(i);
            if (child instanceof BubbleTextView) {
                as.play(createRevealAnimForView(child, isStashed));
            }
        }
        return as;
    }

    /**
     * Sets the taskbar icon alignment relative to Launcher hotseat icons
     * @param alignmentRatio [0, 1]