Add support for GV1->GV2 forced migration.

This commit is contained in:
Greyson Parrelli
2020-11-12 12:32:10 -05:00
committed by GitHub
parent 554aa1ddf0
commit 2dace38d43
15 changed files with 117 additions and 32 deletions

View File

@@ -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)

View File

@@ -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;
}
}

View File

@@ -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);
}
}