diff --git a/src/org/thoughtcrime/securesms/database/RecipientDatabase.java b/src/org/thoughtcrime/securesms/database/RecipientDatabase.java index fda06a559c..bcb8e881f8 100644 --- a/src/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/src/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -270,7 +270,7 @@ public class RecipientDatabase extends Database { if (cursor != null && cursor.moveToNext()) { return getRecipientSettings(cursor); } else { - throw new AssertionError("Couldn't find recipient! id: " + id.serialize()); + throw new MissingRecipientError(id); } } } @@ -879,4 +879,9 @@ public class RecipientDatabase extends Database { } } + public static class MissingRecipientError extends AssertionError { + public MissingRecipientError(@Nullable RecipientId id) { + super("Failed to find recipient with ID: " + id); + } + } } diff --git a/src/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java b/src/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java index 6fc3751c3c..06e3e53a50 100644 --- a/src/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java +++ b/src/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java @@ -10,6 +10,7 @@ import androidx.lifecycle.MutableLiveData; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientDatabase.MissingRecipientError; import org.thoughtcrime.securesms.util.LRUCache; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; @@ -44,7 +45,16 @@ public final class LiveRecipientCache { final LiveRecipient newLive = new LiveRecipient(context, new MutableLiveData<>(), new Recipient(id)); recipients.put(id, newLive); - SignalExecutors.BOUNDED.execute(newLive::resolve); + + MissingRecipientError prettyStackTraceError = new MissingRecipientError(newLive.getId()); + + SignalExecutors.BOUNDED.execute(() -> { + try { + newLive.resolve(); + } catch (MissingRecipientError e) { + throw prettyStackTraceError; + } + }); live = newLive; }