From 19626361ecaec44003b310e630d9cb8658436ae4 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 16 Nov 2023 12:25:04 -0500 Subject: [PATCH] Fix bug allowing creation of new and sending in existing MMS groups. --- .../conversation/v2/DisabledInputView.kt | 8 +++++++- .../conversation/v2/InputReadyState.kt | 2 +- .../ui/creategroup/CreateGroupActivity.java | 20 +++++++++++++++---- app/src/main/res/values/strings.xml | 7 +++++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt index 10251e47cd2..446f30baa01 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt @@ -133,10 +133,16 @@ class DisabledInputView @JvmOverloads constructor( existingView = inviteToSignal, create = { inflater.inflate(R.layout.conversation_activity_sms_export_stub, this, false) }, bind = { - findViewById(R.id.export_sms_message).text = context.getString(R.string.ConversationActivity__sms_messaging_is_no_longer_supported_in_signal_invite_s_to_to_signal_to_keep_the_conversation_here, recipient.getDisplayName(context)) + findViewById(R.id.export_sms_message).text = if (recipient.isMmsGroup) { + context.getString(R.string.ConversationActivity__sms_messaging_is_no_longer_supported) + } else { + context.getString(R.string.ConversationActivity__sms_messaging_is_no_longer_supported_in_signal_invite_s_to_to_signal_to_keep_the_conversation_here, recipient.getDisplayName(context)) + } + findViewById(R.id.export_sms_button).apply { setText(R.string.ConversationActivity__invite_to_signal) setOnClickListener { listener?.onInviteToSignal(recipient) } + visible = !recipient.isMmsGroup } } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt index 0f6daf198a1..678629a799b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt @@ -28,7 +28,7 @@ class InputReadyState( val isRequestingMember: Boolean? = selfMemberLevel?.equals(GroupTable.MemberLevel.REQUESTING_MEMBER) fun shouldShowInviteToSignal(): Boolean { - return !conversationRecipient.isGroup && + return !conversationRecipient.isPushGroup && !conversationRecipient.isRegistered && !conversationRecipient.isReleaseNotes } 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 263e9692789..d01091d0c8e 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 @@ -10,6 +10,7 @@ import androidx.annotation.Nullable; import com.google.android.material.button.MaterialButton; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; import org.signal.core.util.DimensionUnit; @@ -155,7 +156,7 @@ private void handleNextPressed() { stopwatch.split("resolve"); Set registeredChecks = resolved.stream() - .filter(r -> r.getRegistered() == RecipientTable.RegisteredState.UNKNOWN) + .filter(r -> !r.isRegistered() || !r.hasServiceId()) .collect(Collectors.toSet()); Log.i(TAG, "Need to do " + registeredChecks.size() + " registration checks."); @@ -170,11 +171,22 @@ private void handleNextPressed() { stopwatch.split("registered"); - return ids; - }, recipientIds -> { + return Recipient.resolvedList(ids); + }, recipients -> { dismissibleDialog.dismiss(); stopwatch.stop(TAG); - startActivityForResult(AddGroupDetailsActivity.newIntent(this, recipientIds), REQUEST_CODE_ADD_DETAILS); + + List notRegistered = recipients.stream().filter(r -> !r.isRegistered() || !r.hasServiceId()).collect(Collectors.toList()); + + if (notRegistered.isEmpty()) { + startActivityForResult(AddGroupDetailsActivity.newIntent(this, recipients.stream().map(Recipient::getId).collect(Collectors.toList())), REQUEST_CODE_ADD_DETAILS); + } else { + String notRegisteredNames = notRegistered.stream().map(r -> r.getDisplayName(this)).collect(Collectors.joining(", ")); + new MaterialAlertDialogBuilder(this) + .setMessage(getResources().getQuantityString(R.plurals.CreateGroupActivity_not_signal_users, notRegistered.size(), notRegisteredNames)) + .setPositiveButton(android.R.string.ok, null) + .show(); + } }); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bf23fb9b5c3..95655c6b0b2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -405,6 +405,8 @@ Error sending media + + SMS messaging is no longer supported in Signal. SMS messaging is no longer supported in Signal. Invite %1$s to Signal to keep the conversation here. @@ -4581,6 +4583,11 @@ %1$s is not a Signal user %1$s is not a Signal user + + + %1$s is not a Signal user + %1$s are not Signal users + Search name or number