From e5c9dddb5aa031a4c0c3f01733993665ee2921f9 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 16 Jun 2021 12:45:04 -0400 Subject: [PATCH] Fix ANR when generating group message snippets. --- .../ConversationListItem.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 4d11afc488..9a57faace7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -48,7 +48,6 @@ import org.thoughtcrime.securesms.components.DeliveryStatusView; import org.thoughtcrime.securesms.components.FromTextView; import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.components.TypingIndicatorView; -import org.thoughtcrime.securesms.search.MessageResult; import org.thoughtcrime.securesms.database.MmsSmsColumns; import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.ThreadDatabase; @@ -61,6 +60,7 @@ import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientForeverObserver; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.search.MessageResult; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.Debouncer; import org.thoughtcrime.securesms.util.ExpirationUtil; @@ -495,26 +495,22 @@ public final class ConversationListItem extends ConstraintLayout return emphasisAdded(context, context.getString(thread.isOutgoing() ? R.string.ThreadRecord_you_deleted_this_message : R.string.ThreadRecord_this_message_was_deleted), defaultTint); } else { String body = removeNewlines(thread.getBody()); - if (thread.getRecipient().isGroup()) { - RecipientId groupMessageSender = thread.getGroupMessageSender(); - if (!groupMessageSender.isUnknown()) { - return describeGroupMessage(context, body, groupMessageSender, thread.isRead()); + + LiveData finalBody = recipientToStringAsync(thread.getRecipient().getId(), threadRecipient -> { + if (threadRecipient.isGroup()) { + RecipientId groupMessageSender = thread.getGroupMessageSender(); + if (!groupMessageSender.isUnknown()) { + return createGroupMessageUpdateString(context, body, Recipient.resolved(groupMessageSender), thread.isRead()); + } } - } - return LiveDataUtil.just(new SpannableString(body)); + return new SpannableString(body); + }); + + return whileLoadingShow(body, finalBody); } } } - private static LiveData describeGroupMessage(@NonNull Context context, - @NonNull String body, - @NonNull RecipientId groupMessageSender, - boolean read) - { - return whileLoadingShow(body, recipientToStringAsync(groupMessageSender, - r -> createGroupMessageUpdateString(context, body, r, read))); - } - private static SpannableString createGroupMessageUpdateString(@NonNull Context context, @NonNull String body, @NonNull Recipient recipient,