From 5175375483835e8cfb705f785700d9978cb9af89 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 21 Sep 2021 11:17:31 -0400 Subject: [PATCH] Fix crash when getting update body on main thread. --- .../securesms/conversation/ConversationItem.java | 10 +++++----- .../database/model/MediaMmsMessageRecord.java | 2 ++ .../securesms/database/model/MessageRecord.java | 6 ++++++ .../securesms/database/model/SmsMessageRecord.java | 2 ++ .../thoughtcrime/securesms/util/MessageRecordUtil.kt | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index caab3dda73..d6fe3987e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -1055,7 +1055,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo mediaThumbnailStub.require().setDownloadClickListener(downloadClickListener); mediaThumbnailStub.require().setOnLongClickListener(passthroughClickListener); mediaThumbnailStub.require().setOnClickListener(passthroughClickListener); - mediaThumbnailStub.require().showShade(TextUtils.isEmpty(messageRecord.getDisplayBody(getContext())) && !hasExtraText(messageRecord)); + mediaThumbnailStub.require().showShade(messageRecord.isDisplayBodyEmpty(getContext()) && !hasExtraText(messageRecord)); if (!messageRecord.isOutgoing()) { mediaThumbnailStub.require().setConversationColor(getDefaultBubbleColor(hasWallpaper)); @@ -1166,7 +1166,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo } } - if (!TextUtils.isEmpty(current.getDisplayBody(getContext()))) { + if (!current.isDisplayBodyEmpty(getContext())) { bottomStart = 0; bottomEnd = 0; } @@ -1194,7 +1194,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo } private void setSharedContactCorners(@NonNull MessageRecord current, @NonNull Optional previous, @NonNull Optional next, boolean isGroupThread) { - if (TextUtils.isEmpty(messageRecord.getDisplayBody(getContext()))){ + if (messageRecord.isDisplayBodyEmpty(getContext())){ if (isSingularMessage(current, previous, next, isGroupThread) || isEndOfMessageCluster(current, next, isGroupThread)) { sharedContactStub.get().setSingularStyle(); } else if (current.isOutgoing()) { @@ -1414,9 +1414,9 @@ public final class ConversationItem extends RelativeLayout implements BindableCo private ConversationItemFooter getActiveFooter(@NonNull MessageRecord messageRecord) { if (hasNoBubble(messageRecord) && stickerFooter != null) { return stickerFooter; - } else if (hasSharedContact(messageRecord) && TextUtils.isEmpty(messageRecord.getDisplayBody(getContext()))) { + } else if (hasSharedContact(messageRecord) && messageRecord.isDisplayBodyEmpty(getContext())) { return sharedContactStub.get().getFooter(); - } else if (hasOnlyThumbnail(messageRecord) && TextUtils.isEmpty(messageRecord.getDisplayBody(getContext()))) { + } else if (hasOnlyThumbnail(messageRecord) && messageRecord.isDisplayBodyEmpty(getContext())) { return mediaThumbnailStub.require().getFooter(); } else { return footer; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java index 1d66145c98..2e50fc6468 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java @@ -21,6 +21,7 @@ import android.text.SpannableString; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; @@ -108,6 +109,7 @@ public class MediaMmsMessageRecord extends MmsMessageRecord { } @Override + @WorkerThread public SpannableString getDisplayBody(@NonNull Context context) { if (MmsDatabase.Types.isChatSessionRefresh(type)) { return emphasisAdded(context.getString(R.string.MmsMessageRecord_bad_encrypted_mms_message)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index 971bdd4a8e..510ba37773 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -26,6 +26,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; import androidx.core.content.ContextCompat; import com.annimon.stream.Stream; @@ -131,6 +132,7 @@ public abstract class MessageRecord extends DisplayRecord { } @Override + @WorkerThread public SpannableString getDisplayBody(@NonNull Context context) { UpdateDescription updateDisplayBody = getUpdateDisplayBody(context); @@ -203,6 +205,10 @@ public abstract class MessageRecord extends DisplayRecord { return null; } + public boolean isDisplayBodyEmpty(@NonNull Context context) { + return getUpdateDisplayBody(context) == null && getBody().isEmpty(); + } + public boolean isSelfCreatedGroup() { DecryptedGroupV2Context decryptedGroupV2Context = getDecryptedGroupV2Context(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java index 7435185de3..badd764444 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java @@ -21,6 +21,7 @@ import android.content.Context; import android.text.SpannableString; import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.MmsSmsColumns; @@ -64,6 +65,7 @@ public class SmsMessageRecord extends MessageRecord { } @Override + @WorkerThread public SpannableString getDisplayBody(@NonNull Context context) { if (SmsDatabase.Types.isChatSessionRefresh(type)) { return emphasisAdded(context.getString(R.string.MessageRecord_chat_session_refreshed)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt index f103c70bd1..aeeb252b20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt @@ -31,7 +31,7 @@ fun MessageRecord.hasAudio(): Boolean = isMms && (this as MmsMessageRecord).slideDeck.audioSlide != null fun MessageRecord.isCaptionlessMms(context: Context): Boolean = - getDisplayBody(context).isEmpty() && isMms && (this as MmsMessageRecord).slideDeck.textSlide == null + isMms && isDisplayBodyEmpty(context) && (this as MmsMessageRecord).slideDeck.textSlide == null fun MessageRecord.hasThumbnail(): Boolean = isMms && (this as MmsMessageRecord).slideDeck.thumbnailSlide != null