mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 00:29:11 +01:00
Add support for GV1->GV2 forced migration.
This commit is contained in:
@@ -86,6 +86,10 @@ final class MessageRequestRepository {
|
||||
}
|
||||
}
|
||||
|
||||
if (recipient.isPushV1Group() && FeatureFlags.groupsV1ForcedMigration()) {
|
||||
return MessageRequestState.REQUIRED;
|
||||
}
|
||||
|
||||
if (!RecipientUtil.isMessageRequestAccepted(context, threadId)) {
|
||||
if (recipient.isGroup()) {
|
||||
GroupDatabase.MemberLevel memberLevel = DatabaseFactory.getGroupDatabase(context)
|
||||
|
||||
@@ -197,6 +197,12 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_ADD);
|
||||
}
|
||||
} else if (recipient.isPushV1Group() && FeatureFlags.groupsV1ForcedMigration()) {
|
||||
if (recipient.getParticipants().size() > FeatureFlags.groupLimits().getHardLimit()) {
|
||||
return new MessageData(recipient, MessageClass.DEPRECATED_GROUP_V1_TOO_LARGE);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.DEPRECATED_GROUP_V1);
|
||||
}
|
||||
} else if (isLegacyThread(recipient)) {
|
||||
if (recipient.isGroup()) {
|
||||
return new MessageData(recipient, MessageClass.LEGACY_GROUP_V1);
|
||||
@@ -289,6 +295,10 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
LEGACY_INDIVIDUAL,
|
||||
/** A V1 group conversation that existed pre-message-requests but doesn't have profile sharing enabled */
|
||||
LEGACY_GROUP_V1,
|
||||
/** A V1 group conversation that is no longer allowed, because we've forced GV2 on. */
|
||||
DEPRECATED_GROUP_V1,
|
||||
/** A V1 group conversation that is no longer allowed, because we've forced GV2 on, but it's also too large to migrate. Nothing we can do. */
|
||||
DEPRECATED_GROUP_V1_TOO_LARGE,
|
||||
GROUP_V1,
|
||||
GROUP_V2_INVITE,
|
||||
GROUP_V2_ADD,
|
||||
@@ -324,7 +334,7 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
private final DisplayState displayState;
|
||||
|
||||
private MessageDataDisplayStateHolder(@NonNull MessageData messageData, @NonNull DisplayState displayState) {
|
||||
this.messageData = messageData;
|
||||
this.messageData = messageData;
|
||||
this.displayState = displayState;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ 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.FeatureFlags;
|
||||
import org.thoughtcrime.securesms.util.HtmlUtil;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
|
||||
@@ -24,6 +25,7 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
|
||||
private LearnMoreTextView question;
|
||||
private Button accept;
|
||||
private Button gv1Continue;
|
||||
private View block;
|
||||
private View delete;
|
||||
private View bigDelete;
|
||||
@@ -32,6 +34,7 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
|
||||
private Group normalButtons;
|
||||
private Group blockedButtons;
|
||||
private Group gv1MigrationButtons;
|
||||
private Group activeGroup;
|
||||
|
||||
public MessageRequestsBottomView(Context context) {
|
||||
@@ -52,15 +55,17 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
|
||||
inflate(getContext(), R.layout.message_request_bottom_bar, this);
|
||||
|
||||
question = findViewById(R.id.message_request_question);
|
||||
accept = findViewById(R.id.message_request_accept);
|
||||
block = findViewById(R.id.message_request_block);
|
||||
delete = findViewById(R.id.message_request_delete);
|
||||
bigDelete = findViewById(R.id.message_request_big_delete);
|
||||
bigUnblock = findViewById(R.id.message_request_big_unblock);
|
||||
normalButtons = findViewById(R.id.message_request_normal_buttons);
|
||||
blockedButtons = findViewById(R.id.message_request_blocked_buttons);
|
||||
busyIndicator = findViewById(R.id.message_request_busy_indicator);
|
||||
question = findViewById(R.id.message_request_question);
|
||||
accept = findViewById(R.id.message_request_accept);
|
||||
block = findViewById(R.id.message_request_block);
|
||||
delete = findViewById(R.id.message_request_delete);
|
||||
bigDelete = findViewById(R.id.message_request_big_delete);
|
||||
bigUnblock = findViewById(R.id.message_request_big_unblock);
|
||||
gv1Continue = findViewById(R.id.message_request_gv1_migration);
|
||||
normalButtons = findViewById(R.id.message_request_normal_buttons);
|
||||
blockedButtons = findViewById(R.id.message_request_blocked_buttons);
|
||||
gv1MigrationButtons = findViewById(R.id.message_request_gv1_migration_buttons);
|
||||
busyIndicator = findViewById(R.id.message_request_busy_indicator);
|
||||
}
|
||||
|
||||
public void setMessageData(@NonNull MessageRequestViewModel.MessageData messageData) {
|
||||
@@ -73,52 +78,65 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
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,
|
||||
HtmlUtil.bold(recipient.getShortDisplayName(getContext()))), 0));
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons, gv1MigrationButtons);
|
||||
break;
|
||||
case BLOCKED_GROUP:
|
||||
question.setText(R.string.MessageRequestBottomView_unblock_this_group_and_share_your_name_and_photo_with_its_members);
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons, gv1MigrationButtons);
|
||||
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);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons, gv1MigrationButtons);
|
||||
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);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons, gv1MigrationButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_continue);
|
||||
break;
|
||||
case DEPRECATED_GROUP_V1:
|
||||
question.setText(R.string.MessageRequestBottomView_upgrade_this_group_to_activate_new_features);
|
||||
setActiveInactiveGroups(gv1MigrationButtons, normalButtons, blockedButtons);
|
||||
gv1Continue.setVisibility(VISIBLE);
|
||||
break;
|
||||
case DEPRECATED_GROUP_V1_TOO_LARGE:
|
||||
question.setText(getContext().getString(R.string.MessageRequestBottomView_this_legacy_group_can_no_longer_be_used, FeatureFlags.groupLimits().getHardLimit() - 1));
|
||||
setActiveInactiveGroups(gv1MigrationButtons, normalButtons, blockedButtons);
|
||||
gv1Continue.setVisibility(GONE);
|
||||
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);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons, gv1MigrationButtons);
|
||||
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);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons, gv1MigrationButtons);
|
||||
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);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons, gv1MigrationButtons);
|
||||
accept.setText(R.string.MessageRequestBottomView_accept);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void setActiveInactiveGroups(@NonNull Group activeGroup, @NonNull Group inActiveGroup) {
|
||||
private void setActiveInactiveGroups(@NonNull Group activeGroup, @NonNull Group... inActiveGroups) {
|
||||
int initialVisibility = this.activeGroup != null ? this.activeGroup.getVisibility() : VISIBLE;
|
||||
|
||||
this.activeGroup = activeGroup;
|
||||
|
||||
inActiveGroup.setVisibility(GONE);
|
||||
for (Group inactive : inActiveGroups) {
|
||||
inactive.setVisibility(GONE);
|
||||
}
|
||||
|
||||
activeGroup.setVisibility(initialVisibility);
|
||||
}
|
||||
|
||||
@@ -153,4 +171,8 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
||||
public void setUnblockOnClickListener(OnClickListener unblockOnClickListener) {
|
||||
bigUnblock.setOnClickListener(unblockOnClickListener);
|
||||
}
|
||||
|
||||
public void setGroupV1MigrationContinueListener(OnClickListener acceptOnClickListener) {
|
||||
gv1Continue.setOnClickListener(acceptOnClickListener);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user