From 81ebe383f5c9ef9ebff7fefe641469e74ec44f23 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 15 Mar 2017 14:41:18 -0700 Subject: [PATCH] Small cleanup for notifications - Add null check when collapsing footer, as container could be null if the app is opened - Remove redundant method that always passed mNotificationItemView - Set mNotificationItemView to null when it is removed Change-Id: Ia329815224b213fc688733eaaf6f29ee6888caaf --- .../NotificationFooterLayout.java | 20 ++++++++++--------- .../notification/NotificationItemView.java | 3 --- .../popup/PopupContainerWithArrow.java | 15 ++++++-------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java index 2e803417db..1eef743fe8 100644 --- a/src/com/android/launcher3/notification/NotificationFooterLayout.java +++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java @@ -198,15 +198,17 @@ public class NotificationFooterLayout extends FrameLayout { // There are no more icons in the footer, so hide it. PopupContainerWithArrow popup = PopupContainerWithArrow.getOpen( Launcher.getLauncher(getContext())); - Animator collapseFooter = popup.reduceNotificationViewHeight(getHeight(), - getResources().getInteger(R.integer.config_removeNotificationViewDuration)); - collapseFooter.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - ((ViewGroup) getParent()).removeView(NotificationFooterLayout.this); - } - }); - collapseFooter.start(); + if (popup != null) { + Animator collapseFooter = popup.reduceNotificationViewHeight(getHeight(), + getResources().getInteger(R.integer.config_removeNotificationViewDuration)); + collapseFooter.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + ((ViewGroup) getParent()).removeView(NotificationFooterLayout.this); + } + }); + collapseFooter.start(); + } } } diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java index a340742713..c6268e27d2 100644 --- a/src/com/android/launcher3/notification/NotificationItemView.java +++ b/src/com/android/launcher3/notification/NotificationItemView.java @@ -23,7 +23,6 @@ import android.graphics.Rect; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup; import android.widget.FrameLayout; import com.android.launcher3.ItemInfo; @@ -85,8 +84,6 @@ public class NotificationItemView extends PopupItemView implements LogContainerP MeasureSpec.makeMeasureSpec(newHeight, MeasureSpec.EXACTLY)); initializeBackgroundClipping(true /* force */); invalidate(); - } else { - ((ViewGroup) getParent()).removeView(NotificationItemView.this); } } }); diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index b8d38f5879..1eac07608e 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -568,7 +568,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)); + mNotificationItemView.getHeight() + spacing, duration)); final View removeMarginView = mIsAboveIcon ? getItemViewAt(getItemCount() - 2) : mNotificationItemView; if (removeMarginView != null) { @@ -588,6 +588,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra @Override public void onAnimationEnd(Animator animation) { removeView(mNotificationItemView); + mNotificationItemView = null; if (getItemCount() == 0) { close(false); return; @@ -612,19 +613,19 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra return LauncherAnimUtils.ofPropertyValuesHolder( mArrow, new PropertyListBuilder().scale(scale).build()); } + /** * Animates the height of the notification item and the translationY of other items accordingly. */ - public Animator reduceNotificationViewHeight(int heightToRemove, int duration, - NotificationItemView notificationItem) { + public Animator reduceNotificationViewHeight(int heightToRemove, int duration) { final int translateYBy = mIsAboveIcon ? heightToRemove : -heightToRemove; AnimatorSet animatorSet = LauncherAnimUtils.createAnimatorSet(); - animatorSet.play(notificationItem.animateHeightRemoval(heightToRemove)); + animatorSet.play(mNotificationItemView.animateHeightRemoval(heightToRemove)); PropertyResetListener resetTranslationYListener = new PropertyResetListener<>(TRANSLATION_Y, 0f); for (int i = 0; i < getItemCount(); i++) { final PopupItemView itemView = getItemViewAt(i); - if (!mIsAboveIcon && itemView == notificationItem) { + if (!mIsAboveIcon && itemView == mNotificationItemView) { // The notification view is already in the right place when container is below icon. continue; } @@ -647,10 +648,6 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra return animatorSet; } - public Animator reduceNotificationViewHeight(int heightToRemove, int duration) { - return reduceNotificationViewHeight(heightToRemove, duration, mNotificationItemView); - } - @Override public boolean supportsAppInfoDropTarget() { return true;