From 40a8d21c154e2429a98b5e17a86be0805c070aec Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Mon, 31 Aug 2020 11:33:50 -0300 Subject: [PATCH] Fix to allow send of Signal invitation SMS to a single person. Fixes #9970 --- .../securesms/ContactSelectionActivity.java | 2 +- .../ContactSelectionListFragment.java | 7 +++---- .../securesms/InviteActivity.java | 20 +++++++++---------- .../securesms/NewConversationActivity.java | 2 +- .../ui/addmembers/AddMembersActivity.java | 2 +- .../ui/addtogroup/AddToGroupsActivity.java | 2 +- .../ui/creategroup/CreateGroupActivity.java | 2 +- .../securesms/sharing/ShareActivity.java | 2 +- 8 files changed, 18 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java index 95f4aafeb5..ebc57af6a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java @@ -113,7 +113,7 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActivit } @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { return true; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index b3f2dbee66..12ac506bfc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -70,7 +70,6 @@ import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.UsernameUtil; @@ -475,7 +474,7 @@ public final class ContactSelectionListFragment extends LoggingFragment SelectedContact selected = SelectedContact.forUsername(recipient.getId(), contact.getNumber()); if (onContactSelectedListener != null) { - if (onContactSelectedListener.onContactSelected(Optional.of(recipient.getId()), null)) { + if (onContactSelectedListener.onBeforeContactSelected(Optional.of(recipient.getId()), null)) { markContactSelected(selected); cursorRecyclerViewAdapter.notifyItemChanged(recyclerView.getChildAdapterPosition(contact), ContactSelectionListAdapter.PAYLOAD_SELECTION_CHANGE); } @@ -493,7 +492,7 @@ public final class ContactSelectionListFragment extends LoggingFragment }); } else { if (onContactSelectedListener != null) { - if (onContactSelectedListener.onContactSelected(contact.getRecipientId(), contact.getNumber())) { + if (onContactSelectedListener.onBeforeContactSelected(contact.getRecipientId(), contact.getNumber())) { markContactSelected(selectedContact); cursorRecyclerViewAdapter.notifyItemChanged(recyclerView.getChildAdapterPosition(contact), ContactSelectionListAdapter.PAYLOAD_SELECTION_CHANGE); } @@ -632,7 +631,7 @@ public final class ContactSelectionListFragment extends LoggingFragment public interface OnContactSelectedListener { /** @return True if the contact is allowed to be selected, otherwise false. */ - boolean onContactSelected(Optional recipientId, String number); + boolean onBeforeContactSelected(Optional recipientId, String number); void onContactDeselected(Optional recipientId, String number); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java index 09f2eadfe1..53e6668e14 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java @@ -40,7 +40,6 @@ import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.whispersystems.libsignal.util.guava.Optional; -import java.util.List; import java.util.concurrent.ExecutionException; public class InviteActivity extends PassphraseRequiredActivity implements ContactSelectionListFragment.OnContactSelectedListener { @@ -103,7 +102,7 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac contactsFragment = (ContactSelectionListFragment)getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment); inviteText.setText(getString(R.string.InviteActivity_lets_switch_to_signal, getString(R.string.install_url))); - updateSmsButtonText(); + updateSmsButtonText(contactsFragment.getSelectedContacts().size()); contactsFragment.setOnContactSelectedListener(this); shareButton.setOnClickListener(new ShareClickListener()); @@ -121,14 +120,14 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac } @Override - public boolean onContactSelected(Optional recipientId, String number) { - updateSmsButtonText(); + public boolean onBeforeContactSelected(Optional recipientId, String number) { + updateSmsButtonText(contactsFragment.getSelectedContacts().size() + 1); return true; } @Override public void onContactDeselected(Optional recipientId, String number) { - updateSmsButtonText(); + updateSmsButtonText(contactsFragment.getSelectedContacts().size()); } private void sendSmsInvites() { @@ -138,12 +137,11 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac .toArray(new SelectedContact[0])); } - private void updateSmsButtonText() { - List selectedContacts = contactsFragment.getSelectedContacts(); + private void updateSmsButtonText(int count) { smsSendButton.setText(getResources().getQuantityString(R.plurals.InviteActivity_send_sms_to_friends, - selectedContacts.size(), - selectedContacts.size())); - smsSendButton.setEnabled(!selectedContacts.isEmpty()); + count, + count)); + smsSendButton.setEnabled(count > 0); } @Override public void onBackPressed() { @@ -157,7 +155,7 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac private void cancelSmsSelection() { setPrimaryColorsToolbarNormal(); contactsFragment.reset(); - updateSmsButtonText(); + updateSmsButtonText(contactsFragment.getSelectedContacts().size()); ViewUtil.animateOut(smsSendFrame, slideOutAnimation, View.GONE); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 392a2a530c..d77b48bfb4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -60,7 +60,7 @@ public class NewConversationActivity extends ContactSelectionActivity } @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { if (recipientId.isPresent()) { launch(Recipient.resolved(recipientId.get())); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java index d85fe806e9..dae818edf0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java @@ -59,7 +59,7 @@ public class AddMembersActivity extends PushContactSelectionActivity { } @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { if (getGroupId().isV1() && recipientId.isPresent() && !Recipient.resolved(recipientId.get()).hasE164()) { Toast.makeText(this, R.string.AddMembersActivity__this_person_cant_be_added_to_legacy_groups, Toast.LENGTH_SHORT).show(); return false; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java index de860ef296..b616c47454 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java @@ -114,7 +114,7 @@ public final class AddToGroupsActivity extends ContactSelectionActivity { } @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { if (contactsFragment.isMulti()) { throw new UnsupportedOperationException("Not yet built to handle multi-select."); // if (contactsFragment.hasQueryFilter()) { 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 87ab2543bf..5d532788f2 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 @@ -93,7 +93,7 @@ public class CreateGroupActivity extends ContactSelectionActivity { } @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { if (contactsFragment.hasQueryFilter()) { getToolbar().clear(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java index bf89386a50..19857fcbb8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java @@ -150,7 +150,7 @@ public class ShareActivity extends PassphraseRequiredActivity @Override - public boolean onContactSelected(Optional recipientId, String number) { + public boolean onBeforeContactSelected(Optional recipientId, String number) { SimpleTask.run(this.getLifecycle(), () -> { Recipient recipient; if (recipientId.isPresent()) {