2019-09-06 23:40:06 -04:00
|
|
|
package org.thoughtcrime.securesms.recipients;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.WorkerThread;
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext;
|
|
|
|
import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper;
|
|
|
|
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
|
|
|
import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState;
|
|
|
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
|
|
|
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
|
|
|
|
import org.thoughtcrime.securesms.logging.Log;
|
|
|
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
|
|
import org.whispersystems.libsignal.util.guava.Optional;
|
|
|
|
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
public class RecipientUtil {
|
|
|
|
|
|
|
|
private static final String TAG = Log.tag(RecipientUtil.class);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method will do it's best to craft a fully-populated {@link SignalServiceAddress} based on
|
|
|
|
* the provided recipient. This includes performing a possible network request if no UUID is
|
|
|
|
* available.
|
|
|
|
*/
|
|
|
|
@WorkerThread
|
|
|
|
public static @NonNull SignalServiceAddress toSignalServiceAddress(@NonNull Context context, @NonNull Recipient recipient) {
|
|
|
|
recipient = recipient.resolve();
|
|
|
|
|
|
|
|
if (!recipient.getUuid().isPresent() && !recipient.getE164().isPresent()) {
|
|
|
|
throw new AssertionError(recipient.getId() + " - No UUID or phone number!");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (FeatureFlags.UUIDS && !recipient.getUuid().isPresent()) {
|
|
|
|
Log.i(TAG, recipient.getId() + " is missing a UUID...");
|
|
|
|
try {
|
|
|
|
RegisteredState state = DirectoryHelper.refreshDirectoryFor(context, recipient, false);
|
|
|
|
recipient = Recipient.resolved(recipient.getId());
|
|
|
|
Log.i(TAG, "Successfully performed a UUID fetch for " + recipient.getId() + ". Registered: " + state);
|
|
|
|
} catch (IOException e) {
|
|
|
|
Log.w(TAG, "Failed to fetch a UUID for " + recipient.getId() + ". Scheduling a future fetch and building an address without one.");
|
|
|
|
ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(recipient, false));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return new SignalServiceAddress(Optional.fromNullable(recipient.getUuid().orNull()), Optional.fromNullable(recipient.resolve().getE164().orNull()));
|
|
|
|
}
|
2019-11-25 10:19:43 -05:00
|
|
|
|
|
|
|
public static boolean isBlockable(@NonNull Recipient recipient) {
|
|
|
|
Recipient resolved = recipient.resolve();
|
|
|
|
return resolved.isPushGroup() || resolved.hasServiceIdentifier();
|
|
|
|
}
|
2019-09-06 23:40:06 -04:00
|
|
|
}
|