diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index e06eff93f..18553dae1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -33,6 +33,7 @@ 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.TextSecurePreferences; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import org.whispersystems.libsignal.util.guava.Optional; @@ -65,16 +66,17 @@ public class NewConversationActivity extends ContactSelectionActivity launch(Recipient.resolved(recipientId.get())); } else { Log.i(TAG, "[onContactSelected] Maybe creating a new recipient."); - if (FeatureFlags.cds() && NetworkConstraint.isMet(this)) { - Log.i(TAG, "[onContactSelected] CDS enabled. Doing contact refresh."); + + if (TextSecurePreferences.isPushRegistered(this) && NetworkConstraint.isMet(this)) { + Log.i(TAG, "[onContactSelected] 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."); + if (!resolved.isRegistered() || !resolved.hasUuid()) { + Log.i(TAG, "[onContactSelected] Not registered or no UUID. Doing a directory refresh."); try { DirectoryHelper.refreshDirectoryFor(this, resolved, false); resolved = Recipient.resolved(resolved.getId()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV1.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV1.java deleted file mode 100644 index 7f6bb47e1..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV1.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.thoughtcrime.securesms.contacts.sync; - -import androidx.annotation.NonNull; - -import com.annimon.stream.Collectors; -import com.annimon.stream.Stream; - -import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper.DirectoryResult; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.util.SetUtil; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.SignalServiceAccountManager; -import org.whispersystems.signalservice.api.push.ContactTokenDetails; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Set; -import java.util.UUID; - -class ContactDiscoveryV1 { - - private static final String TAG = ContactDiscoveryV1.class.getSimpleName(); - - static @NonNull DirectoryResult getDirectoryResult(@NonNull Set databaseNumbers, - @NonNull Set systemNumbers) - throws IOException - { - Set allNumbers = SetUtil.union(databaseNumbers, systemNumbers); - FuzzyPhoneNumberHelper.InputResult inputResult = FuzzyPhoneNumberHelper.generateInput(allNumbers, databaseNumbers); - List activeTokens = getTokens(inputResult.getNumbers()); - Set activeNumbers = Stream.of(activeTokens).map(ContactTokenDetails::getNumber).collect(Collectors.toSet()); - FuzzyPhoneNumberHelper.OutputResult outputResult = FuzzyPhoneNumberHelper.generateOutput(activeNumbers, inputResult); - HashMap uuids = new HashMap<>(); - - for (String number : outputResult.getNumbers()) { - uuids.put(number, null); - } - - return new DirectoryResult(uuids, outputResult.getRewrites()); - } - - static @NonNull DirectoryResult getDirectoryResult(@NonNull String number) throws IOException { - return getDirectoryResult(Collections.singleton(number), Collections.singleton(number)); - } - - private static @NonNull List getTokens(@NonNull Set numbers) throws IOException { - SignalServiceAccountManager accountManager = ApplicationDependencies.getSignalServiceAccountManager(); - - if (numbers.size() == 1) { - Optional details = accountManager.getContact(numbers.iterator().next()); - return details.isPresent() ? Collections.singletonList(details.get()) : Collections.emptyList(); - } else { - return accountManager.getContacts(numbers); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java index fdc6b3aab..4e17def4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java @@ -31,6 +31,9 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +/** + * Uses CDS to map E164's to UUIDs. + */ class ContactDiscoveryV2 { private static final String TAG = Log.tag(ContactDiscoveryV2.class); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java index d3b5a249e..05135fd6c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java @@ -158,13 +158,7 @@ public class DirectoryHelper { return RegisteredState.NOT_REGISTERED; } - DirectoryResult result; - - if (FeatureFlags.cds()) { - result = ContactDiscoveryV2.getDirectoryResult(context, recipient.getE164().get()); - } else { - result = ContactDiscoveryV1.getDirectoryResult(recipient.getE164().get()); - } + DirectoryResult result = ContactDiscoveryV2.getDirectoryResult(context, recipient.getE164().get()); stopwatch.split("e164-network"); @@ -229,13 +223,7 @@ public class DirectoryHelper { Stopwatch stopwatch = new Stopwatch("refresh"); - DirectoryResult result; - - if (FeatureFlags.cds()) { - result = ContactDiscoveryV2.getDirectoryResult(context, databaseNumbers, systemNumbers); - } else { - result = ContactDiscoveryV1.getDirectoryResult(databaseNumbers, systemNumbers); - } + DirectoryResult result = ContactDiscoveryV2.getDirectoryResult(context, databaseNumbers, systemNumbers); stopwatch.split("network"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index 4e32fb807..ff123c04e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -394,10 +394,6 @@ public class RecipientDatabase extends Database { throw new IllegalArgumentException("Must provide a UUID or E164!"); } - if (!FeatureFlags.cds()) { - highTrust = true; - } - RecipientId recipientNeedingRefresh = null; Pair remapped = null; boolean transactionSuccessful = false; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java index 1345ef2d5..ad7b154ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -78,13 +78,7 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob { .filter(uuid -> !UuidUtil.UNKNOWN_UUID.equals(uuid)) .filter(uuid -> !Recipient.self().getUuid().get().equals(uuid)) .map(uuid -> Recipient.externalPush(context, uuid, null, false)) - .filter(recipient -> { - if (FeatureFlags.cds()) { - return recipient.getRegistered() != RecipientDatabase.RegisteredState.NOT_REGISTERED; - } else { - return true; - } - }) + .filter(recipient -> recipient.getRegistered() != RecipientDatabase.RegisteredState.NOT_REGISTERED) .map(Recipient::getId) .collect(Collectors.toSet()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 5365c7767..11fa1f1f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -66,7 +66,7 @@ public class RecipientUtil { throw new AssertionError(recipient.getId() + " - No UUID or phone number!"); } - if (FeatureFlags.cds() && !recipient.getUuid().isPresent()) { + if (!recipient.getUuid().isPresent()) { Log.i(TAG, recipient.getId() + " is missing a UUID..."); RegisteredState state = DirectoryHelper.refreshDirectoryFor(context, recipient, false); @@ -97,15 +97,13 @@ public class RecipientUtil { public static void ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection recipients) throws IOException { - if (FeatureFlags.cds()) { - List recipientsWithoutUuids = Stream.of(recipients) - .map(Recipient::resolve) - .filterNot(Recipient::hasUuid) - .toList(); + List recipientsWithoutUuids = Stream.of(recipients) + .map(Recipient::resolve) + .filterNot(Recipient::hasUuid) + .toList(); - if (recipientsWithoutUuids.size() > 0) { - DirectoryHelper.refreshDirectoryFor(context, recipientsWithoutUuids, false); - } + if (recipientsWithoutUuids.size() > 0) { + DirectoryHelper.refreshDirectoryFor(context, recipientsWithoutUuids, false); } } @@ -115,13 +113,9 @@ public class RecipientUtil { } public static List getEligibleForSending(@NonNull List recipients) { - if (FeatureFlags.cds()) { - return Stream.of(recipients) - .filter(r -> r.getRegistered() != RegisteredState.NOT_REGISTERED) - .toList(); - } else { - return recipients; - } + return Stream.of(recipients) + .filter(r -> r.getRegistered() != RegisteredState.NOT_REGISTERED) + .toList(); } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 6aea5cda7..4949c623f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -53,7 +53,6 @@ public final class FeatureFlags { private static final String GROUPS_V2_JOIN_VERSION = "android.groupsv2.joinVersion"; private static final String GROUPS_V2_LINKS_VERSION = "android.groupsv2.manageGroupLinksVersion"; private static final String GROUPS_V2_CAPACITY = "global.groupsv2.maxGroupSize"; - private static final String CDS_VERSION = "android.cdsVersion"; private static final String INTERNAL_USER = "android.internalUser"; private static final String MENTIONS = "android.mentions"; private static final String VERIFY_V2 = "android.verifyV2"; @@ -72,7 +71,6 @@ public final class FeatureFlags { GROUPS_V2_CAPACITY, GROUPS_V2_JOIN_VERSION, GROUPS_V2_LINKS_VERSION, - CDS_VERSION, INTERNAL_USER, USERNAMES, MENTIONS, @@ -102,7 +100,6 @@ public final class FeatureFlags { GROUPS_V2_CREATE_VERSION, GROUPS_V2_JOIN_VERSION, VERIFY_V2, - CDS_VERSION, CLIENT_EXPIRATION ); @@ -230,11 +227,6 @@ public final class FeatureFlags { return getBoolean(INTERNAL_USER, false); } - /** Whether or not to use the new contact discovery service endpoint, which supports UUIDs. */ - public static boolean cds() { - return getVersionFlag(CDS_VERSION) == VersionFlag.ON; - } - /** Whether or not we allow mentions send support in groups. */ public static boolean mentions() { return getBoolean(MENTIONS, false);