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 4aaeb4d19e..cd6bb99d57 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1474,6 +1474,7 @@ public class ConversationActivity extends PassphraseRequiredActivity @Override public void onSendAnywayAfterSafetyNumberChange(@NonNull List changedRecipients) { + Log.d(TAG, "onSendAnywayAfterSafetyNumberChange"); initializeIdentityRecords().addListener(new AssertedSuccessListener() { @Override public void onSuccess(Boolean result) { @@ -1484,6 +1485,7 @@ public class ConversationActivity extends PassphraseRequiredActivity @Override public void onMessageResentAfterSafetyNumberChange() { + Log.d(TAG, "onMessageResentAfterSafetyNumberChange"); initializeIdentityRecords().addListener(new AssertedSuccessListener() { @Override public void onSuccess(Boolean result) { } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java index 0b474c52f9..1767c37c48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java @@ -35,4 +35,9 @@ final class ChangedRecipient { boolean isVerified() { return record.getVerifiedStatus() == IdentityDatabase.VerifiedStatus.VERIFIED; } + + @Override + public String toString() { + return "ChangedRecipient{" + "recipient=" + recipient.getId() + ", record=" + record.getIdentityKey().hashCode() + '}'; + } } 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 df073b653e..f8a0653cbd 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 @@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.annimon.stream.Stream; +import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.VerifyIdentityActivity; import org.thoughtcrime.securesms.database.IdentityDatabase; @@ -36,6 +37,8 @@ import java.util.List; public final class SafetyNumberChangeDialog extends DialogFragment implements SafetyNumberChangeAdapter.Callbacks { + private static final String TAG = Log.tag(SafetyNumberChangeDialog.class); + public static final String SAFETY_NUMBER_DIALOG = "SAFETY_NUMBER"; private static final String RECIPIENT_IDS_EXTRA = "recipient_ids"; @@ -191,6 +194,8 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa } private void handleSendAnyway(DialogInterface dialogInterface, int which) { + Log.d(TAG, "handleSendAnyway"); + Activity activity = getActivity(); Callback callback; if (activity instanceof Callback) { @@ -207,9 +212,11 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa if (callback != null) { switch (result.getResult()) { case TRUST_AND_VERIFY: + Log.d(TAG, "Trust and verify"); callback.onSendAnywayAfterSafetyNumberChange(result.getChangedRecipients()); break; case TRUST_VERIFY_AND_RESEND: + Log.d(TAG, "Trust, verify, and resent"); callback.onMessageResentAfterSafetyNumberChange(); break; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java index 1c41fe48b4..652280a5aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java @@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.MessageSender; +import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.signalservice.api.SignalSessionLock; @@ -42,12 +43,14 @@ final class SafetyNumberChangeRepository { } @NonNull LiveData trustOrVerifyChangedRecipients(@NonNull List changedRecipients) { + Log.d(TAG, "Trust or verify changed recipients for: " + Util.join(changedRecipients, ",")); MutableLiveData liveData = new MutableLiveData<>(); SignalExecutors.BOUNDED.execute(() -> liveData.postValue(trustOrVerifyChangedRecipientsInternal(changedRecipients))); return liveData; } @NonNull LiveData trustOrVerifyChangedRecipientsAndResend(@NonNull List changedRecipients, @NonNull MessageRecord messageRecord) { + Log.d(TAG, "Trust or verify changed recipients and resend message: " + messageRecord.getId() + " for: " + Util.join(changedRecipients, ",")); MutableLiveData liveData = new MutableLiveData<>(); SignalExecutors.BOUNDED.execute(() -> liveData.postValue(trustOrVerifyChangedRecipientsAndResendInternal(changedRecipients, messageRecord))); return liveData; @@ -66,6 +69,8 @@ final class SafetyNumberChangeRepository { .map(record -> new ChangedRecipient(Recipient.resolved(record.getRecipientId()), record)) .toList(); + Log.d(TAG, "Safety number change state, message: " + (messageRecord != null ? messageRecord.getId() : "null") + " records: " + Util.join(changedRecipients, ",")); + return new SafetyNumberChangeState(changedRecipients, messageRecord); } @@ -95,10 +100,12 @@ final class SafetyNumberChangeRepository { IdentityRecord identityRecord = changedRecipient.getIdentityRecord(); if (changedRecipient.isUnverified()) { + Log.d(TAG, "Setting " + identityRecord.getRecipientId() + " as verified"); identityDatabase.setVerified(identityRecord.getRecipientId(), identityRecord.getIdentityKey(), IdentityDatabase.VerifiedStatus.DEFAULT); } else { + Log.d(TAG, "Setting " + identityRecord.getRecipientId() + " as approved"); identityDatabase.setApproval(identityRecord.getRecipientId(), true); } } @@ -110,11 +117,17 @@ final class SafetyNumberChangeRepository { @WorkerThread private TrustAndVerifyResult trustOrVerifyChangedRecipientsAndResendInternal(@NonNull List changedRecipients, @NonNull MessageRecord messageRecord) { + if (changedRecipients.isEmpty()) { + Log.d(TAG, "No changed recipients to process, will still process message record"); + } + try(SignalSessionLock.Lock unused = DatabaseSessionLock.INSTANCE.acquire()) { for (ChangedRecipient changedRecipient : changedRecipients) { SignalProtocolAddress mismatchAddress = new SignalProtocolAddress(changedRecipient.getRecipient().requireServiceId(), 1); TextSecureIdentityKeyStore identityKeyStore = new TextSecureIdentityKeyStore(context); - identityKeyStore.saveIdentity(mismatchAddress, changedRecipient.getIdentityRecord().getIdentityKey(), true); + Log.d(TAG, "Saving identity for: " + changedRecipient.getRecipient().getId() + " " + changedRecipient.getIdentityRecord().getIdentityKey().hashCode()); + boolean result = identityKeyStore.saveIdentity(mismatchAddress, changedRecipient.getIdentityRecord().getIdentityKey(), true); + Log.d(TAG, "Saving identity result: " + result); } } @@ -127,6 +140,7 @@ final class SafetyNumberChangeRepository { @WorkerThread private void processOutgoingMessageRecord(@NonNull List changedRecipients, @NonNull MessageRecord messageRecord) { + Log.d(TAG, "processOutgoingMessageRecord"); MessageDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context); MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java index 25ae6788c9..e861b57134 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java @@ -3,14 +3,13 @@ package org.thoughtcrime.securesms.crypto.storage; import android.content.Context; import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.crypto.DatabaseSessionLock; import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.SessionUtil; -import org.thoughtcrime.securesms.crypto.DatabaseSessionLock; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.IdentityDatabase; import org.thoughtcrime.securesms.database.IdentityDatabase.IdentityRecord; import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; -import org.thoughtcrime.securesms.database.SenderKeySharedDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.IdentityUtil; @@ -59,6 +58,8 @@ public class TextSecureIdentityKeyStore implements IdentityKeyStore { return false; } + Log.i(TAG, "Existing: " + identityRecord.get().getIdentityKey().hashCode() + " New: " + identityKey.hashCode()); + if (!identityRecord.get().getIdentityKey().equals(identityKey)) { Log.i(TAG, "Replacing existing identity..."); VerifiedStatus verifiedStatus; @@ -145,7 +146,7 @@ public class TextSecureIdentityKeyStore implements IdentityKeyStore { } if (!identityKey.equals(identityRecord.get().getIdentityKey())) { - Log.w(TAG, "Identity keys don't match..."); + Log.w(TAG, "Identity keys don't match... service: " + identityRecord.get().getIdentityKey().hashCode() + " database: " + identityRecord.get().getIdentityKey().hashCode()); return false; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java index 06cc1b835a..fb27936cbf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java @@ -80,11 +80,11 @@ public class Util { return join(Arrays.asList(list), delimiter); } - public static String join(Collection list, String delimiter) { + public static String join(Collection list, String delimiter) { StringBuilder result = new StringBuilder(); int i = 0; - for (String item : list) { + for (T item : list) { result.append(item); if (++i < list.size())