Skip to content

Commit

Permalink
Make identity record list immutable.
Browse files Browse the repository at this point in the history
  • Loading branch information
alan-signal committed Jul 21, 2020
1 parent 46f3d50 commit 16fdb9b
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -1648,7 +1648,7 @@ private ListenableFuture<Boolean> initializeIdentityRecords() {
@Override
protected void onPostExecute(@NonNull Pair<IdentityRecordList, String> 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...");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.whispersystems.libsignal.util.guava.Optional;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class IdentityDatabase extends Database {
Expand Down Expand Up @@ -115,9 +116,9 @@ public Optional<IdentityRecord> getIdentity(@NonNull RecipientId recipientId) {
}

public @NonNull IdentityRecordList getIdentities(@NonNull List<Recipient> recipients) {
IdentityRecordList identityRecordList = new IdentityRecordList();
SQLiteDatabase database = databaseHelper.getReadableDatabase();
String[] selectionArgs = new String[1];
List<IdentityRecord> records = new LinkedList<>();
SQLiteDatabase database = databaseHelper.getReadableDatabase();
String[] selectionArgs = new String[1];

database.beginTransaction();
try {
Expand All @@ -126,7 +127,7 @@ public Optional<IdentityRecord> getIdentity(@NonNull RecipientId recipientId) {

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);
Expand All @@ -136,7 +137,7 @@ public Optional<IdentityRecord> getIdentity(@NonNull RecipientId recipientId) {
database.endTransaction();
}

return identityRecordList;
return new IdentityRecordList(records);
}

public void saveIdentity(@NonNull RecipientId recipientId, IdentityKey identityKey, VerifiedStatus verifiedStatus,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,42 @@
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<IdentityRecord> identityRecords = new LinkedList<>();
private final List<IdentityRecord> 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<IdentityRecord> records) {
identityRecords = new ArrayList<>(records);
isVerified = isVerified(identityRecords);
isUnverified = isUnverified(identityRecords);
}

public List<IdentityRecord> getIdentityRecords() {
return Collections.unmodifiableList(identityRecords);
}

public boolean isVerified() {
return isVerified;
}

public boolean isUnverified() {
return isUnverified;
}

private static boolean isVerified(@NonNull Collection<IdentityRecord> identityRecords) {
for (IdentityRecord identityRecord : identityRecords) {
if (identityRecord.getVerifiedStatus() != VerifiedStatus.VERIFIED) {
return false;
Expand All @@ -41,7 +46,7 @@ public boolean isVerified() {
return identityRecords.size() > 0;
}

public boolean isUnverified() {
private static boolean isUnverified(@NonNull Collection<IdentityRecord> identityRecords) {
for (IdentityRecord identityRecord : identityRecords) {
if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) {
return true;
Expand Down Expand Up @@ -85,7 +90,7 @@ public boolean isUntrusted() {
return untrusted;
}

public List<IdentityRecord> getUnverifiedRecords() {
public @NonNull List<IdentityRecord> getUnverifiedRecords() {
List<IdentityRecord> results = new ArrayList<>(identityRecords.size());

for (IdentityRecord identityRecord : identityRecords) {
Expand All @@ -97,7 +102,7 @@ public List<IdentityRecord> getUnverifiedRecords() {
return results;
}

public List<Recipient> getUnverifiedRecipients() {
public @NonNull List<Recipient> getUnverifiedRecipients() {
List<Recipient> unverified = new ArrayList<>(identityRecords.size());

for (IdentityRecord identityRecord : identityRecords) {
Expand Down

0 comments on commit 16fdb9b

Please sign in to comment.