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 9da8864ea6..cce190e08b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java
@@ -233,6 +233,15 @@ public final class ConversationUpdateItem extends LinearLayout
actionButton.setVisibility(GONE);
actionButton.setOnClickListener(null);
}
+ } else if (conversationMessage.getMessageRecord().isSelfCreatedGroup()) {
+ actionButton.setText(R.string.ConversationUpdateItem_invite_friends);
+ actionButton.setVisibility(VISIBLE);
+ actionButton.setOnClickListener(v -> {
+ if (batchSelected.isEmpty() && eventListener != null) {
+ // TODO [alan]
+ Log.i(TAG, "TODO");
+ }
+ });
} else {
actionButton.setVisibility(GONE);
actionButton.setOnClickListener(null);
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 6da825ca0e..b0aac88948 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
@@ -32,6 +32,7 @@ import com.annimon.stream.Stream;
import org.signal.core.util.logging.Log;
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
+import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase;
@@ -56,6 +57,7 @@ import org.whispersystems.signalservice.api.util.UuidUtil;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
@@ -194,6 +196,26 @@ public abstract class MessageRecord extends DisplayRecord {
return null;
}
+ public boolean isSelfCreatedGroup() {
+ if (!isGroupUpdate() || !isGroupV2()) return false;
+
+ try {
+ byte[] decoded = Base64.decode(getBody());
+ DecryptedGroupChange change = DecryptedGroupV2Context.parseFrom(decoded)
+ .getChange();
+
+ return selfCreatedGroup(change);
+ } catch (IOException e) {
+ Log.w(TAG, "GV2 Message update detail could not be read", e);
+ return false;
+ }
+ }
+
+ private static boolean selfCreatedGroup(@NonNull DecryptedGroupChange change) {
+ return change.getRevision() == 0 &&
+ change.getEditor().equals(UuidUtil.toByteString(Recipient.self().requireUuid()));
+ }
+
public static @NonNull UpdateDescription getGv2ChangeDescription(@NonNull Context context, @NonNull String body) {
try {
ShortStringDescriptionStrategy descriptionStrategy = new ShortStringDescriptionStrategy(context);
@@ -203,6 +225,9 @@ public abstract class MessageRecord extends DisplayRecord {
if (decryptedGroupV2Context.hasChange() && (decryptedGroupV2Context.getGroupState().getRevision() != 0 || decryptedGroupV2Context.hasPreviousGroupState())) {
return UpdateDescription.concatWithNewLines(updateMessageProducer.describeChanges(decryptedGroupV2Context.getPreviousGroupState(), decryptedGroupV2Context.getChange()));
+ } else if (selfCreatedGroup(decryptedGroupV2Context.getChange())) {
+ return UpdateDescription.concatWithNewLines(Arrays.asList(updateMessageProducer.describeNewGroup(decryptedGroupV2Context.getGroupState(), decryptedGroupV2Context.getChange()),
+ staticUpdateDescription(context.getString(R.string.MessageRecord_invite_friends_to_this_group), 0)));
} else {
return updateMessageProducer.describeNewGroup(decryptedGroupV2Context.getGroupState(), decryptedGroupV2Context.getChange());
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b22ae79e57..38dd131497 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1081,6 +1081,7 @@
You created the group.
Group updated.
+ Invite friends to this group via a group link
You added %1$s.
@@ -1954,6 +1955,7 @@
Join call
Return to call
Call is full
+ Invite friends
Play … Pause