Signal-Android/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java

123 lines
3.5 KiB
Java

package org.thoughtcrime.securesms.database.identity;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.database.IdentityDatabase.IdentityRecord;
import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus;
import org.thoughtcrime.securesms.recipients.Recipient;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
public final class IdentityRecordList {
private final List<IdentityRecord> identityRecords;
private final boolean isVerified;
private final boolean isUnverified;
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;
}
}
return identityRecords.size() > 0;
}
private static boolean isUnverified(@NonNull Collection<IdentityRecord> identityRecords) {
for (IdentityRecord identityRecord : identityRecords) {
if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) {
return true;
}
}
return false;
}
public boolean isUntrusted() {
for (IdentityRecord identityRecord : identityRecords) {
if (isUntrusted(identityRecord)) {
return true;
}
}
return false;
}
public @NonNull List<IdentityRecord> getUntrustedRecords() {
List<IdentityRecord> results = new ArrayList<>(identityRecords.size());
for (IdentityRecord identityRecord : identityRecords) {
if (isUntrusted(identityRecord)) {
results.add(identityRecord);
}
}
return results;
}
public @NonNull List<Recipient> getUntrustedRecipients() {
List<Recipient> untrusted = new ArrayList<>(identityRecords.size());
for (IdentityRecord identityRecord : identityRecords) {
if (isUntrusted(identityRecord)) {
untrusted.add(Recipient.resolved(identityRecord.getRecipientId()));
}
}
return untrusted;
}
public @NonNull List<IdentityRecord> getUnverifiedRecords() {
List<IdentityRecord> results = new ArrayList<>(identityRecords.size());
for (IdentityRecord identityRecord : identityRecords) {
if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) {
results.add(identityRecord);
}
}
return results;
}
public @NonNull List<Recipient> getUnverifiedRecipients() {
List<Recipient> unverified = new ArrayList<>(identityRecords.size());
for (IdentityRecord identityRecord : identityRecords) {
if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) {
unverified.add(Recipient.resolved(identityRecord.getRecipientId()));
}
}
return unverified;
}
private static boolean isUntrusted(@NonNull IdentityRecord identityRecord) {
return !identityRecord.isApprovedNonBlocking() &&
System.currentTimeMillis() - identityRecord.getTimestamp() < TimeUnit.SECONDS.toMillis(5);
}
}