diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 53c2f36957..6807312d5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -271,11 +271,7 @@ public final class ContactSelectionListFragment extends LoggingFragment RecyclerViewConcatenateAdapterStickyHeader concatenateAdapter = new RecyclerViewConcatenateAdapterStickyHeader(); if (listCallback != null) { - if (FeatureFlags.groupsV2create() && FeatureFlags.internalUser()) { - headerAdapter = new FixedViewsAdapter(createNewGroupItem(listCallback), createNewGroupsV1GroupItem(listCallback)); - } else { - headerAdapter = new FixedViewsAdapter(createNewGroupItem(listCallback)); - } + headerAdapter = new FixedViewsAdapter(createNewGroupItem(listCallback)); headerAdapter.hide(); concatenateAdapter.addAdapter(headerAdapter); } @@ -316,13 +312,6 @@ public final class ContactSelectionListFragment extends LoggingFragment return view; } - private View createNewGroupsV1GroupItem(@NonNull ListCallback listCallback) { - View view = LayoutInflater.from(requireContext()) - .inflate(R.layout.contact_selection_new_group_v1_item, (ViewGroup) requireView(), false); - view.setOnClickListener(v -> listCallback.onNewGroup(true)); - return view; - } - private void initializeNoContactsPermission() { swipeRefresh.setVisibility(View.GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index 4d7a0361f9..fffd2926e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -119,7 +119,7 @@ final class GroupManagerV2 { GroupCandidate self = groupCandidateHelper.recipientIdToCandidate(Recipient.self().getId()); Set candidates = new HashSet<>(groupCandidateHelper.recipientIdsToCandidates(members)); - if (SignalStore.internalValues().forceGv2Invites()) { + if (SignalStore.internalValues().gv2ForceInvites()) { candidates = GroupCandidate.withoutProfileKeyCredentials(candidates); } @@ -193,7 +193,7 @@ final class GroupManagerV2 { Set groupCandidates = groupCandidateHelper.recipientIdsToCandidates(new HashSet<>(newMembers)); - if (SignalStore.internalValues().forceGv2Invites()) { + if (SignalStore.internalValues().gv2ForceInvites()) { groupCandidates = GroupCandidate.withoutProfileKeyCredentials(groupCandidates); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java index f0e4cb4bf5..9c9bc9d1d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java @@ -45,7 +45,7 @@ import java.util.concurrent.atomic.AtomicReference; public class CreateGroupActivity extends ContactSelectionActivity { - private static String TAG = Log.tag(CreateGroupActivity.class); + private static final String TAG = Log.tag(CreateGroupActivity.class); private static final int MINIMUM_GROUP_SIZE = 1; private static final short REQUEST_CODE_ADD_DETAILS = 17275; diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java index e89b00fca2..ba16e53b97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/InternalValues.java @@ -4,6 +4,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags; public final class InternalValues extends SignalStoreValues { + public static final String GV2_DO_NOT_CREATE_GV2 = "internal.gv2.do_not_create_gv2"; public static final String GV2_FORCE_INVITES = "internal.gv2.force_invites"; public static final String GV2_IGNORE_SERVER_CHANGES = "internal.gv2.ignore_server_changes"; public static final String GV2_IGNORE_P2P_CHANGES = "internal.gv2.ignore_p2p_changes"; @@ -16,7 +17,17 @@ public final class InternalValues extends SignalStoreValues { void onFirstEverAppLaunch() { } - public synchronized boolean forceGv2Invites() { + /** + * Do not attempt to create GV2 groups, i.e. will force creation of GV1 or MMS groups. + */ + public synchronized boolean gv2DoNotCreateGv2Groups() { + return FeatureFlags.internalUser() && getBoolean(GV2_DO_NOT_CREATE_GV2, false); + } + + /** + * Members will not be added directly to a GV2 even if they could be. + */ + public synchronized boolean gv2ForceInvites() { return FeatureFlags.internalUser() && getBoolean(GV2_FORCE_INVITES, false); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/InternalOptionsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/InternalOptionsPreferenceFragment.java index 7862922855..b86bcfd3e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/InternalOptionsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/InternalOptionsPreferenceFragment.java @@ -34,7 +34,8 @@ public class InternalOptionsPreferenceFragment extends CorrectedPreferenceFragme PreferenceDataStore preferenceDataStore = SignalStore.getPreferenceDataStore(); - initializeSwitchPreference(preferenceDataStore, InternalValues.GV2_FORCE_INVITES, SignalStore.internalValues().forceGv2Invites()); + initializeSwitchPreference(preferenceDataStore, InternalValues.GV2_DO_NOT_CREATE_GV2, SignalStore.internalValues().gv2DoNotCreateGv2Groups()); + initializeSwitchPreference(preferenceDataStore, InternalValues.GV2_FORCE_INVITES, SignalStore.internalValues().gv2ForceInvites()); initializeSwitchPreference(preferenceDataStore, InternalValues.GV2_IGNORE_SERVER_CHANGES, SignalStore.internalValues().gv2IgnoreServerChanges()); initializeSwitchPreference(preferenceDataStore, InternalValues.GV2_IGNORE_P2P_CHANGES, SignalStore.internalValues().gv2IgnoreP2PChanges()); 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 ef36d3d3c2..2e9784d43b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -200,9 +200,11 @@ public final class FeatureFlags { return getBoolean(GROUPS_V2, false); } - /** Groups v2 send and receive. */ + /** Attempt groups v2 creation. */ public static boolean groupsV2create() { - return groupsV2() && getBoolean(GROUPS_V2_CREATE, false); + return groupsV2() && + getBoolean(GROUPS_V2_CREATE, false) && + !SignalStore.internalValues().gv2DoNotCreateGv2Groups(); } /** diff --git a/app/src/main/res/layout/contact_selection_new_group_v1_item.xml b/app/src/main/res/layout/contact_selection_new_group_v1_item.xml deleted file mode 100644 index ef31959b25..0000000000 --- a/app/src/main/res/layout/contact_selection_new_group_v1_item.xml +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9e4aaf14a8..2fb52ff219 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1431,8 +1431,6 @@ Enter name or number Invite to Signal New group - - New old style group (GV1) Clear entered text @@ -1961,6 +1959,8 @@ Internal Preferences Groups V2 + Do not create GV2 groups + Do not attempt to create GV2 groups, i.e. will force creation of GV1 or MMS groups. Force Invites Members will not be added directly to a GV2 even if they could be. Ignore server changes diff --git a/app/src/main/res/xml/preferences_internal.xml b/app/src/main/res/xml/preferences_internal.xml index 3473370388..5b61ce91da 100644 --- a/app/src/main/res/xml/preferences_internal.xml +++ b/app/src/main/res/xml/preferences_internal.xml @@ -37,6 +37,12 @@ android:key="internal_groupsV2" android:title="@string/preferences__internal_preferences_groups_v2"> + +