From acea24c19cd58cb1589570771095df4626fe0763 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 1 Oct 2019 14:53:13 -0400 Subject: [PATCH] Reduce Recipient refreshes. --- .../securesms/jobs/RetrieveProfileJob.java | 25 +++++++++++++------ .../securesms/recipients/LiveRecipient.java | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 8834fac673..6919aad90c 100644 --- a/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/src/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -71,8 +71,10 @@ public class RetrieveProfileJob extends BaseJob { @Override public void onRun() throws IOException { - if (recipient.isGroup()) handleGroupRecipient(recipient); - else handleIndividualRecipient(recipient); + Recipient resolved = recipient.resolve(); + + if (resolved.isGroup()) handleGroupRecipient(resolved); + else handleIndividualRecipient(resolved); } @Override @@ -166,11 +168,15 @@ public class RetrieveProfileJob extends BaseJob { byte[] profileKey = recipient.getProfileKey(); if (unrestrictedUnidentifiedAccess && unidentifiedAccessVerifier != null) { - Log.i(TAG, "Marking recipient UD status as unrestricted."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); + if (recipient.getUnidentifiedAccessMode() != UnidentifiedAccessMode.UNRESTRICTED) { + Log.i(TAG, "Marking recipient UD status as unrestricted."); + recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); + } } else if (profileKey == null || unidentifiedAccessVerifier == null) { - Log.i(TAG, "Marking recipient UD status as disabled."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); + if (recipient.getUnidentifiedAccessMode() != UnidentifiedAccessMode.DISABLED) { + Log.i(TAG, "Marking recipient UD status as disabled."); + recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); + } } else { ProfileCipher profileCipher = new ProfileCipher(profileKey); boolean verifiedUnidentifiedAccess; @@ -183,8 +189,11 @@ public class RetrieveProfileJob extends BaseJob { } UnidentifiedAccessMode mode = verifiedUnidentifiedAccess ? UnidentifiedAccessMode.ENABLED : UnidentifiedAccessMode.DISABLED; - Log.i(TAG, "Marking recipient UD status as " + mode.name() + " after verification."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), mode); + + if (recipient.getUnidentifiedAccessMode() != mode) { + Log.i(TAG, "Marking recipient UD status as " + mode.name() + " after verification."); + recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), mode); + } } } diff --git a/src/org/thoughtcrime/securesms/recipients/LiveRecipient.java b/src/org/thoughtcrime/securesms/recipients/LiveRecipient.java index 84b0084a50..61ea3df7d8 100644 --- a/src/org/thoughtcrime/securesms/recipients/LiveRecipient.java +++ b/src/org/thoughtcrime/securesms/recipients/LiveRecipient.java @@ -116,7 +116,7 @@ public final class LiveRecipient { * @return A fully-resolved version of the recipient. May require reading from disk. */ @WorkerThread - public synchronized @NonNull Recipient resolve() { + public @NonNull Recipient resolve() { Recipient current = recipient.get(); if (!current.isResolving()) {