From 5e68388b01c95cb77793389d1e6bb1d236c0d0b0 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 1 Aug 2023 15:31:34 -0400 Subject: [PATCH] Fix crash when on recipient change called after requesting to remove observer. --- .../securesms/conversation/ConversationItem.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 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 ef2bf15514..12cdb80333 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -261,6 +261,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo private boolean hasWallpaper; private float lastYDownRelativeToThis; private ProjectionList colorizerProjections = new ProjectionList(3); + private boolean isBound = false; private final Runnable shrinkBubble = new Runnable() { @Override @@ -387,9 +388,6 @@ public final class ConversationItem extends RelativeLayout implements BindableCo this.displayMode = displayMode; this.previousMessage = previousMessageRecord; - this.author.observeForever(this); - this.conversationRecipient.observeForever(this); - setGutterSizes(messageRecord, groupThread); setMessageShape(messageRecord, previousMessageRecord, nextMessageRecord, groupThread); setMediaAttributes(messageRecord, previousMessageRecord, nextMessageRecord, groupThread, hasWallpaper, isMessageRequestAccepted, allowedToPlayInline); @@ -412,6 +410,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (audioViewStub.resolved()) { audioViewStub.get().setOnLongClickListener(passthroughClickListener); } + + isBound = true; + this.author.observeForever(this); + this.conversationRecipient.observeForever(this); } @Override @@ -629,6 +631,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo @Override public void onRecipientChanged(@NonNull Recipient modified) { + if (!isBound) { + return; + } + if (conversationRecipient.getId().equals(modified.getId())) { setBubbleState(messageRecord, modified, modified.hasWallpaper(), colorizer); @@ -683,6 +689,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo @Override public void unbind() { + isBound = false; + if (author != null) { author.removeForeverObserver(this); }