That fuck shit the fascists are using
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}