mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-25 17:37:57 +00:00
Inline Group Invite Link feature flags.
This commit is contained in:
@@ -280,10 +280,6 @@
|
|||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||||
|
|
||||||
<activity android:name=".groups.ui.pendingmemberinvites.PendingMemberInvitesActivity"
|
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
|
||||||
android:theme="@style/Theme.Signal.DayNight.NoActionBar" />
|
|
||||||
|
|
||||||
<activity android:name=".groups.ui.invitesandrequests.ManagePendingAndRequestingMembersActivity"
|
<activity android:name=".groups.ui.invitesandrequests.ManagePendingAndRequestingMembersActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
|
||||||
android:theme="@style/Theme.Signal.DayNight.NoActionBar" />
|
android:theme="@style/Theme.Signal.DayNight.NoActionBar" />
|
||||||
|
@@ -1745,7 +1745,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
|||||||
reminderView.get().setOnActionClickListener(this::handleReminderAction);
|
reminderView.get().setOnActionClickListener(this::handleReminderAction);
|
||||||
reminderView.get().setOnDismissListener(() -> inviteReminderModel.dismissReminder());
|
reminderView.get().setOnDismissListener(() -> inviteReminderModel.dismissReminder());
|
||||||
reminderView.get().showReminder(inviteReminder.get());
|
reminderView.get().showReminder(inviteReminder.get());
|
||||||
} else if (actionableRequestingMembers != null && actionableRequestingMembers > 0 && FeatureFlags.groupsV2manageGroupLinks()) {
|
} else if (actionableRequestingMembers != null && actionableRequestingMembers > 0) {
|
||||||
reminderView.get().showReminder(PendingGroupJoinRequestsReminder.create(this, actionableRequestingMembers));
|
reminderView.get().showReminder(PendingGroupJoinRequestsReminder.create(this, actionableRequestingMembers));
|
||||||
reminderView.get().setOnActionClickListener(id -> {
|
reminderView.get().setOnActionClickListener(id -> {
|
||||||
if (id == R.id.reminder_action_review_join_requests) {
|
if (id == R.id.reminder_action_review_join_requests) {
|
||||||
|
@@ -138,7 +138,6 @@ final class ConversationGroupViewModel extends ViewModel {
|
|||||||
|
|
||||||
private static int mapToActionableRequestingMemberCount(@Nullable GroupRecord record) {
|
private static int mapToActionableRequestingMemberCount(@Nullable GroupRecord record) {
|
||||||
if (record != null &&
|
if (record != null &&
|
||||||
FeatureFlags.groupsV2manageGroupLinks() &&
|
|
||||||
record.isV2Group() &&
|
record.isV2Group() &&
|
||||||
record.memberLevel(Recipient.self()) == GroupDatabase.MemberLevel.ADMINISTRATOR)
|
record.memberLevel(Recipient.self()) == GroupDatabase.MemberLevel.ADMINISTRATOR)
|
||||||
{
|
{
|
||||||
|
@@ -30,8 +30,6 @@ import org.thoughtcrime.securesms.jobs.RetrieveProfileJob;
|
|||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
||||||
import org.thoughtcrime.securesms.util.PlayStoreUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||||
|
|
||||||
public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogFragment {
|
public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogFragment {
|
||||||
@@ -101,20 +99,6 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
|
|||||||
groupDetails.setText(requireContext().getResources().getQuantityString(R.plurals.GroupJoinBottomSheetDialogFragment_group_dot_d_members, details.getGroupMembershipCount(), details.getGroupMembershipCount()));
|
groupDetails.setText(requireContext().getResources().getQuantityString(R.plurals.GroupJoinBottomSheetDialogFragment_group_dot_d_members, details.getGroupMembershipCount(), details.getGroupMembershipCount()));
|
||||||
|
|
||||||
switch (getGroupJoinStatus()) {
|
switch (getGroupJoinStatus()) {
|
||||||
case COMING_SOON:
|
|
||||||
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_coming_soon);
|
|
||||||
groupCancelButton.setText(android.R.string.ok);
|
|
||||||
groupJoinButton.setVisibility(View.GONE);
|
|
||||||
break;
|
|
||||||
case UPDATE_TO_JOIN:
|
|
||||||
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_message);
|
|
||||||
groupJoinButton.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal);
|
|
||||||
groupJoinButton.setOnClickListener(v -> {
|
|
||||||
PlayStoreUtil.openPlayStoreOrOurApkDownloadPage(requireContext());
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
groupJoinButton.setVisibility(View.VISIBLE);
|
|
||||||
break;
|
|
||||||
case UPDATE_LINKED_DEVICE_TO_JOIN:
|
case UPDATE_LINKED_DEVICE_TO_JOIN:
|
||||||
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_linked_device_message);
|
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_linked_device_message);
|
||||||
groupCancelButton.setText(android.R.string.ok);
|
groupCancelButton.setText(android.R.string.ok);
|
||||||
@@ -162,19 +146,10 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ExtendedGroupJoinStatus getGroupJoinStatus() {
|
private static ExtendedGroupJoinStatus getGroupJoinStatus() {
|
||||||
FeatureFlags.GroupJoinStatus groupJoinStatus = FeatureFlags.clientLocalGroupJoinStatus();
|
if (Recipient.self().getGroupsV2Capability() != Recipient.Capability.SUPPORTED) {
|
||||||
|
return ExtendedGroupJoinStatus.UPDATE_LINKED_DEVICE_TO_JOIN;
|
||||||
switch (groupJoinStatus) {
|
} else {
|
||||||
case COMING_SOON : return ExtendedGroupJoinStatus.COMING_SOON;
|
return ExtendedGroupJoinStatus.LOCAL_CAN_JOIN;
|
||||||
case UPDATE_TO_JOIN: return ExtendedGroupJoinStatus.UPDATE_TO_JOIN;
|
|
||||||
case LOCAL_CAN_JOIN: {
|
|
||||||
if (Recipient.self().getGroupsV2Capability() != Recipient.Capability.SUPPORTED) {
|
|
||||||
return ExtendedGroupJoinStatus.UPDATE_LINKED_DEVICE_TO_JOIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ExtendedGroupJoinStatus.LOCAL_CAN_JOIN;
|
|
||||||
}
|
|
||||||
default: throw new AssertionError();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,12 +190,6 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum ExtendedGroupJoinStatus {
|
public enum ExtendedGroupJoinStatus {
|
||||||
/** No version of the client that can join V2 groups by link is in production. */
|
|
||||||
COMING_SOON,
|
|
||||||
|
|
||||||
/** A newer version of the client is in production that will allow joining via GV2 group links. */
|
|
||||||
UPDATE_TO_JOIN,
|
|
||||||
|
|
||||||
/** Locally we're using a version that can use group links, but one or more linked devices needs updating for GV2. */
|
/** Locally we're using a version that can use group links, but one or more linked devices needs updating for GV2. */
|
||||||
UPDATE_LINKED_DEVICE_TO_JOIN,
|
UPDATE_LINKED_DEVICE_TO_JOIN,
|
||||||
|
|
||||||
|
@@ -16,7 +16,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
|||||||
|
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
||||||
import org.thoughtcrime.securesms.util.PlayStoreUtil;
|
import org.thoughtcrime.securesms.util.PlayStoreUtil;
|
||||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||||
|
|
||||||
@@ -54,24 +53,13 @@ public final class GroupJoinUpdateRequiredBottomSheetDialogFragment extends Bott
|
|||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
switch (FeatureFlags.clientLocalGroupJoinStatus()) {
|
groupJoinTitle.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal_to_use_group_links);
|
||||||
case COMING_SOON:
|
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_message);
|
||||||
groupJoinTitle.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_group_links_coming_soon);
|
groupJoinButton.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal);
|
||||||
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_coming_soon);
|
groupJoinButton.setOnClickListener(v -> {
|
||||||
groupJoinButton.setText(android.R.string.ok);
|
PlayStoreUtil.openPlayStoreOrOurApkDownloadPage(requireContext());
|
||||||
groupJoinButton.setOnClickListener(v -> dismiss());
|
dismiss();
|
||||||
break;
|
});
|
||||||
case UPDATE_TO_JOIN:
|
|
||||||
case LOCAL_CAN_JOIN:
|
|
||||||
groupJoinTitle.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal_to_use_group_links);
|
|
||||||
groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_message);
|
|
||||||
groupJoinButton.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal);
|
|
||||||
groupJoinButton.setOnClickListener(v -> {
|
|
||||||
PlayStoreUtil.openPlayStoreOrOurApkDownloadPage(requireContext());
|
|
||||||
dismiss();
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -46,7 +46,6 @@ import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupInviteSentD
|
|||||||
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupRightsDialog;
|
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupRightsDialog;
|
||||||
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupsLearnMoreBottomSheetDialogFragment;
|
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupsLearnMoreBottomSheetDialogFragment;
|
||||||
import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationInitiationBottomSheetDialogFragment;
|
import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationInitiationBottomSheetDialogFragment;
|
||||||
import org.thoughtcrime.securesms.groups.ui.pendingmemberinvites.PendingMemberInvitesActivity;
|
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity;
|
import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity;
|
||||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||||
@@ -79,8 +78,6 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||||||
|
|
||||||
private ManageGroupViewModel viewModel;
|
private ManageGroupViewModel viewModel;
|
||||||
private GroupMemberListView groupMemberList;
|
private GroupMemberListView groupMemberList;
|
||||||
private View pendingMembersRow;
|
|
||||||
private TextView pendingMembersCount;
|
|
||||||
private View pendingAndRequestingRow;
|
private View pendingAndRequestingRow;
|
||||||
private TextView pendingAndRequestingCount;
|
private TextView pendingAndRequestingCount;
|
||||||
private Toolbar toolbar;
|
private Toolbar toolbar;
|
||||||
@@ -92,7 +89,6 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||||||
private ThreadPhotoRailView threadPhotoRailView;
|
private ThreadPhotoRailView threadPhotoRailView;
|
||||||
private View groupMediaCard;
|
private View groupMediaCard;
|
||||||
private View accessControlCard;
|
private View accessControlCard;
|
||||||
private View pendingMembersCard;
|
|
||||||
private View groupLinkCard;
|
private View groupLinkCard;
|
||||||
private ManageGroupViewModel.CursorFactory cursorFactory;
|
private ManageGroupViewModel.CursorFactory cursorFactory;
|
||||||
private View sharedMediaRow;
|
private View sharedMediaRow;
|
||||||
@@ -150,14 +146,11 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||||||
memberCountUnderAvatar = view.findViewById(R.id.member_count);
|
memberCountUnderAvatar = view.findViewById(R.id.member_count);
|
||||||
memberCountAboveList = view.findViewById(R.id.member_count_2);
|
memberCountAboveList = view.findViewById(R.id.member_count_2);
|
||||||
groupMemberList = view.findViewById(R.id.group_members);
|
groupMemberList = view.findViewById(R.id.group_members);
|
||||||
pendingMembersRow = view.findViewById(R.id.pending_members_row);
|
|
||||||
pendingMembersCount = view.findViewById(R.id.pending_members_count);
|
|
||||||
pendingAndRequestingRow = view.findViewById(R.id.pending_and_requesting_members_row);
|
pendingAndRequestingRow = view.findViewById(R.id.pending_and_requesting_members_row);
|
||||||
pendingAndRequestingCount = view.findViewById(R.id.pending_and_requesting_members_count);
|
pendingAndRequestingCount = view.findViewById(R.id.pending_and_requesting_members_count);
|
||||||
threadPhotoRailView = view.findViewById(R.id.recent_photos);
|
threadPhotoRailView = view.findViewById(R.id.recent_photos);
|
||||||
groupMediaCard = view.findViewById(R.id.group_media_card);
|
groupMediaCard = view.findViewById(R.id.group_media_card);
|
||||||
accessControlCard = view.findViewById(R.id.group_access_control_card);
|
accessControlCard = view.findViewById(R.id.group_access_control_card);
|
||||||
pendingMembersCard = view.findViewById(R.id.group_pending_card);
|
|
||||||
groupLinkCard = view.findViewById(R.id.group_link_card);
|
groupLinkCard = view.findViewById(R.id.group_link_card);
|
||||||
sharedMediaRow = view.findViewById(R.id.shared_media_row);
|
sharedMediaRow = view.findViewById(R.id.shared_media_row);
|
||||||
editGroupAccessRow = view.findViewById(R.id.edit_group_access_row);
|
editGroupAccessRow = view.findViewById(R.id.edit_group_access_row);
|
||||||
@@ -210,34 +203,18 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (FeatureFlags.groupsV2manageGroupLinks()) {
|
viewModel.getPendingAndRequestingCount().observe(getViewLifecycleOwner(), pendingAndRequestingCount -> {
|
||||||
viewModel.getPendingAndRequestingCount().observe(getViewLifecycleOwner(),
|
pendingAndRequestingRow.setOnClickListener(v -> {
|
||||||
pendingAndRequestingCount -> {
|
FragmentActivity activity = requireActivity();
|
||||||
pendingAndRequestingRow.setOnClickListener(v -> {
|
activity.startActivity(ManagePendingAndRequestingMembersActivity.newIntent(activity, groupId.requireV2()));
|
||||||
FragmentActivity activity = requireActivity();
|
});
|
||||||
activity.startActivity(ManagePendingAndRequestingMembersActivity.newIntent(activity, groupId.requireV2()));
|
if (pendingAndRequestingCount == 0) {
|
||||||
});
|
this.pendingAndRequestingCount.setVisibility(View.GONE);
|
||||||
if (pendingAndRequestingCount == 0) {
|
} else {
|
||||||
this.pendingAndRequestingCount.setVisibility(View.GONE);
|
this.pendingAndRequestingCount.setText(String.format(Locale.getDefault(), "%d", pendingAndRequestingCount));
|
||||||
} else {
|
this.pendingAndRequestingCount.setVisibility(View.VISIBLE);
|
||||||
this.pendingAndRequestingCount.setText(String.format(Locale.getDefault(), "%d", pendingAndRequestingCount));
|
}
|
||||||
this.pendingAndRequestingCount.setVisibility(View.VISIBLE);
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
viewModel.getPendingMemberCount().observe(getViewLifecycleOwner(),
|
|
||||||
pendingInviteCount -> {
|
|
||||||
pendingMembersRow.setOnClickListener(v -> {
|
|
||||||
FragmentActivity activity = requireActivity();
|
|
||||||
activity.startActivity(PendingMemberInvitesActivity.newIntent(activity, groupId.requireV2()));
|
|
||||||
});
|
|
||||||
if (pendingInviteCount == 0) {
|
|
||||||
pendingMembersCount.setText(R.string.ManageGroupActivity_none);
|
|
||||||
} else {
|
|
||||||
pendingMembersCount.setText(getResources().getQuantityString(R.plurals.ManageGroupActivity_invited, pendingInviteCount, pendingInviteCount));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
avatar.setFallbackPhotoProvider(fallbackPhotoProvider);
|
avatar.setFallbackPhotoProvider(fallbackPhotoProvider);
|
||||||
|
|
||||||
@@ -283,8 +260,7 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||||||
ViewCompat.getLayoutDirection(threadPhotoRailView) == ViewCompat.LAYOUT_DIRECTION_LTR),
|
ViewCompat.getLayoutDirection(threadPhotoRailView) == ViewCompat.LAYOUT_DIRECTION_LTR),
|
||||||
RETURN_FROM_MEDIA));
|
RETURN_FROM_MEDIA));
|
||||||
|
|
||||||
pendingMembersCard.setVisibility(!FeatureFlags.groupsV2manageGroupLinks() && vs.getGroupRecipient().requireGroupId().isV2() ? View.VISIBLE : View.GONE);
|
groupLinkCard.setVisibility(vs.getGroupRecipient().requireGroupId().isV2() ? View.VISIBLE : View.GONE);
|
||||||
groupLinkCard .setVisibility( FeatureFlags.groupsV2manageGroupLinks() && vs.getGroupRecipient().requireGroupId().isV2() ? View.VISIBLE : View.GONE);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
leaveGroup.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE);
|
leaveGroup.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE);
|
||||||
|
@@ -1,72 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.groups.ui.pendingmemberinvites;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
|
||||||
import org.thoughtcrime.securesms.R;
|
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
|
||||||
import org.thoughtcrime.securesms.groups.ui.invitesandrequests.ManagePendingAndRequestingMembersActivity;
|
|
||||||
import org.thoughtcrime.securesms.groups.ui.invitesandrequests.invited.PendingMemberInvitesFragment;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated With group links FF, this activity is replaced with {@link ManagePendingAndRequestingMembersActivity}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class PendingMemberInvitesActivity extends PassphraseRequiredActivity {
|
|
||||||
|
|
||||||
private static final String GROUP_ID = "GROUP_ID";
|
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
|
|
||||||
|
|
||||||
public static Intent newIntent(@NonNull Context context, @NonNull GroupId.V2 groupId) {
|
|
||||||
Intent intent = new Intent(context, PendingMemberInvitesActivity.class);
|
|
||||||
intent.putExtra(GROUP_ID, groupId.toString());
|
|
||||||
return intent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreCreate() {
|
|
||||||
dynamicTheme.onCreate(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState, boolean ready) {
|
|
||||||
super.onCreate(savedInstanceState, ready);
|
|
||||||
|
|
||||||
if (FeatureFlags.groupsV2manageGroupLinks()) {
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
|
|
||||||
setContentView(R.layout.group_pending_member_invites_activity);
|
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
getSupportFragmentManager().beginTransaction()
|
|
||||||
.replace(R.id.container, PendingMemberInvitesFragment.newInstance(GroupId.parseOrThrow(getIntent().getStringExtra(GROUP_ID)).requireV2()))
|
|
||||||
.commitNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
dynamicTheme.onResume(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onSupportNavigateUp() {
|
|
||||||
onBackPressed();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -50,8 +50,6 @@ public final class FeatureFlags {
|
|||||||
private static final long FETCH_INTERVAL = TimeUnit.HOURS.toMillis(2);
|
private static final long FETCH_INTERVAL = TimeUnit.HOURS.toMillis(2);
|
||||||
|
|
||||||
private static final String USERNAMES = "android.usernames";
|
private static final String USERNAMES = "android.usernames";
|
||||||
private static final String GROUPS_V2_JOIN_VERSION = "android.groupsv2.joinVersion";
|
|
||||||
private static final String GROUPS_V2_LINKS_VERSION = "android.groupsv2.manageGroupLinksVersion";
|
|
||||||
private static final String GROUPS_V2_RECOMMENDED_LIMIT = "global.groupsv2.maxGroupSize";
|
private static final String GROUPS_V2_RECOMMENDED_LIMIT = "global.groupsv2.maxGroupSize";
|
||||||
private static final String GROUPS_V2_HARD_LIMIT = "global.groupsv2.groupSizeHardLimit";
|
private static final String GROUPS_V2_HARD_LIMIT = "global.groupsv2.groupSizeHardLimit";
|
||||||
private static final String INTERNAL_USER = "android.internalUser";
|
private static final String INTERNAL_USER = "android.internalUser";
|
||||||
@@ -73,8 +71,6 @@ public final class FeatureFlags {
|
|||||||
private static final Set<String> REMOTE_CAPABLE = SetUtil.newHashSet(
|
private static final Set<String> REMOTE_CAPABLE = SetUtil.newHashSet(
|
||||||
GROUPS_V2_RECOMMENDED_LIMIT,
|
GROUPS_V2_RECOMMENDED_LIMIT,
|
||||||
GROUPS_V2_HARD_LIMIT,
|
GROUPS_V2_HARD_LIMIT,
|
||||||
GROUPS_V2_JOIN_VERSION,
|
|
||||||
GROUPS_V2_LINKS_VERSION,
|
|
||||||
INTERNAL_USER,
|
INTERNAL_USER,
|
||||||
USERNAMES,
|
USERNAMES,
|
||||||
VERIFY_V2,
|
VERIFY_V2,
|
||||||
@@ -106,7 +102,6 @@ public final class FeatureFlags {
|
|||||||
* more burden on the reader to ensure that the app experience remains consistent.
|
* more burden on the reader to ensure that the app experience remains consistent.
|
||||||
*/
|
*/
|
||||||
private static final Set<String> HOT_SWAPPABLE = SetUtil.newHashSet(
|
private static final Set<String> HOT_SWAPPABLE = SetUtil.newHashSet(
|
||||||
GROUPS_V2_JOIN_VERSION,
|
|
||||||
VERIFY_V2,
|
VERIFY_V2,
|
||||||
CLIENT_EXPIRATION
|
CLIENT_EXPIRATION
|
||||||
);
|
);
|
||||||
@@ -183,11 +178,6 @@ public final class FeatureFlags {
|
|||||||
return getBoolean(USERNAMES, false);
|
return getBoolean(USERNAMES, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Allow creation and managing of group links. */
|
|
||||||
public static boolean groupsV2manageGroupLinks() {
|
|
||||||
return getVersionFlag(GROUPS_V2_LINKS_VERSION) == VersionFlag.ON;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum number of members allowed in a group.
|
* Maximum number of members allowed in a group.
|
||||||
*/
|
*/
|
||||||
@@ -196,31 +186,6 @@ public final class FeatureFlags {
|
|||||||
getInteger(GROUPS_V2_HARD_LIMIT, 1001));
|
getInteger(GROUPS_V2_HARD_LIMIT, 1001));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Ability of local client to join a GV2 group.
|
|
||||||
* <p>
|
|
||||||
* You must still check GV2 capabilities to respect linked devices.
|
|
||||||
*/
|
|
||||||
public static GroupJoinStatus clientLocalGroupJoinStatus() {
|
|
||||||
switch (getVersionFlag(GROUPS_V2_JOIN_VERSION)) {
|
|
||||||
case ON_IN_FUTURE_VERSION: return GroupJoinStatus.UPDATE_TO_JOIN;
|
|
||||||
case ON : return GroupJoinStatus.LOCAL_CAN_JOIN;
|
|
||||||
case OFF :
|
|
||||||
default : return GroupJoinStatus.COMING_SOON;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum GroupJoinStatus {
|
|
||||||
/** No version of the client that can join V2 groups by link is in production. */
|
|
||||||
COMING_SOON,
|
|
||||||
|
|
||||||
/** A newer version of the client is in production that will allow joining via GV2 group links. */
|
|
||||||
UPDATE_TO_JOIN,
|
|
||||||
|
|
||||||
/** This version of the client allows joining via GV2 group links. */
|
|
||||||
LOCAL_CAN_JOIN
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Internal testing extensions. */
|
/** Internal testing extensions. */
|
||||||
public static boolean internalUser() {
|
public static boolean internalUser() {
|
||||||
return getBoolean(INTERNAL_USER, false);
|
return getBoolean(INTERNAL_USER, false);
|
||||||
|
@@ -640,58 +640,13 @@
|
|||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
android:id="@+id/group_pending_card"
|
|
||||||
style="@style/Widget.Signal.CardView.PreferenceRow"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/group_manage_fragment_card_vertical_padding"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/group_membership_card">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/pending_members_row"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="@dimen/group_manage_fragment_row_height"
|
|
||||||
android:background="?selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center_vertical|start"
|
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
|
||||||
android:text="@string/ManageGroupActivity_pending_group_invites"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textAppearance="@style/Signal.Text.Body" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/pending_members_count"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="center_vertical|start"
|
|
||||||
android:minWidth="48dp"
|
|
||||||
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
|
|
||||||
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textAppearance="@style/Signal.Text.Body"
|
|
||||||
android:textColor="@color/ultramarine_text_button"
|
|
||||||
tools:text="@string/ManageGroupActivity_none" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:id="@+id/group_block_and_leave_card"
|
android:id="@+id/group_block_and_leave_card"
|
||||||
style="@style/Widget.Signal.CardView.PreferenceRow"
|
style="@style/Widget.Signal.CardView.PreferenceRow"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/group_manage_fragment_card_vertical_padding"
|
android:layout_marginTop="@dimen/group_manage_fragment_card_vertical_padding"
|
||||||
app:layout_constraintTop_toBottomOf="@id/group_pending_card">
|
app:layout_constraintTop_toBottomOf="@id/group_membership_card">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?actionBarSize"
|
android:layout_height="?actionBarSize"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
app:title="@string/PendingMemberInvitesActivity_pending_group_invites"
|
app:title="@string/PendingMembersActivity_pending_group_invites"
|
||||||
app:titleTextColor="@color/signal_text_primary" />
|
app:titleTextColor="@color/signal_text_primary" />
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
tools:context="org.thoughtcrime.securesms.groups.ui.pendingmemberinvites.PendingMemberInvitesActivity">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
|
||||||
android:id="@+id/toolbar_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:attr/windowBackground"
|
|
||||||
app:elevation="0dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.Toolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?actionBarSize"
|
|
||||||
android:background="@android:color/transparent"
|
|
||||||
app:title="@string/PendingMemberInvitesActivity_pending_group_invites"
|
|
||||||
app:titleTextColor="@color/signal_text_primary" />
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@@ -653,7 +653,7 @@
|
|||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<!-- PendingMembersActivity -->
|
<!-- PendingMembersActivity -->
|
||||||
<string name="PendingMemberInvitesActivity_pending_group_invites">Pending group invites</string>
|
<string name="PendingMembersActivity_pending_group_invites">Pending group invites</string>
|
||||||
<string name="PendingMembersActivity_requests">Requests</string>
|
<string name="PendingMembersActivity_requests">Requests</string>
|
||||||
<string name="PendingMembersActivity_invites">Invites</string>
|
<string name="PendingMembersActivity_invites">Invites</string>
|
||||||
<string name="PendingMembersActivity_people_you_invited">People you invited</string>
|
<string name="PendingMembersActivity_people_you_invited">People you invited</string>
|
||||||
@@ -728,7 +728,6 @@
|
|||||||
|
|
||||||
<!-- ManageGroupActivity -->
|
<!-- ManageGroupActivity -->
|
||||||
<string name="ManageGroupActivity_disappearing_messages">Disappearing messages</string>
|
<string name="ManageGroupActivity_disappearing_messages">Disappearing messages</string>
|
||||||
<string name="ManageGroupActivity_pending_group_invites">Pending group invites</string>
|
|
||||||
<string name="ManageGroupActivity_member_requests_and_invites">Member requests & invites</string>
|
<string name="ManageGroupActivity_member_requests_and_invites">Member requests & invites</string>
|
||||||
<string name="ManageGroupActivity_add_members">Add members</string>
|
<string name="ManageGroupActivity_add_members">Add members</string>
|
||||||
<string name="ManageGroupActivity_edit_group_info">Edit group info</string>
|
<string name="ManageGroupActivity_edit_group_info">Edit group info</string>
|
||||||
@@ -875,8 +874,7 @@
|
|||||||
<!-- GroupJoinUpdateRequiredBottomSheetDialogFragment -->
|
<!-- GroupJoinUpdateRequiredBottomSheetDialogFragment -->
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_group_links_coming_soon">Group links coming soon</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_group_links_coming_soon">Group links coming soon</string>
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal_to_use_group_links">Update Signal to use group links</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal_to_use_group_links">Update Signal to use group links</string>
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_coming_soon">Joining a group via a link is not yet supported by Signal. This feature will be released in an upcoming update.</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_message">The version of Signal you’re using does not support this group link. Update to the latest version to join this group via link.</string>
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_message">The version of Signal you’re using does not support group links. Update to the latest version to join this group via link.</string>
|
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal">Update Signal</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_signal">Update Signal</string>
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_linked_device_message">One or more of your linked devices are running a version of Signal that doesn\'t support group links. Update Signal on your linked device(s) to join this group.</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_update_linked_device_message">One or more of your linked devices are running a version of Signal that doesn\'t support group links. Update Signal on your linked device(s) to join this group.</string>
|
||||||
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_group_link_is_not_valid">Group link is not valid</string>
|
<string name="GroupJoinUpdateRequiredBottomSheetDialogFragment_group_link_is_not_valid">Group link is not valid</string>
|
||||||
|
Reference in New Issue
Block a user