diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java index 51fba8fca..e7aef1539 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java @@ -40,6 +40,7 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.BitmapUtil; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.text.AfterTextChanged; import org.thoughtcrime.securesms.util.views.LearnMoreTextView; @@ -120,10 +121,15 @@ public class AddGroupDetailsFragment extends LoggingFragment { toolbar.setTitle(isMms ? R.string.AddGroupDetailsFragment__create_group : R.string.AddGroupDetailsFragment__name_this_group); }); viewModel.getNonGv2CapableMembers().observe(getViewLifecycleOwner(), nonGv2CapableMembers -> { + boolean forcedMigration = FeatureFlags.groupsV1ForcedMigration(); + + int stringRes = forcedMigration ? R.plurals.AddGroupDetailsFragment__d_members_do_not_support_new_groups_so_this_group_cannot_be_created + : R.plurals.AddGroupDetailsFragment__d_members_do_not_support_new_groups; + gv2Warning.setVisibility(nonGv2CapableMembers.isEmpty() ? View.GONE : View.VISIBLE); - gv2Warning.setText(requireContext().getResources().getQuantityString(R.plurals.AddGroupDetailsFragment__d_members_do_not_support_new_groups, nonGv2CapableMembers.size(), nonGv2CapableMembers.size())); + gv2Warning.setText(requireContext().getResources().getQuantityString(stringRes, nonGv2CapableMembers.size(), nonGv2CapableMembers.size())); gv2Warning.setLearnMoreVisible(true); - gv2Warning.setOnLinkClickListener(v -> NonGv2MemberDialog.showNonGv2Members(requireContext(), nonGv2CapableMembers)); + gv2Warning.setOnLinkClickListener(v -> NonGv2MemberDialog.showNonGv2Members(requireContext(), nonGv2CapableMembers, forcedMigration)); }); viewModel.getAvatar().observe(getViewLifecycleOwner(), avatarBytes -> { if (avatarBytes == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java index 5800a9627..86e5cfaa7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java @@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DefaultValueLiveData; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; @@ -62,7 +63,8 @@ public final class AddGroupDetailsViewModel extends ViewModel { }); nonGv2CapableMembers = LiveDataUtil.mapAsync(membersToCheckGv2CapabilityOf, memberList -> repository.checkCapabilities(Stream.of(memberList).map(newGroupCandidate -> newGroupCandidate.getMember().getId()).toList())); - canSubmitForm = LiveDataUtil.combineLatest(isMms, isValidName, (mms, validName) -> mms || validName); + canSubmitForm = FeatureFlags.groupsV1ForcedMigration() ? LiveDataUtil.just(false) + : LiveDataUtil.combineLatest(isMms, isValidName, (mms, validName) -> mms || validName); repository.resolveMembers(recipientIds, initialMembers::postValue); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/dialogs/NonGv2MemberDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/dialogs/NonGv2MemberDialog.java index 07b9136c6..5bc018b74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/dialogs/NonGv2MemberDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/dialogs/NonGv2MemberDialog.java @@ -20,7 +20,7 @@ public final class NonGv2MemberDialog { private NonGv2MemberDialog() { } - public static @Nullable Dialog showNonGv2Members(@NonNull Context context, @NonNull List recipients) { + public static @Nullable Dialog showNonGv2Members(@NonNull Context context, @NonNull List recipients, boolean forcedMigration) { int size = recipients.size(); if (size == 0) { return null; @@ -32,9 +32,13 @@ public final class NonGv2MemberDialog { // }) .setPositiveButton(android.R.string.ok, null); if (size == 1) { - builder.setMessage(context.getString(R.string.NonGv2MemberDialog_single_users_are_non_gv2_capable, recipients.get(0).getDisplayName(context))); + int stringRes = forcedMigration ? R.string.NonGv2MemberDialog_single_users_are_non_gv2_capable_forced_migration + : R.string.NonGv2MemberDialog_single_users_are_non_gv2_capable; + builder.setMessage(context.getString(stringRes, recipients.get(0).getDisplayName(context))); } else { - builder.setMessage(context.getResources().getQuantityString(R.plurals.NonGv2MemberDialog_d_users_are_non_gv2_capable, size, size)) + int pluralRes = forcedMigration ? R.plurals.NonGv2MemberDialog_d_users_are_non_gv2_capable_forced_migration + : R.plurals.NonGv2MemberDialog_d_users_are_non_gv2_capable; + builder.setMessage(context.getResources().getQuantityString(pluralRes, size, size)) .setView(R.layout.dialog_multiple_members_non_gv2_capable); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index d6aed0d40..da14e8bed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -86,6 +86,7 @@ public final class FeatureFlags { MAX_ENVELOPE_SIZE, GV1_AUTO_MIGRATE_VERSION, GV1_MANUAL_MIGRATE_VERSION, + GV1_FORCED_MIGRATE_VERSION, GROUP_CALLING_VERSION ); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 843c043dd..562416106 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -702,6 +702,10 @@ %d member does not support New Groups, so this will be a Legacy Group. %d members do not support New Groups, so this group will be a Legacy Group. + + %d member does not support New Groups, so this group cannot be created. + %d members do not support New Groups, so this group cannot be created. + A Legacy Group will be created because ā€œ%1$sā€ is using an old version of Signal. You can create a New Style Group with them after they update Signal, or remove them before creating the group. @@ -709,6 +713,11 @@ A Legacy Group will be created because %1$d member is using an old version of Signal. You can create a New Style Group with them after they update Signal, or remove them before creating the group. A Legacy Group will be created because %1$d members are using an old version of Signal. You can create a New Style Group with them after they update Signal, or remove them before creating the group. + This group cannot be created because ā€œ%1$sā€ is using an old version of Signal. You must remove them before creating the group. + + This group cannot be created because %1$d member is using an old version of Signal. You must remove them before creating the group. + This group cannot be created because %1$d members are using an old version of Signal. You must remove them before creating the group. + Disappearing messages