diff --git a/app/src/main/java/org/thoughtcrime/securesms/VerifyIdentityActivity.java b/app/src/main/java/org/thoughtcrime/securesms/VerifyIdentityActivity.java index daf4efa45..86c43575b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/VerifyIdentityActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/VerifyIdentityActivity.java @@ -22,6 +22,7 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; @@ -56,6 +57,7 @@ import android.widget.Toast; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; @@ -90,11 +92,13 @@ import org.whispersystems.libsignal.fingerprint.Fingerprint; import org.whispersystems.libsignal.fingerprint.FingerprintParsingException; import org.whispersystems.libsignal.fingerprint.FingerprintVersionMismatchException; import org.whispersystems.libsignal.fingerprint.NumericFingerprintGenerator; +import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.UuidUtil; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Locale; +import java.util.UUID; import static org.whispersystems.libsignal.SessionCipher.SESSION_LOCK; @@ -307,16 +311,26 @@ public class VerifyIdentityActivity extends PassphraseRequiredActivity implement byte[] localId; byte[] remoteId; - if (FeatureFlags.verifyV2() && recipient.resolve().getUuid().isPresent()) { + Recipient resolved = recipient.resolve(); + + if (FeatureFlags.verifyV2() && resolved.getUuid().isPresent()) { Log.i(TAG, "Using UUID (version 2)."); version = 2; localId = UuidUtil.toByteArray(TextSecurePreferences.getLocalUuid(requireContext())); - remoteId = UuidUtil.toByteArray(recipient.resolve().getUuid().get()); - } else { + remoteId = UuidUtil.toByteArray(resolved.getUuid().get()); + } else if (!FeatureFlags.verifyV2() && resolved.getE164().isPresent()) { Log.i(TAG, "Using E164 (version 1)."); version = 1; localId = TextSecurePreferences.getLocalNumber(requireContext()).getBytes(); - remoteId = recipient.resolve().requireE164().getBytes(); + remoteId = resolved.requireE164().getBytes(); + } else { + Log.w(TAG, String.format(Locale.ENGLISH, "Could not show proper verification! verifyV2: %s, hasUuid: %s, hasE164: %s", FeatureFlags.verifyV2(), resolved.getUuid().isPresent(), resolved.getE164().isPresent())); + new AlertDialog.Builder(requireContext()) + .setMessage(getString(R.string.VerifyIdentityActivity_you_must_first_exchange_messages_in_order_to_view, resolved.getDisplayName(requireContext()))) + .setPositiveButton(android.R.string.ok, (dialog, which) -> requireActivity().finish()) + .setOnDismissListener(dialog -> requireActivity().finish()) + .show(); + return; } this.recipient.observe(this, this::setRecipientText); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6504891fc..bc0ca6f6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1458,6 +1458,7 @@ No safety number to compare was found in the clipboard Signal needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\". Unable to scan QR code without Camera permission + You must first exchange messages in order to view %1$s\'s safety number. %1$02d:%2$02d