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

Commit aaff476c authored by Tony Wickham's avatar Tony Wickham Committed by Android (Google) Code Review
Browse files

Merge "Handle back-to-back height reduction animations" into ub-launcher3-dorval

parents 2bb1e74c 24ba787d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -76,6 +76,11 @@ public class NotificationItemView extends PopupItemView implements LogContainerP
        mSwipeHelper.setDisableHardwareLayers(true);
    }

    public int getHeightMinusFooter() {
        int footerHeight = mFooter.getParent() == null ? 0 : mFooter.getHeight();
        return getHeight() - footerHeight;
    }

    public Animator animateHeightRemoval(int heightToRemove) {
        final int newHeight = getHeight() - heightToRemove;
        return new PillHeightRevealOutlineProvider(mPillRect,
+19 −14
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra

    protected Animator mOpenCloseAnimator;
    private boolean mDeferContainerRemoval;
    private AnimatorSet mReduceHeightAnimatorSet;

    public PopupContainerWithArrow(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
@@ -584,7 +585,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
                    R.integer.config_removeNotificationViewDuration);
            final int spacing = getResources().getDimensionPixelSize(R.dimen.popup_items_spacing);
            removeNotification.play(reduceNotificationViewHeight(
                    mNotificationItemView.getHeight() + spacing, duration));
                    mNotificationItemView.getHeightMinusFooter() + spacing, duration));
            final View removeMarginView = mIsAboveIcon ? getItemViewAt(getItemCount() - 2)
                    : mNotificationItemView;
            if (removeMarginView != null) {
@@ -642,9 +643,12 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
     * Animates the height of the notification item and the translationY of other items accordingly.
     */
    public Animator reduceNotificationViewHeight(int heightToRemove, int duration) {
        if (mReduceHeightAnimatorSet != null) {
            mReduceHeightAnimatorSet.cancel();
        }
        final int translateYBy = mIsAboveIcon ? heightToRemove : -heightToRemove;
        AnimatorSet animatorSet = LauncherAnimUtils.createAnimatorSet();
        animatorSet.play(mNotificationItemView.animateHeightRemoval(heightToRemove));
        mReduceHeightAnimatorSet = LauncherAnimUtils.createAnimatorSet();
        mReduceHeightAnimatorSet.play(mNotificationItemView.animateHeightRemoval(heightToRemove));
        PropertyResetListener<View, Float> resetTranslationYListener
                = new PropertyResetListener<>(TRANSLATION_Y, 0f);
        for (int i = 0; i < getItemCount(); i++) {
@@ -656,20 +660,21 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
            ValueAnimator translateItem = ObjectAnimator.ofFloat(itemView, TRANSLATION_Y,
                    itemView.getTranslationY() + translateYBy).setDuration(duration);
            translateItem.addListener(resetTranslationYListener);
            animatorSet.play(translateItem);
            mReduceHeightAnimatorSet.play(translateItem);
        }
        mReduceHeightAnimatorSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                if (mIsAboveIcon) {
                    // All the items, including the notification item, translated down, but the
                    // container itself did not. This means the items would jump back to their
                    // original translation unless we update the container's translationY here.
            animatorSet.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    setTranslationY(getTranslationY() + translateYBy);
                }
            });
                mReduceHeightAnimatorSet = null;
            }
        return animatorSet;
        });
        return mReduceHeightAnimatorSet;
    }

    @Override