diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 81dc5a7f9..e7222e589 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -355,7 +355,7 @@ public class ConversationActivity extends PassphraseRequiredActivity private boolean isMmsEnabled = true; private boolean isSecurityInitialized = false; - private final IdentityRecordList identityRecords = new IdentityRecordList(); + private IdentityRecordList identityRecords = new IdentityRecordList(Collections.emptyList()); private final DynamicTheme dynamicTheme = new DynamicDarkToolbarTheme(); private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); @@ -1648,7 +1648,7 @@ public class ConversationActivity extends PassphraseRequiredActivity @Override protected void onPostExecute(@NonNull Pair result) { Log.i(TAG, "Got identity records: " + result.first().isUnverified()); - identityRecords.replaceWith(result.first()); + identityRecords = result.first(); if (result.second() != null) { Log.d(TAG, "Replacing banner..."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java index fda98b7a1..a3628da8b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java @@ -37,6 +37,7 @@ import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; +import java.util.LinkedList; import java.util.List; public class IdentityDatabase extends Database { @@ -115,9 +116,9 @@ public class IdentityDatabase extends Database { } public @NonNull IdentityRecordList getIdentities(@NonNull List recipients) { - IdentityRecordList identityRecordList = new IdentityRecordList(); - SQLiteDatabase database = databaseHelper.getReadableDatabase(); - String[] selectionArgs = new String[1]; + List records = new LinkedList<>(); + SQLiteDatabase database = databaseHelper.getReadableDatabase(); + String[] selectionArgs = new String[1]; database.beginTransaction(); try { @@ -126,7 +127,7 @@ public class IdentityDatabase extends Database { try (Cursor cursor = database.query(TABLE_NAME, null, RECIPIENT_ID + " = ?", selectionArgs, null, null, null)) { if (cursor.moveToFirst()) { - identityRecordList.add(getIdentityRecord(cursor)); + records.add(getIdentityRecord(cursor)); } } catch (InvalidKeyException | IOException e) { throw new AssertionError(e); @@ -136,7 +137,7 @@ public class IdentityDatabase extends Database { database.endTransaction(); } - return identityRecordList; + return new IdentityRecordList(records); } public void saveIdentity(@NonNull RecipientId recipientId, IdentityKey identityKey, VerifiedStatus verifiedStatus, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java index e3313e58d..47471ef41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java @@ -1,30 +1,27 @@ package org.thoughtcrime.securesms.database.identity; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.IdentityDatabase.IdentityRecord; import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; public final class IdentityRecordList { - private final List identityRecords = new LinkedList<>(); + private final List identityRecords; + private final boolean isVerified; + private final boolean isUnverified; - public void add(@NonNull IdentityRecord identityRecord) { - identityRecords.add(identityRecord); - } - - public void replaceWith(@NonNull IdentityRecordList identityRecordList) { - identityRecords.clear(); - identityRecords.addAll(identityRecordList.identityRecords); + public IdentityRecordList(@NonNull Collection records) { + identityRecords = new ArrayList<>(records); + isVerified = isVerified(identityRecords); + isUnverified = isUnverified(identityRecords); } public List getIdentityRecords() { @@ -32,6 +29,14 @@ public final class IdentityRecordList { } public boolean isVerified() { + return isVerified; + } + + public boolean isUnverified() { + return isUnverified; + } + + private static boolean isVerified(@NonNull Collection identityRecords) { for (IdentityRecord identityRecord : identityRecords) { if (identityRecord.getVerifiedStatus() != VerifiedStatus.VERIFIED) { return false; @@ -41,7 +46,7 @@ public final class IdentityRecordList { return identityRecords.size() > 0; } - public boolean isUnverified() { + private static boolean isUnverified(@NonNull Collection identityRecords) { for (IdentityRecord identityRecord : identityRecords) { if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) { return true; @@ -85,7 +90,7 @@ public final class IdentityRecordList { return untrusted; } - public List getUnverifiedRecords() { + public @NonNull List getUnverifiedRecords() { List results = new ArrayList<>(identityRecords.size()); for (IdentityRecord identityRecord : identityRecords) { @@ -97,7 +102,7 @@ public final class IdentityRecordList { return results; } - public List getUnverifiedRecipients() { + public @NonNull List getUnverifiedRecipients() { List unverified = new ArrayList<>(identityRecords.size()); for (IdentityRecord identityRecord : identityRecords) {