From aac7e9ea533f53e7fadf7bb837d0e13a1bdeeb7f Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 4 Nov 2019 12:38:02 -0500 Subject: [PATCH] Fix issue with ShareActivity contact display. --- .../securesms/ContactSelectionActivity.java | 7 +++++-- .../securesms/ContactSelectionListFragment.java | 10 ++++++---- .../thoughtcrime/securesms/InviteActivity.java | 6 ++++-- .../securesms/NewConversationActivity.java | 13 +++++++++++-- src/org/thoughtcrime/securesms/ShareActivity.java | 15 +++++++++++---- .../contacts/ContactSelectionListItem.java | 5 +++++ .../securesms/contacts/ContactsCursorLoader.java | 9 ++++++--- 7 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java index 207833bba1..1dd2b6176b 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java +++ b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java @@ -26,11 +26,14 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.components.ContactFilterToolbar; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode; import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper; +import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; +import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.lang.ref.WeakReference; @@ -113,10 +116,10 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB } @Override - public void onContactSelected(String number) {} + public void onContactSelected(Optional recipientId, String number) {} @Override - public void onContactDeselected(String number) {} + public void onContactDeselected(Optional recipientId, String number) {} private static class RefreshDirectoryTask extends AsyncTask { diff --git a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java index d7cdf91d88..70abd59900 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -51,11 +51,13 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper; +import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.FixedViewsAdapter; import org.thoughtcrime.securesms.util.adapter.RecyclerViewConcatenateAdapterStickyHeader; +import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.LinkedList; @@ -328,11 +330,11 @@ public final class ContactSelectionListFragment extends Fragment if (!isMulti() || !selectedContacts.contains(contact.getNumber())) { selectedContacts.add(contact.getNumber()); contact.setChecked(true); - if (onContactSelectedListener != null) onContactSelectedListener.onContactSelected(contact.getNumber()); + if (onContactSelectedListener != null) onContactSelectedListener.onContactSelected(contact.getRecipientId(), contact.getNumber()); } else { selectedContacts.remove(contact.getNumber()); contact.setChecked(false); - if (onContactSelectedListener != null) onContactSelectedListener.onContactDeselected(contact.getNumber()); + if (onContactSelectedListener != null) onContactSelectedListener.onContactDeselected(contact.getRecipientId(), contact.getNumber()); } } } @@ -346,8 +348,8 @@ public final class ContactSelectionListFragment extends Fragment } public interface OnContactSelectedListener { - void onContactSelected(String number); - void onContactDeselected(String number); + void onContactSelected(Optional recipientId, String number); + void onContactDeselected(Optional recipientId, String number); } public interface InviteCallback { diff --git a/src/org/thoughtcrime/securesms/InviteActivity.java b/src/org/thoughtcrime/securesms/InviteActivity.java index d20087e623..0933c2b32c 100644 --- a/src/org/thoughtcrime/securesms/InviteActivity.java +++ b/src/org/thoughtcrime/securesms/InviteActivity.java @@ -33,11 +33,13 @@ import org.thoughtcrime.securesms.components.ContactFilterToolbar.OnFilterChange import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; import org.thoughtcrime.securesms.util.ViewUtil; 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.concurrent.ExecutionException; @@ -110,12 +112,12 @@ public class InviteActivity extends PassphraseRequiredActionBarActivity implemen } @Override - public void onContactSelected(String number) { + public void onContactSelected(Optional recipientId, String number) { updateSmsButtonText(); } @Override - public void onContactDeselected(String number) { + public void onContactDeselected(Optional recipientId, String number) { updateSmsButtonText(); } diff --git a/src/org/thoughtcrime/securesms/NewConversationActivity.java b/src/org/thoughtcrime/securesms/NewConversationActivity.java index a39dba25d3..ea492c9b76 100644 --- a/src/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/src/org/thoughtcrime/securesms/NewConversationActivity.java @@ -26,7 +26,10 @@ import android.view.View; import org.thoughtcrime.securesms.conversation.ConversationActivity; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.recipients.RecipientId; +import org.whispersystems.libsignal.util.guava.Optional; /** * Activity container for starting a new conversation. @@ -49,8 +52,14 @@ public class NewConversationActivity extends ContactSelectionActivity } @Override - public void onContactSelected(String number) { - Recipient recipient = Recipient.external(this, number); + public void onContactSelected(Optional recipientId, String number) { + Recipient recipient; + if (recipientId.isPresent()) { + recipient = Recipient.resolved(recipientId.get()); + } else { + Log.i(TAG, "[onContactSelected] Maybe creating a new recipient."); + recipient = Recipient.external(this, number); + } Intent intent = new Intent(this, ConversationActivity.class); intent.putExtra(ConversationActivity.RECIPIENT_EXTRA, recipient.getId()); diff --git a/src/org/thoughtcrime/securesms/ShareActivity.java b/src/org/thoughtcrime/securesms/ShareActivity.java index 87a1dce76b..7e11ba2d59 100644 --- a/src/org/thoughtcrime/securesms/ShareActivity.java +++ b/src/org/thoughtcrime/securesms/ShareActivity.java @@ -56,6 +56,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.whispersystems.libsignal.util.Pair; +import org.whispersystems.libsignal.util.guava.Optional; import java.io.FileInputStream; import java.io.IOException; @@ -275,19 +276,25 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity } @Override - public void onContactSelected(String number) { + public void onContactSelected(Optional recipientId, String number) { SimpleTask.run(this.getLifecycle(), () -> { - Recipient recipient = Recipient.external(this, number); + Recipient recipient; + if (recipientId.isPresent()) { + recipient = Recipient.resolved(recipientId.get()); + } else { + Log.i(TAG, "[onContactSelected] Maybe creating a new recipient."); + recipient = Recipient.external(this, number); + } + long existingThread = DatabaseFactory.getThreadDatabase(this).getThreadIdIfExistsFor(recipient); return new Pair<>(existingThread, recipient); }, result -> { createConversation(result.first(), result.second().getId(), ThreadDatabase.DistributionTypes.DEFAULT); }); - } @Override - public void onContactDeselected(String number) { + public void onContactDeselected(@NonNull Optional recipientId, String number) { } diff --git a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 6986b500d8..ff7c1c95a0 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.recipients.RecipientForeverObserver; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.ViewUtil; +import org.whispersystems.libsignal.util.guava.Optional; public class ContactSelectionListItem extends LinearLayout implements RecipientForeverObserver { @@ -128,6 +129,10 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientF return number; } + public Optional getRecipientId() { + return recipient != null ? Optional.of(recipient.getId()) : Optional.absent(); + } + @Override public void onRecipientChanged(@NonNull Recipient recipient) { contactPhotoImage.setAvatar(glideRequests, recipient, false); diff --git a/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java b/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java index 174864d028..3402e5e6a7 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java @@ -181,9 +181,12 @@ public class ContactsCursorLoader extends CursorLoader { ThreadDatabase.Reader reader = threadDatabase.readerFor(rawConversations); ThreadRecord threadRecord; while ((threadRecord = reader.getNext()) != null) { - recentConversations.addRow(new Object[] { threadRecord.getRecipient().getId().serialize(), - threadRecord.getRecipient().toShortString(getContext()), - threadRecord.getRecipient().requireStringId(), + Recipient recipient = threadRecord.getRecipient(); + String stringId = recipient.isGroup() ? recipient.requireGroupId() : recipient.getE164().or(recipient.getEmail()).or(""); + + recentConversations.addRow(new Object[] { recipient.getId().serialize(), + recipient.toShortString(getContext()), + stringId, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, "", ContactRepository.RECENT_TYPE });