diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt index 000fd999be..e2432a23ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessorV2.kt @@ -303,7 +303,7 @@ open class MessageContentProcessorV2(private val context: Context) { open fun process(envelope: Envelope, content: Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean = false) { val stopwatch = Stopwatch("process-content") - val senderRecipient = Recipient.resolved(RecipientId.from(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164))) + val senderRecipient = Recipient.externalPush(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164)) handleMessage(senderRecipient, envelope, content, metadata, serverDeliveredTimestamp, processingEarlyContent, stopwatch) diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index a12497abf1..35531b62d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -10,8 +10,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import com.annimon.stream.Stream; - import org.signal.core.util.StringUtil; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; @@ -271,8 +269,7 @@ public class Recipient { throw new AssertionError(); } - RecipientTable db = SignalDatabase.recipients(); - RecipientId recipientId = db.getAndPossiblyMerge(serviceId, e164); + RecipientId recipientId = RecipientId.from(new SignalServiceAddress(serviceId, e164)); Recipient resolved = resolved(recipientId); @@ -282,7 +279,7 @@ public class Recipient { if (!resolved.isRegistered() && serviceId != null) { Log.w(TAG, "External push was locally marked unregistered. Marking as registered."); - db.markRegistered(recipientId, serviceId); + SignalDatabase.recipients().markRegistered(recipientId, serviceId); } else if (!resolved.isRegistered()) { Log.w(TAG, "External push was locally marked unregistered, but we don't have an ACI, so we can't do anything.", new Throwable()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java index bc8eb7e8b1..b19c6751b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.recipients; import android.annotation.SuppressLint; -import android.content.Context; import android.os.Parcel; import android.os.Parcelable; @@ -13,6 +12,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.DatabaseId; import org.signal.core.util.LongSerializer; +import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.util.DelimiterUtil; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.push.ServiceId; @@ -21,7 +21,6 @@ import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -94,9 +93,8 @@ public class RecipientId implements Parcelable, Comparable, Databas RecipientId recipientId = RecipientIdCache.INSTANCE.get(serviceId, e164); if (recipientId == null) { - Recipient recipient = Recipient.externalPush(serviceId, e164); - RecipientIdCache.INSTANCE.put(recipient); - recipientId = recipient.getId(); + recipientId = SignalDatabase.recipients().getAndPossiblyMerge(serviceId, e164); + RecipientIdCache.INSTANCE.put(recipientId, e164, serviceId); } return recipientId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java index 5de64ae931..6e44715528 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java @@ -32,18 +32,22 @@ final class RecipientIdCache { }; } + synchronized void put(@NonNull RecipientId recipientId, @Nullable String e164, @Nullable ServiceId serviceId) { + if (e164 != null) { + ids.put(e164, recipientId); + } + + if (serviceId != null) { + ids.put(serviceId, recipientId); + } + } + synchronized void put(@NonNull Recipient recipient) { RecipientId recipientId = recipient.getId(); Optional e164 = recipient.getE164(); Optional serviceId = recipient.getServiceId(); - if (e164.isPresent()) { - ids.put(e164.get(), recipientId); - } - - if (serviceId.isPresent()) { - ids.put(serviceId.get(), recipientId); - } + put(recipientId, e164.orElse(null), serviceId.orElse(null)); } synchronized @Nullable RecipientId get(@Nullable ServiceId serviceId, @Nullable String e164) {