From b6b499d8651da1b7ee345db61e6713302f41cb60 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 1 Jul 2020 14:53:42 -0400 Subject: [PATCH] Refresh recipients outside of a transaction for storage service. --- .../securesms/database/RecipientDatabase.java | 17 +++++++++++------ .../groups/GroupsV2CapabilityChecker.java | 7 ++++--- 2 files changed, 15 insertions(+), 9 deletions(-) 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 d41c030426..4786f2b69d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -522,6 +522,7 @@ public class RecipientDatabase extends Database { SQLiteDatabase db = databaseHelper.getWritableDatabase(); IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context); ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context); + Set needsRefresh = new HashSet<>(); db.beginTransaction(); @@ -556,7 +557,7 @@ public class RecipientDatabase extends Database { } threadDatabase.setArchived(recipientId, insert.isArchived()); - Recipient.live(recipientId).refresh(); + needsRefresh.add(recipientId); } } @@ -598,7 +599,7 @@ public class RecipientDatabase extends Database { } threadDatabase.setArchived(recipientId, update.getNew().isArchived()); - Recipient.live(recipientId).refresh(); + needsRefresh.add(recipientId); } for (SignalGroupV1Record insert : groupV1Inserts) { @@ -607,7 +608,7 @@ public class RecipientDatabase extends Database { Recipient recipient = Recipient.externalGroup(context, GroupId.v1orThrow(insert.getGroupId())); threadDatabase.setArchived(recipient.getId(), insert.isArchived()); - recipient.live().refresh(); + needsRefresh.add(recipient.getId()); } for (RecordUpdate update : groupV1Updates) { @@ -621,7 +622,7 @@ public class RecipientDatabase extends Database { Recipient recipient = Recipient.externalGroup(context, GroupId.v1orThrow(update.getOld().getGroupId())); threadDatabase.setArchived(recipient.getId(), update.getNew().isArchived()); - recipient.live().refresh(); + needsRefresh.add(recipient.getId()); } for (SignalGroupV2Record insert : groupV2Inserts) { @@ -633,7 +634,7 @@ public class RecipientDatabase extends Database { ApplicationDependencies.getJobManager().add(new WakeGroupV2Job(insert.getMasterKey())); threadDatabase.setArchived(recipient.getId(), insert.isArchived()); - recipient.live().refresh(); + needsRefresh.add(recipient.getId()); } for (RecordUpdate update : groupV2Updates) { @@ -647,13 +648,17 @@ public class RecipientDatabase extends Database { Recipient recipient = Recipient.externalGroup(context, GroupId.v2(update.getOld().getMasterKey())); threadDatabase.setArchived(recipient.getId(), update.getNew().isArchived()); - recipient.live().refresh(); + needsRefresh.add(recipient.getId()); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } + + for (RecipientId id : needsRefresh) { + Recipient.live(id).refresh(); + } } public void applyStorageSyncUpdates(@NonNull StorageId storageId, SignalAccountRecord update) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java index 382b09df35..c43f507bdc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java @@ -14,12 +14,13 @@ import java.util.Collection; import java.util.HashSet; import java.util.concurrent.TimeUnit; -final class GroupsV2CapabilityChecker { +public final class GroupsV2CapabilityChecker { private static final String TAG = Log.tag(GroupsV2CapabilityChecker.class); - GroupsV2CapabilityChecker() { - } + GroupsV2CapabilityChecker() {} + + @WorkerThread boolean allAndSelfSupportGroupsV2AndUuid(@NonNull Collection recipientIds)