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