From 67a25b3c4da9e72766993182f87419620faa7e0a Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 3 Jul 2017 13:35:18 -0700 Subject: [PATCH] Keep gutter aligned when removing notification footer Bug: 63262764 Change-Id: I94e7978dafc04fc2673a9bb8c6d24ff20641416f --- .../NotificationFooterLayout.java | 5 ++++- .../notification/NotificationItemView.java | 20 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java index b83c9b95dc..2455eabead 100644 --- a/src/com/android/launcher3/notification/NotificationFooterLayout.java +++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java @@ -206,7 +206,10 @@ public class NotificationFooterLayout extends FrameLayout { @Override public void onAnimationEnd(Animator animation) { ((ViewGroup) getParent()).findViewById(R.id.divider).setVisibility(GONE); - ((ViewGroup) getParent()).removeView(NotificationFooterLayout.this); + // Keep view around because gutter is aligned to it, but remove height to + // both hide the view and keep calculations correct for last dismissal. + getLayoutParams().height = 0; + requestLayout(); } }); collapseFooter.start(); diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java index 0cd5a4c40f..11f6aa081a 100644 --- a/src/com/android/launcher3/notification/NotificationItemView.java +++ b/src/com/android/launcher3/notification/NotificationItemView.java @@ -17,6 +17,8 @@ package com.android.launcher3.notification; import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.app.Notification; import android.content.Context; import android.graphics.Rect; @@ -28,7 +30,9 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.android.launcher3.ItemInfo; +import com.android.launcher3.LauncherAnimUtils; import com.android.launcher3.R; +import com.android.launcher3.anim.PropertyResetListener; import com.android.launcher3.anim.RoundedRectRevealOutlineProvider; import com.android.launcher3.graphics.IconPalette; import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; @@ -89,6 +93,8 @@ public class NotificationItemView extends PopupItemView implements LogContainerP } public Animator animateHeightRemoval(int heightToRemove, boolean shouldRemoveFromTop) { + AnimatorSet anim = LauncherAnimUtils.createAnimatorSet(); + Rect startRect = new Rect(mPillRect); Rect endRect = new Rect(mPillRect); if (shouldRemoveFromTop) { @@ -96,8 +102,18 @@ public class NotificationItemView extends PopupItemView implements LogContainerP } else { endRect.bottom -= heightToRemove; } - return new RoundedRectRevealOutlineProvider(getBackgroundRadius(), getBackgroundRadius(), - startRect, endRect, mRoundedCorners).createRevealAnimator(this, false); + anim.play(new RoundedRectRevealOutlineProvider(getBackgroundRadius(), getBackgroundRadius(), + startRect, endRect, mRoundedCorners).createRevealAnimator(this, false)); + + View bottomGutter = findViewById(R.id.gutter_bottom); + if (bottomGutter != null && bottomGutter.getVisibility() == VISIBLE) { + Animator translateGutter = ObjectAnimator.ofFloat(bottomGutter, TRANSLATION_Y, + -heightToRemove); + translateGutter.addListener(new PropertyResetListener<>(TRANSLATION_Y, 0f)); + anim.play(translateGutter); + } + + return anim; } public void updateHeader(int notificationCount, @Nullable IconPalette palette) {