That fuck shit the fascists are using
at master 118 lines 4.9 kB view raw
1package org.tm.archive.verify; 2 3import android.content.Context; 4import android.content.Intent; 5import android.os.Bundle; 6 7import androidx.annotation.NonNull; 8import androidx.annotation.Nullable; 9 10import com.google.android.material.dialog.MaterialAlertDialogBuilder; 11 12import org.signal.libsignal.protocol.IdentityKey; 13import org.tm.archive.PassphraseRequiredActivity; 14import org.tm.archive.R; 15import org.tm.archive.crypto.IdentityKeyParcelable; 16import org.tm.archive.database.IdentityTable; 17import org.tm.archive.database.model.IdentityRecord; 18import org.tm.archive.recipients.Recipient; 19import org.tm.archive.recipients.RecipientId; 20import org.tm.archive.util.CommunicationActions; 21import org.tm.archive.util.DynamicNoActionBarTheme; 22import org.tm.archive.util.DynamicTheme; 23import org.tm.archive.util.FeatureFlags; 24 25/** 26 * Activity for verifying identity keys. 27 * 28 * @author Moxie Marlinspike 29 */ 30public class VerifyIdentityActivity extends PassphraseRequiredActivity { 31 32 private static final String RECIPIENT_EXTRA = "recipient_id"; 33 private static final String IDENTITY_EXTRA = "recipient_identity"; 34 private static final String VERIFIED_EXTRA = "verified_state"; 35 36 private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); 37 38 public static void startOrShowExchangeMessagesDialog(@NonNull Context context, 39 @Nullable IdentityRecord identityRecord) { 40 if (identityRecord != null) { 41 startOrShowExchangeMessagesDialog(context, identityRecord.getRecipientId(), identityRecord.getIdentityKey(), identityRecord.getVerifiedStatus() == IdentityTable.VerifiedStatus.VERIFIED); 42 } else { 43 showExchangeMessagesDialog(context); 44 } 45 } 46 47 public static void startOrShowExchangeMessagesDialog(@NonNull Context context, 48 @NonNull IdentityRecord identityRecord, 49 boolean verified) { 50 startOrShowExchangeMessagesDialog(context, identityRecord.getRecipientId(), identityRecord.getIdentityKey(), verified); 51 } 52 53 public static void startOrShowExchangeMessagesDialog(@NonNull Context context, 54 @NonNull RecipientId recipientId, 55 @NonNull IdentityKey identityKey, 56 boolean verified) { 57 Recipient recipient = Recipient.live(recipientId).resolve(); 58 59 if (!recipient.hasServiceId()) { 60 showExchangeMessagesDialog(context); 61 return; 62 } 63 64 context.startActivity(newIntent(context, recipientId, identityKey, verified)); 65 } 66 67 private static void showExchangeMessagesDialog(@NonNull Context context) { 68 new MaterialAlertDialogBuilder(context) 69 .setMessage(R.string.VerifyIdentityActivity_dialog_exchange_messages_to_create_safety_number_message) 70 .setPositiveButton(R.string.VerifyIdentityActivity_dialog_exchange_messages_to_create_safety_number_ok, null) 71 .setNeutralButton(R.string.VerifyIdentityActivity_dialog_exchange_messages_to_create_safety_number_learn_more, (dialog, which) -> { 72 CommunicationActions.openBrowserLink(context, "https://support.signal.org/hc/en-us/articles/360007060632"); 73 }) 74 .show(); 75 } 76 77 public static Intent newIntent(@NonNull Context context, 78 @NonNull IdentityRecord identityRecord) 79 { 80 return newIntent(context, identityRecord.getRecipientId(), identityRecord.getIdentityKey(), identityRecord.getVerifiedStatus() == IdentityTable.VerifiedStatus.VERIFIED); 81 } 82 83 public static Intent newIntent(@NonNull Context context, 84 @NonNull RecipientId recipientId, 85 @NonNull IdentityKey identityKey, 86 boolean verified) 87 { 88 Intent intent = new Intent(context, VerifyIdentityActivity.class); 89 90 intent.putExtra(RECIPIENT_EXTRA, recipientId); 91 intent.putExtra(IDENTITY_EXTRA, new IdentityKeyParcelable(identityKey)); 92 intent.putExtra(VERIFIED_EXTRA, verified); 93 94 return intent; 95 } 96 97 @Override 98 protected void onCreate(Bundle savedInstanceState, boolean ready) { 99 super.onCreate(savedInstanceState, ready); 100 dynamicTheme.onCreate(this); 101 102 VerifyIdentityFragment fragment = VerifyIdentityFragment.create( 103 getIntent().getParcelableExtra(RECIPIENT_EXTRA), 104 getIntent().getParcelableExtra(IDENTITY_EXTRA), 105 getIntent().getBooleanExtra(VERIFIED_EXTRA, false) 106 ); 107 108 getSupportFragmentManager().beginTransaction() 109 .replace(android.R.id.content, fragment) 110 .commitAllowingStateLoss(); 111 } 112 113 @Override 114 protected void onResume() { 115 super.onResume(); 116 dynamicTheme.onResume(this); 117 } 118}