From 34a9b021a67e973f84a00ba37599cfcf73d4e9f3 Mon Sep 17 00:00:00 2001 From: Taesu Lee Date: Fri, 6 Mar 2020 17:38:15 +0900 Subject: Fix WindowLeaked issue on AttachmentPreview Stop attaching animation before removal attachment views and hiding the AttachmentPreview. Test: Long-press to attach a media from GalleryGridView and uncheck the media to detach immediately. Change-Id: Ia1014609c056c9f35e428f8968b58dc2c1b704f9 Signed-off-by: Taesu Lee --- src/com/android/messaging/ui/AttachmentPreview.java | 16 ++++++++++++++-- src/com/android/messaging/ui/MultiAttachmentLayout.java | 7 ++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/android/messaging/ui/AttachmentPreview.java b/src/com/android/messaging/ui/AttachmentPreview.java index 7eea14b..f4465c4 100644 --- a/src/com/android/messaging/ui/AttachmentPreview.java +++ b/src/com/android/messaging/ui/AttachmentPreview.java @@ -57,6 +57,8 @@ public class AttachmentPreview extends ScrollView implements OnAttachmentClickLi private Runnable mHideRunnable; private boolean mPendingHideCanceled; + private PopupTransitionAnimation mPopupTransitionAnimation; + private static final int CLOSE_BUTTON_REVEAL_STAGGER_MILLIS = 300; public AttachmentPreview(final Context context, final AttributeSet attrs) { @@ -132,6 +134,7 @@ public class AttachmentPreview extends ScrollView implements OnAttachmentClickLi public void run() { // Only hide if we are didn't get overruled by showing if (!mPendingHideCanceled) { + stopPopupAnimation(); mAttachmentView.removeAllViews(); setVisibility(GONE); } @@ -280,10 +283,19 @@ public class AttachmentPreview extends ScrollView implements OnAttachmentClickLi mHideRunnable.run(); } - static void tryAnimateViewIn(final MessagePartData attachmentData, final View view) { + private void tryAnimateViewIn(final MessagePartData attachmentData, final View view) { if (attachmentData instanceof MediaPickerMessagePartData) { final Rect startRect = ((MediaPickerMessagePartData) attachmentData).getStartRect(); - new PopupTransitionAnimation(startRect, view).startAfterLayoutComplete(); + stopPopupAnimation(); + mPopupTransitionAnimation = new PopupTransitionAnimation(startRect, view); + mPopupTransitionAnimation.startAfterLayoutComplete(); + } + } + + private void stopPopupAnimation() { + if (mPopupTransitionAnimation != null) { + mPopupTransitionAnimation.cancel(); + mPopupTransitionAnimation = null; } } diff --git a/src/com/android/messaging/ui/MultiAttachmentLayout.java b/src/com/android/messaging/ui/MultiAttachmentLayout.java index f620245..5bae8a5 100644 --- a/src/com/android/messaging/ui/MultiAttachmentLayout.java +++ b/src/com/android/messaging/ui/MultiAttachmentLayout.java @@ -33,6 +33,7 @@ import com.android.messaging.datamodel.data.MessagePartData; import com.android.messaging.datamodel.data.PendingAttachmentData; import com.android.messaging.datamodel.media.ImageRequestDescriptor; import com.android.messaging.ui.AsyncImageView.AsyncImageViewDelayLoader; +import com.android.messaging.ui.animation.PopupTransitionAnimation; import com.android.messaging.util.AccessibilityUtil; import com.android.messaging.util.Assert; import com.android.messaging.util.UiUtils; @@ -275,7 +276,11 @@ public class MultiAttachmentLayout extends FrameLayout { // views will slide from their previous position to their new position within the // layout if (i == 0) { - AttachmentPreview.tryAnimateViewIn(attachment, attachmentWrapper.view); + if (attachment instanceof MediaPickerMessagePartData) { + final Rect startRect = ((MediaPickerMessagePartData) attachment).getStartRect(); + new PopupTransitionAnimation(startRect, attachmentWrapper.view) + .startAfterLayoutComplete(); + } } attachmentWrapper.needsSlideAnimation = i > 0; } -- cgit v1.2.3