diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java index 4638708df..fa6252616 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java @@ -24,7 +24,9 @@ import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.conversation.ConversationActivity; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl; +import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.BottomSheetUtil; @@ -113,6 +115,13 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF }); groupJoinButton.setVisibility(View.VISIBLE); break; + case UPDATE_LINKED_DEVICE_TO_JOIN: + groupJoinExplain.setText(R.string.GroupJoinUpdateRequiredBottomSheetDialogFragment_update_linked_device_message); + groupCancelButton.setText(android.R.string.ok); + groupJoinButton.setVisibility(View.GONE); + ApplicationDependencies.getJobManager() + .add(RetrieveProfileJob.forRecipient(Recipient.self().getId())); + break; case LOCAL_CAN_JOIN: groupJoinExplain.setText(details.joinRequiresAdminApproval() ? R.string.GroupJoinBottomSheetDialogFragment_admin_approval_needed : R.string.GroupJoinBottomSheetDialogFragment_direct_join); @@ -151,19 +160,21 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF ); } - private static FeatureFlags.GroupJoinStatus getGroupJoinStatus() { + private static ExtendedGroupJoinStatus getGroupJoinStatus() { FeatureFlags.GroupJoinStatus groupJoinStatus = FeatureFlags.clientLocalGroupJoinStatus(); - if (groupJoinStatus == FeatureFlags.GroupJoinStatus.LOCAL_CAN_JOIN) { - if (Recipient.self().getGroupsV2Capability() == Recipient.Capability.NOT_SUPPORTED) { - // TODO [Alan] GV2 additional copy could be presented in these cases - return FeatureFlags.GroupJoinStatus.UPDATE_TO_JOIN; - } - - return groupJoinStatus; - } + switch (groupJoinStatus) { + case COMING_SOON : return ExtendedGroupJoinStatus.COMING_SOON; + 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 groupJoinStatus; + return ExtendedGroupJoinStatus.LOCAL_CAN_JOIN; + } + default: throw new AssertionError(); + } } private @NonNull String errorToMessage(@NonNull FetchGroupDetailsError error) { @@ -201,4 +212,18 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF return new ResourceContactPhoto(R.drawable.ic_group_outline_48); } } + + 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. */ + UPDATE_LINKED_DEVICE_TO_JOIN, + + /** This version of the client allows joining via GV2 group links. */ + LOCAL_CAN_JOIN + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4811b26aa..19e01e97a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -727,6 +727,7 @@ Joining a group via a link is not yet supported by Signal. This feature will be released in an upcoming update. The version of Signal you’re using does not support group links. Update to the latest version to join this group via link. Update Signal + 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. Group link is not valid