From 2f551ee3f23e5a10b753b4f5235843281fa4303e Mon Sep 17 00:00:00 2001
From: Cody Henthorne <cody@signal.org>
Date: Thu, 21 Apr 2022 11:30:13 -0400
Subject: [PATCH] Do not auto-leave groups you have requested to join.

---
 .../groups/v2/processing/GroupsV2StateProcessor.java          | 2 +-
 .../signalservice/api/groupsv2/DecryptedGroupUtil.java        | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java
index 16fe622177..fb7885bbfc 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java
@@ -586,7 +586,7 @@ public class GroupsV2StateProcessor {
 
           Log.i(TAG, String.format("Added as a full member of %s by %s", groupId, addedBy.getId()));
 
-          if (addedBy.isBlocked()) {
+          if (addedBy.isBlocked() && (inputGroupState.getLocalState() == null || !DecryptedGroupUtil.isRequesting(inputGroupState.getLocalState(), selfAci.uuid()))) {
             Log.i(TAG, "Added by a blocked user. Leaving group.");
             ApplicationDependencies.getJobManager().add(new LeaveGroupV2Job(groupId));
             //noinspection UnnecessaryReturnStatement
diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java
index 37caf944eb..2ff49efcd4 100644
--- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java
+++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java
@@ -232,6 +232,10 @@ public final class DecryptedGroupUtil {
            findRequestingByUuid(group.getRequestingMembersList(), uuid).isPresent();
   }
 
+  public static boolean isRequesting(DecryptedGroup group, UUID uuid) {
+    return findRequestingByUuid(group.getRequestingMembersList(), uuid).isPresent();
+  }
+
   /**
    * Removes the uuid from the full members of a group.
    * <p>
-- 
GitLab