From a959fe44a00b15e97ef49cbe5bcf72a78c658c4b Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Mon, 6 Apr 2020 18:16:40 -0700 Subject: [PATCH] Fixed the appearance of image messages that are out of view Previously we were showing image messages of all senders instead of just the last one. This is now fixed. Fixes: 153388613 Change-Id: I4e9c563c28291de25bf3dbd0ad72940ab59cad6f --- .../internal/widget/ConversationLayout.java | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/core/java/com/android/internal/widget/ConversationLayout.java b/core/java/com/android/internal/widget/ConversationLayout.java index 5a979ac97c54c..5e72fa07242e3 100644 --- a/core/java/com/android/internal/widget/ConversationLayout.java +++ b/core/java/com/android/internal/widget/ConversationLayout.java @@ -40,7 +40,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.text.TextUtils; import android.util.ArrayMap; -import android.util.ArraySet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.Gravity; @@ -537,37 +536,26 @@ public class ConversationLayout extends FrameLayout } private void updateImageMessages() { - boolean displayExternalImage = false; - ArraySet newMessages = new ArraySet<>(); - if (mIsCollapsed) { + View newMessage = null; + if (mIsCollapsed && mGroups.size() > 0) { - // When collapsed, we're displaying all image messages in a dedicated container - // on the right of the layout instead of inline. Let's add all isolated images there - int imageIndex = 0; - for (int i = 0; i < mGroups.size(); i++) { - MessagingGroup messagingGroup = mGroups.get(i); - MessagingImageMessage isolatedMessage = messagingGroup.getIsolatedMessage(); - if (isolatedMessage != null) { - newMessages.add(isolatedMessage.getView()); - displayExternalImage = true; - if (imageIndex - != mImageMessageContainer.indexOfChild(isolatedMessage.getView())) { - mImageMessageContainer.removeView(isolatedMessage.getView()); - mImageMessageContainer.addView(isolatedMessage.getView(), imageIndex); - } - imageIndex++; - } + // When collapsed, we're displaying the image message in a dedicated container + // on the right of the layout instead of inline. Let's add the isolated image there + MessagingGroup messagingGroup = mGroups.get(mGroups.size() -1); + MessagingImageMessage isolatedMessage = messagingGroup.getIsolatedMessage(); + if (isolatedMessage != null) { + newMessage = isolatedMessage.getView(); } } // Remove all messages that don't belong into the image layout - for (int i = 0; i < mImageMessageContainer.getChildCount(); i++) { - View child = mImageMessageContainer.getChildAt(i); - if (!newMessages.contains(child)) { - mImageMessageContainer.removeView(child); - i--; + View previousMessage = mImageMessageContainer.getChildAt(0); + if (previousMessage != newMessage) { + mImageMessageContainer.removeView(previousMessage); + if (newMessage != null) { + mImageMessageContainer.addView(newMessage); } } - mImageMessageContainer.setVisibility(displayExternalImage ? VISIBLE : GONE); + mImageMessageContainer.setVisibility(newMessage != null ? VISIBLE : GONE); } private void bindFacePile() {