From 5ced1a775c626eaa87515cdb5e3db40f5d9c5ea3 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 12 Aug 2020 11:18:14 -0400 Subject: [PATCH] Fix bug where SN change dialog appeared unnecessarily. --- .../conversation/ConversationActivity.java | 2 +- .../ui/error/SafetyNumberChangeDialog.java | 1 + .../securesms/database/IdentityDatabase.java | 2 +- .../database/identity/IdentityRecordList.java | 20 ++++++++++++++++++- 4 files changed, 22 insertions(+), 3 deletions(-) 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 7a8ed8e357..6c33ffa2bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2393,7 +2393,7 @@ public class ConversationActivity extends PassphraseRequiredActivity if ((recipient.isMmsGroup() || recipient.getEmail().isPresent()) && !isMmsEnabled) { handleManualMmsRequired(); - } else if (!forceSms && (identityRecords.isUnverified() || identityRecords.isUntrusted())) { + } else if (!forceSms && (identityRecords.isUnverified(true) || identityRecords.isUntrusted(true))) { handleRecentSafetyNumberChange(); } else if (isMediaMessage) { sendMediaMessage(forceSms, expiresIn, false, subscriptionId, initiating); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java index 11027d729b..c3c95a28a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java @@ -44,6 +44,7 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa public static @NonNull SafetyNumberChangeDialog create(List identityRecords) { List ids = Stream.of(identityRecords) + .filterNot(IdentityDatabase.IdentityRecord::isFirstUse) .map(record -> record.getRecipientId().serialize()) .distinct() .toList(); 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 a3628da8bd..835637775a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java @@ -180,7 +180,7 @@ public class IdentityDatabase extends Database { boolean statusMatches = keyMatches && hasMatchingStatus(id, identityKey, verifiedStatus); if (!keyMatches || !statusMatches) { - saveIdentityInternal(id, identityKey, verifiedStatus, false, System.currentTimeMillis(), true); + saveIdentityInternal(id, identityKey, verifiedStatus, !hadEntry, System.currentTimeMillis(), true); Optional record = getIdentity(id); if (record.isPresent()) EventBus.getDefault().post(record.get()); } 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 47471ef41e..d588fa413f 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 @@ -56,8 +56,26 @@ public final class IdentityRecordList { return false; } - public boolean isUntrusted() { + public boolean isUnverified(boolean excludeFirstUse) { for (IdentityRecord identityRecord : identityRecords) { + if (excludeFirstUse && identityRecord.isFirstUse()) { + continue; + } + + if (identityRecord.getVerifiedStatus() == VerifiedStatus.UNVERIFIED) { + return true; + } + } + + return false; + } + + public boolean isUntrusted(boolean excludeFirstUse) { + for (IdentityRecord identityRecord : identityRecords) { + if (excludeFirstUse && identityRecord.isFirstUse()) { + continue; + } + if (isUntrusted(identityRecord)) { return true; }