From fe435433fda0400545b5e758b2e94fbaa0055832 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 29 May 2026 12:28:42 -0400 Subject: [PATCH] Add missing handler for group request join/cancel update. Co-authored-by: Greyson Parrelli --- .../conversation/ConversationUpdateItem.java | 2 +- .../model/GroupsV2UpdateMessageProducer.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index 2813c7b07b..9d0ef55378 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -784,7 +784,7 @@ public final class ConversationUpdateItem extends FrameLayout return false; } - return (messageRecord.isCollapsedGroupV2JoinUpdate() && !nextMessageRecord.map(m -> m.isGroupV2JoinRequest(toBlock.requireServiceId())).orElse(false)) || + return (messageRecord.isCollapsedGroupV2JoinUpdate(toBlock.requireServiceId()) && !nextMessageRecord.map(m -> m.isGroupV2JoinRequest(toBlock.requireServiceId())).orElse(false)) || (messageRecord.isGroupV2JoinRequest(toBlock.requireServiceId()) && previousMessageRecord.map(m -> m.isCollapsedGroupV2JoinUpdate(toBlock.requireServiceId())).orElse(false)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java index b513528f28..7047b87239 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java @@ -54,6 +54,7 @@ import org.signal.archive.proto.GroupMemberRemovedUpdate; import org.signal.archive.proto.GroupMembershipAccessLevelChangeUpdate; import org.signal.archive.proto.GroupNameUpdate; import org.signal.archive.proto.GroupSelfInvitationRevokedUpdate; +import org.signal.archive.proto.GroupSequenceOfRequestsAndCancelsUpdate; import org.signal.archive.proto.GroupTerminateChangeUpdate; import org.signal.archive.proto.GroupUnknownInviteeUpdate; import org.signal.archive.proto.GroupV2AccessLevel; @@ -199,6 +200,8 @@ final class GroupsV2UpdateMessageProducer { describeGroupJoinRequestApprovedUpdate(update.groupJoinRequestApprovalUpdate, updates); } else if (update.groupJoinRequestCanceledUpdate != null) { describeGroupJoinRequestCanceledUpdate(update.groupJoinRequestCanceledUpdate, updates); + } else if (update.groupSequenceOfRequestsAndCancelsUpdate != null) { + describeGroupSequenceOfRequestsAndCancelsUpdate(update.groupSequenceOfRequestsAndCancelsUpdate, updates); } else if (update.groupInviteLinkResetUpdate != null) { describeInviteLinkResetUpdate(update.groupInviteLinkResetUpdate, updates); } else if (update.groupInviteLinkEnabledUpdate != null) { @@ -378,6 +381,18 @@ final class GroupsV2UpdateMessageProducer { } } + private void describeGroupSequenceOfRequestsAndCancelsUpdate(@NonNull GroupSequenceOfRequestsAndCancelsUpdate update, @NonNull List updates) { + if (selfIds.matches(update.requestorAci)) { + updates.add(updateDescription(context.getString(R.string.MessageRecord_you_canceled_your_request_to_join_the_group), Glyph.GROUP)); + } else { + updates.add(updateDescription(R.plurals.MessageRecord_s_requested_and_cancelled_their_request_to_join_via_the_group_link, + update.count, + update.requestorAci, + update.count, + Glyph.GROUP)); + } + } + private void describeGroupJoinRequestApprovedUpdate(@NonNull GroupJoinRequestApprovalUpdate update, @NonNull List updates) { boolean requestingMemberIsYou = selfIds.matches(update.requestorAci);