From 2620a8fc51c3fbbe57639450cfaf4783fdcde2ef Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 17 Jun 2022 09:54:22 -0400 Subject: [PATCH] Address corner case where contact details may not be synced. Relates to #12293 --- .../securesms/contacts/ContactsSyncAdapter.java | 9 ++++++++- .../securesms/contacts/sync/ContactDiscovery.kt | 5 +++++ .../contacts/sync/ContactDiscoveryRefreshV1.java | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java index 7322144227..dbca98f543 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java @@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; import org.signal.core.util.SetUtil; +import org.thoughtcrime.securesms.util.Util; import java.io.IOException; import java.util.List; @@ -69,13 +70,19 @@ public class ContactsSyncAdapter extends AbstractThreadedSyncAdapter { Log.w(TAG, e); } } else if (unknownSystemE164s.size() > 0) { - Log.i(TAG, "There are " + unknownSystemE164s.size() + " unknown contacts. Doing an individual sync."); List recipients = Stream.of(unknownSystemE164s) .filter(s -> s.startsWith("+")) .map(s -> Recipient.external(getContext(), s)) .toList(); + + Log.i(TAG, "There are " + unknownSystemE164s.size() + " unknown E164s, which are now " + recipients.size() + " recipients. Only syncing these specific contacts."); + try { ContactDiscovery.refresh(context, recipients, true); + + if (Util.isDefaultSmsProvider(context)) { + ContactDiscovery.syncRecipientInfoWithSystemContacts(context); + } } catch (IOException e) { Log.w(TAG, "Failed to refresh! Scheduling for later.", e); ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(true)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt index b5ab3cbeb9..f98adc6695 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt @@ -134,6 +134,11 @@ object ContactDiscovery { @JvmStatic @WorkerThread fun syncRecipientInfoWithSystemContacts(context: Context) { + if (!hasContactsPermissions(context)) { + Log.w(TAG, "[syncRecipientInfoWithSystemContacts] No contacts permission, skipping.") + return + } + syncRecipientsWithSystemContacts( context = context, rewrites = emptyMap(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV1.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV1.java index 6b27152ec8..99dcea4616 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV1.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV1.java @@ -96,6 +96,10 @@ class ContactDiscoveryRefreshV1 { .map(Recipient::requireE164) .collect(Collectors.toSet()); + if (numbers.size() < recipients.size()) { + Log.w(TAG, "We were asked to refresh " + recipients.size() + " numbers, but filtered that down to " + numbers.size()); + } + return refreshNumbers(context, numbers, numbers); }