From e89655f793331714cbd22ba299d2930a1802d1d7 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 17 Jul 2020 10:23:51 -0400 Subject: [PATCH] Resolve newly-entered numbers before starting a conversation. --- .../securesms/NewConversationActivity.java | 40 +++++++++++++++++-- .../jobmanager/impl/NetworkConstraint.java | 13 ++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 5c5ca4f40a..b1746d9456 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -21,15 +21,24 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import androidx.appcompat.app.AlertDialog; + +import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper; import org.thoughtcrime.securesms.conversation.ConversationActivity; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupActivity; +import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.util.FeatureFlags; +import org.thoughtcrime.securesms.util.concurrent.SimpleTask; +import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import org.whispersystems.libsignal.util.guava.Optional; +import java.io.IOException; + /** * Activity container for starting a new conversation. * @@ -52,14 +61,37 @@ public class NewConversationActivity extends ContactSelectionActivity @Override public void onContactSelected(Optional recipientId, String number) { - Recipient recipient; if (recipientId.isPresent()) { - recipient = Recipient.resolved(recipientId.get()); + launch(Recipient.resolved(recipientId.get())); } else { Log.i(TAG, "[onContactSelected] Maybe creating a new recipient."); - recipient = Recipient.external(this, number); + if (FeatureFlags.cds() && NetworkConstraint.isMet(this)) { + Log.i(TAG, "[onContactSelected] CDS enabled. Doing contact refresh."); + + AlertDialog progress = SimpleProgressDialog.show(this); + + SimpleTask.run(getLifecycle(), () -> { + Recipient resolved = Recipient.external(this, number); + + if (!resolved.isRegistered()) { + Log.i(TAG, "[onContactSelected] Not registered. Doing a directory refresh."); + try { + DirectoryHelper.refreshDirectoryFor(this, resolved, false); + resolved = Recipient.resolved(resolved.getId()); + } catch (IOException e) { + Log.w(TAG, "[onContactSelected] Failed to refresh directory for new contact."); + } + } + + return resolved; + }, resolved -> { + progress.dismiss(); + launch(resolved); + }); + } else { + launch(Recipient.external(this, number)); + } } - launch(recipient); } private void launch(Recipient recipient) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java index 1546883b85..1348a052fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java @@ -22,10 +22,7 @@ public class NetworkConstraint implements Constraint { @Override public boolean isMet() { - ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); - - return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + return isMet(application); } @Override @@ -39,6 +36,14 @@ public class NetworkConstraint implements Constraint { jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); } + public static boolean isMet(@NonNull Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + + return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + } + + public static final class Factory implements Constraint.Factory { private final Application application;