From 3ec5974210e6441105e10eb892b32acbfe3c3700 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Thu, 9 Apr 2020 09:41:01 +1000 Subject: [PATCH] Correctly display when user was kicked or added --- .../groups/GroupMessageProcessor.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java b/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java index c9145e77e1..a0dff036ac 100644 --- a/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java +++ b/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java @@ -146,40 +146,40 @@ public class GroupMessageProcessor { } } - Set
recordMembers = new HashSet<>(groupRecord.getMembers()); - Set
messageMembers = new HashSet<>(); + Set
currentMembers = new HashSet<>(groupRecord.getMembers()); + Set
newMembers = new HashSet<>(); for (String messageMember : group.getMembers().get()) { - messageMembers.add(Address.fromExternal(context, messageMember)); + newMembers.add(Address.fromExternal(context, messageMember)); } - Set
addedMembers = new HashSet<>(messageMembers); - addedMembers.removeAll(recordMembers); + // Added members are the members who are present in newMembers but not in currentMembers + Set
addedMembers = new HashSet<>(newMembers); + addedMembers.removeAll(currentMembers); - Set
missingMembers = new HashSet<>(recordMembers); - missingMembers.removeAll(messageMembers); + // Kicked members are members who are present in currentMembers but not in newMembers + Set
removedMembers = new HashSet<>(currentMembers); + removedMembers.removeAll(newMembers); GroupContext.Builder builder = createGroupContext(group); builder.setType(GroupContext.Type.UPDATE); - if (addedMembers.size() > 0) { - Set
unionMembers = new HashSet<>(recordMembers); - unionMembers.addAll(messageMembers); - database.updateMembers(id, new LinkedList<>(unionMembers)); - - builder.clearMembers(); - - for (Address addedMember : addedMembers) { - builder.addMembers(addedMember.serialize()); - } - } else { - builder.clearMembers(); + // Update our group members if they're different + if (!currentMembers.equals(newMembers)) { + database.updateMembers(id, new LinkedList<>(newMembers)); } - if (missingMembers.size() > 0) { - for (Address removedMember : missingMembers) { - builder.addMembers(removedMember.serialize()); - } + builder.clearMembers(); + + // We add any new or removed members to the group context + // This will allow us later to iterate over them to check if they left or were added for UI display + + for (Address addedMember : addedMembers) { + builder.addMembers(addedMember.serialize()); + } + + for (Address removedMember : removedMembers) { + builder.addMembers(removedMember.serialize()); } if (group.getName().isPresent() || group.getAvatar().isPresent()) {