Update message request states for 1:1 and groups chats.

This commit is contained in:
Michelle Tang
2025-02-20 10:18:40 -05:00
committed by Greyson Parrelli
parent 20cecbd5cd
commit 886bebb088
38 changed files with 799 additions and 89 deletions

View File

@@ -47,7 +47,8 @@ import kotlin.Unit;
public final class MessageRequestRepository {
private static final String TAG = Log.tag(MessageRequestRepository.class);
private static final String TAG = Log.tag(MessageRequestRepository.class);
private static final int MIN_GROUPS_THRESHOLD = 2;
private final Context context;
private final Executor executor;
@@ -68,7 +69,7 @@ public final class MessageRequestRepository {
if (groupRecord.get().isV2Group()) {
List<Recipient> recipients = Recipient.resolvedList(groupRecord.get().getMembers());
for (Recipient recipient : recipients) {
if ((recipient.isProfileSharing() || recipient.getHasGroupsInCommon()) && !recipient.isSelf()) {
if ((recipient.isProfileSharing() || recipient.isSystemContact()) && !recipient.isSelf()) {
groupHasExistingContacts = true;
break;
}
@@ -139,8 +140,11 @@ public final class MessageRequestRepository {
} else {
Recipient.HiddenState hiddenState = RecipientUtil.getRecipientHiddenState(threadId);
boolean reportedAsSpam = reportedAsSpam(threadId);
List<String> sharedGroups = SignalDatabase.groups().getPushGroupNamesContainingMember(recipient.getId());
if (hiddenState == Recipient.HiddenState.NOT_HIDDEN) {
if (hiddenState == Recipient.HiddenState.NOT_HIDDEN && sharedGroups.size() < MIN_GROUPS_THRESHOLD) {
return new MessageRequestState(MessageRequestState.State.INDIVIDUAL_FEW_CONNECTIONS, reportedAsSpam);
} else if (hiddenState == Recipient.HiddenState.NOT_HIDDEN) {
return new MessageRequestState(MessageRequestState.State.INDIVIDUAL, reportedAsSpam);
} else if (hiddenState == Recipient.HiddenState.HIDDEN) {
return new MessageRequestState(MessageRequestState.State.NONE_HIDDEN, reportedAsSpam);

View File

@@ -19,6 +19,12 @@ data class MessageRequestState @JvmOverloads constructor(val state: State = Stat
val isBlocked: Boolean
get() = state == State.INDIVIDUAL_BLOCKED || state == State.BLOCKED_GROUP
val isFewConnectionsIndividual: Boolean
get() = state == State.INDIVIDUAL_FEW_CONNECTIONS
val isGroupV2Add: Boolean
get() = state == State.GROUP_V2_ADD
/**
* An enum representing the possible message request states a user can be in.
*/
@@ -50,6 +56,9 @@ data class MessageRequestState @JvmOverloads constructor(val state: State = Stat
/** A user is blocked */
INDIVIDUAL_BLOCKED,
/** A message request and secondary confirmation is needed for an individual with less than 2 common groups */
INDIVIDUAL_FEW_CONNECTIONS,
/** A message request is needed for an individual since they have been hidden */
INDIVIDUAL_HIDDEN
}

View File

@@ -90,7 +90,8 @@ class MessageRequestsBottomView @JvmOverloads constructor(context: Context, attr
accept.setText(R.string.MessageRequestBottomView_accept)
}
MessageRequestState.State.INDIVIDUAL -> {
MessageRequestState.State.INDIVIDUAL,
MessageRequestState.State.INDIVIDUAL_FEW_CONNECTIONS -> {
question.text = HtmlCompat.fromHtml(
context.getString(
R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept,