mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 00:29:11 +01:00
Add support for modern profile sharing.
This commit is contained in:
@@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||
import org.whispersystems.libsignal.util.guava.Optional;
|
||||
@@ -86,9 +87,11 @@ final class MessageRequestRepository {
|
||||
}
|
||||
}
|
||||
|
||||
return MessageRequestState.REQUIRED;
|
||||
} else if (FeatureFlags.modernProfileSharing() && !recipient.isPushV2Group() && !recipient.isProfileSharing()) {
|
||||
return MessageRequestState.REQUIRED;
|
||||
} else if (RecipientUtil.isPreMessageRequestThread(context, threadId) && !RecipientUtil.isLegacyProfileSharingAccepted(recipient)) {
|
||||
return MessageRequestState.LEGACY;
|
||||
return MessageRequestState.PRE_MESSAGE_REQUEST;
|
||||
} else {
|
||||
return MessageRequestState.NOT_REQUIRED;
|
||||
}
|
||||
@@ -230,6 +233,7 @@ final class MessageRequestRepository {
|
||||
});
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
boolean isPendingMember(@NonNull GroupId.V2 groupId) {
|
||||
return DatabaseFactory.getGroupDatabase(context).isPendingMember(groupId, Recipient.self());
|
||||
}
|
||||
@@ -248,6 +252,7 @@ final class MessageRequestRepository {
|
||||
/** Explicit message request permission is required. */
|
||||
REQUIRED,
|
||||
|
||||
LEGACY
|
||||
/** This conversation existed before message requests and needs the old UI */
|
||||
PRE_MESSAGE_REQUEST
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,15 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason;
|
||||
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataTriple;
|
||||
@@ -168,16 +172,20 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.BLOCKED_INDIVIDUAL);
|
||||
}
|
||||
} else if (recipient.isGroup()) {
|
||||
if (recipient.isPushV2Group()) {
|
||||
if (repository.isPendingMember(recipient.requireGroupId().requireV2())) {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_INVITE);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_ADD);
|
||||
}
|
||||
} else if (recipient.isPushV2Group()) {
|
||||
if (repository.isPendingMember(recipient.requireGroupId().requireV2())) {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_INVITE);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V1);
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_ADD);
|
||||
}
|
||||
} else if (isLegacyThread(recipient)) {
|
||||
if (recipient.isGroup()) {
|
||||
return new MessageData(recipient, MessageClass.LEGACY_GROUP_V1);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.LEGACY_INDIVIDUAL);
|
||||
}
|
||||
} else if (recipient.isGroup()) {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V1);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.INDIVIDUAL);
|
||||
}
|
||||
@@ -198,13 +206,23 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
case REQUIRED:
|
||||
displayState.postValue(DisplayState.DISPLAY_MESSAGE_REQUEST);
|
||||
break;
|
||||
case LEGACY:
|
||||
displayState.postValue(DisplayState.DISPLAY_LEGACY);
|
||||
case PRE_MESSAGE_REQUEST:
|
||||
displayState.postValue(DisplayState.DISPLAY_PRE_MESSAGE_REQUEST);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private boolean isLegacyThread(@NonNull Recipient recipient) {
|
||||
Context context = ApplicationDependencies.getApplication();
|
||||
Long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient.getId());
|
||||
|
||||
return FeatureFlags.modernProfileSharing() &&
|
||||
threadId != null &&
|
||||
(RecipientUtil.hasSentMessageInThread(context, threadId) || RecipientUtil.isPreMessageRequestThread(context, threadId));
|
||||
}
|
||||
|
||||
public static class RecipientInfo {
|
||||
@Nullable private final Recipient recipient;
|
||||
@NonNull private final GroupMemberCount groupMemberCount;
|
||||
@@ -246,12 +264,16 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public enum DisplayState {
|
||||
DISPLAY_MESSAGE_REQUEST, DISPLAY_LEGACY, DISPLAY_NONE
|
||||
DISPLAY_MESSAGE_REQUEST, DISPLAY_PRE_MESSAGE_REQUEST, DISPLAY_NONE
|
||||
}
|
||||
|
||||
public enum MessageClass {
|
||||
BLOCKED_INDIVIDUAL,
|
||||
BLOCKED_GROUP,
|
||||
/** An individual conversation that existed pre-message-requests but doesn't have profile sharing enabled */
|
||||
LEGACY_INDIVIDUAL,
|
||||
/** A V1 group conversation that existed pre-message-requests but doesn't have profile sharing enabled */
|
||||
LEGACY_GROUP_V1,
|
||||
GROUP_V1,
|
||||
GROUP_V2_INVITE,
|
||||
GROUP_V2_ADD,
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.messagerequests;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -12,20 +13,22 @@ import androidx.core.text.HtmlCompat;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.Debouncer;
|
||||
import org.thoughtcrime.securesms.util.HtmlUtil;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
|
||||
public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
|
||||
private final Debouncer showProgressDebouncer = new Debouncer(250);
|
||||
|
||||
private TextView question;
|
||||
private View accept;
|
||||
private View block;
|
||||
private View delete;
|
||||
private View bigDelete;
|
||||
private View bigUnblock;
|
||||
private View busyIndicator;
|
||||
private LearnMoreTextView question;
|
||||
private Button accept;
|
||||
private View block;
|
||||
private View delete;
|
||||
private View bigDelete;
|
||||
private View bigUnblock;
|
||||
private View busyIndicator;
|
||||
|
||||
private Group normalButtons;
|
||||
private Group blockedButtons;
|
||||
@@ -63,6 +66,9 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
public void setMessageData(@NonNull MessageRequestViewModel.MessageData messageData) {
|
||||
Recipient recipient = messageData.getRecipient();
|
||||
|
||||
question.setLearnMoreVisible(false);
|
||||
question.setOnLinkClickListener(null);
|
||||
|
||||
switch (messageData.getMessageClass()) {
|
||||
case BLOCKED_INDIVIDUAL:
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_wont_receive_any_messages_until_you_unblock_them,
|
||||
@@ -73,19 +79,36 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
question.setText(R.string.MessageRequestBottomView_unblock_this_group_and_share_your_name_and_photo_with_its_members);
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
break;
|
||||
case LEGACY_INDIVIDUAL:
|
||||
question.setText(getContext().getString(R.string.MessageRequestBottomView_continue_your_conversation_with_s_and_share_your_name_and_photo, recipient.getShortDisplayName(getContext())));
|
||||
question.setLearnMoreVisible(true);
|
||||
question.setOnLinkClickListener(v -> CommunicationActions.openBrowserLink(getContext(), getContext().getString(R.string.MessageRequestBottomView_legacy_learn_more_url)));
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_continue);
|
||||
break;
|
||||
case LEGACY_GROUP_V1:
|
||||
question.setText(R.string.MessageRequestBottomView_continue_your_conversation_with_this_group_and_share_your_name_and_photo);
|
||||
question.setLearnMoreVisible(true);
|
||||
question.setOnLinkClickListener(v -> CommunicationActions.openBrowserLink(getContext(), getContext().getString(R.string.MessageRequestBottomView_legacy_learn_more_url)));
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_continue);
|
||||
break;
|
||||
case GROUP_V1:
|
||||
case GROUP_V2_INVITE:
|
||||
question.setText(R.string.MessageRequestBottomView_do_you_want_to_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_accept);
|
||||
break;
|
||||
case GROUP_V2_ADD:
|
||||
question.setText(R.string.MessageRequestBottomView_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_accept);
|
||||
break;
|
||||
case INDIVIDUAL:
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept,
|
||||
HtmlUtil.bold(recipient.getShortDisplayName(getContext()))), 0));
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_accept);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user