That fuck shit the fascists are using
1package org.tm.archive;
2
3import android.content.Context;
4import android.content.res.Resources;
5
6import androidx.annotation.NonNull;
7import androidx.annotation.Nullable;
8import androidx.annotation.WorkerThread;
9import androidx.appcompat.app.AlertDialog;
10import androidx.lifecycle.Lifecycle;
11
12import com.google.android.material.dialog.MaterialAlertDialogBuilder;
13
14import org.signal.core.util.concurrent.SimpleTask;
15import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
16import org.tm.archive.database.SignalDatabase;
17import org.tm.archive.database.model.GroupRecord;
18import org.tm.archive.recipients.Recipient;
19import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil;
20import org.whispersystems.signalservice.api.push.ServiceId;
21
22import java.util.List;
23import java.util.Optional;
24
25import okio.ByteString;
26
27/**
28 * This should be used whenever we want to prompt the user to block/unblock a recipient.
29 */
30public final class BlockUnblockDialog {
31
32 private BlockUnblockDialog() {}
33
34 public static void showReportSpamFor(@NonNull Context context,
35 @NonNull Lifecycle lifecycle,
36 @NonNull Recipient recipient,
37 @NonNull Runnable onReportSpam,
38 @Nullable Runnable onBlockAndReportSpam)
39 {
40 SimpleTask.run(lifecycle,
41 () -> buildReportSpamFor(context, recipient, onReportSpam, onBlockAndReportSpam),
42 AlertDialog.Builder::show);
43 }
44
45 public static void showBlockFor(@NonNull Context context,
46 @NonNull Lifecycle lifecycle,
47 @NonNull Recipient recipient,
48 @NonNull Runnable onBlock)
49 {
50 SimpleTask.run(lifecycle,
51 () -> buildBlockFor(context, recipient, onBlock, null),
52 AlertDialog.Builder::show);
53 }
54
55 public static void showBlockAndReportSpamFor(@NonNull Context context,
56 @NonNull Lifecycle lifecycle,
57 @NonNull Recipient recipient,
58 @NonNull Runnable onBlock,
59 @NonNull Runnable onBlockAndReportSpam)
60 {
61 SimpleTask.run(lifecycle,
62 () -> buildBlockFor(context, recipient, onBlock, onBlockAndReportSpam),
63 AlertDialog.Builder::show);
64 }
65
66 public static void showUnblockFor(@NonNull Context context,
67 @NonNull Lifecycle lifecycle,
68 @NonNull Recipient recipient,
69 @NonNull Runnable onUnblock)
70 {
71 SimpleTask.run(lifecycle,
72 () -> buildUnblockFor(context, recipient, onUnblock),
73 AlertDialog.Builder::show);
74 }
75
76 @WorkerThread
77 private static AlertDialog.Builder buildBlockFor(@NonNull Context context,
78 @NonNull Recipient recipient,
79 @NonNull Runnable onBlock,
80 @Nullable Runnable onBlockAndReportSpam)
81 {
82 recipient = recipient.resolve();
83
84 AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
85 Resources resources = context.getResources();
86
87 if (recipient.isGroup()) {
88 if (SignalDatabase.groups().isActive(recipient.requireGroupId())) {
89 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_and_leave_s, recipient.getDisplayName(context)));
90 builder.setMessage(R.string.BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates);
91 builder.setPositiveButton(R.string.BlockUnblockDialog_block_and_leave, ((dialog, which) -> onBlock.run()));
92 builder.setNegativeButton(android.R.string.cancel, null);
93 } else {
94 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, recipient.getDisplayName(context)));
95 builder.setMessage(R.string.BlockUnblockDialog_group_members_wont_be_able_to_add_you);
96 builder.setPositiveButton(R.string.RecipientPreferenceActivity_block, ((dialog, which) -> onBlock.run()));
97 builder.setNegativeButton(android.R.string.cancel, null);
98 }
99 } else if (recipient.isReleaseNotes()) {
100 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, recipient.getDisplayName(context)));
101 builder.setMessage(R.string.BlockUnblockDialog_block_getting_signal_updates_and_news);
102 builder.setPositiveButton(R.string.BlockUnblockDialog_block, ((dialog, which) -> onBlock.run()));
103 builder.setNegativeButton(android.R.string.cancel, null);
104 } else {
105 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, recipient.getDisplayName(context)));
106 builder.setMessage(recipient.isRegistered() ? R.string.BlockUnblockDialog_blocked_people_wont_be_able_to_call_you_or_send_you_messages
107 : R.string.BlockUnblockDialog_blocked_people_wont_be_able_to_send_you_messages);
108
109 if (onBlockAndReportSpam != null) {
110 builder.setNeutralButton(android.R.string.cancel, null);
111 builder.setNegativeButton(R.string.BlockUnblockDialog_report_spam_and_block, (d, w) -> onBlockAndReportSpam.run());
112 builder.setPositiveButton(R.string.BlockUnblockDialog_block, (d, w) -> onBlock.run());
113 } else {
114 builder.setPositiveButton(R.string.BlockUnblockDialog_block, ((dialog, which) -> onBlock.run()));
115 builder.setNegativeButton(android.R.string.cancel, null);
116 }
117 }
118
119 return builder;
120 }
121
122 @WorkerThread
123 private static AlertDialog.Builder buildUnblockFor(@NonNull Context context,
124 @NonNull Recipient recipient,
125 @NonNull Runnable onUnblock)
126 {
127 recipient = recipient.resolve();
128
129 AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
130 Resources resources = context.getResources();
131
132 if (recipient.isGroup()) {
133 if (SignalDatabase.groups().isActive(recipient.requireGroupId())) {
134 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, recipient.getDisplayName(context)));
135 builder.setMessage(R.string.BlockUnblockDialog_group_members_will_be_able_to_add_you);
136 builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, ((dialog, which) -> onUnblock.run()));
137 builder.setNegativeButton(android.R.string.cancel, null);
138 } else {
139 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, recipient.getDisplayName(context)));
140 builder.setMessage(R.string.BlockUnblockDialog_group_members_will_be_able_to_add_you);
141 builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, ((dialog, which) -> onUnblock.run()));
142 builder.setNegativeButton(android.R.string.cancel, null);
143 }
144 } else if (recipient.isReleaseNotes()) {
145 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, recipient.getDisplayName(context)));
146 builder.setMessage(R.string.BlockUnblockDialog_resume_getting_signal_updates_and_news);
147
148 builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, ((dialog, which) -> onUnblock.run()));
149 builder.setNegativeButton(android.R.string.cancel, null);
150 } else {
151 builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, recipient.getDisplayName(context)));
152 builder.setMessage(recipient.isRegistered() ? R.string.BlockUnblockDialog_you_will_be_able_to_call_and_message_each_other
153 : R.string.BlockUnblockDialog_you_will_be_able_to_message_each_other);
154 builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, ((dialog, which) -> onUnblock.run()));
155 builder.setNegativeButton(android.R.string.cancel, null);
156 }
157
158 return builder;
159 }
160
161 @WorkerThread
162 private static AlertDialog.Builder buildReportSpamFor(@NonNull Context context,
163 @NonNull Recipient recipient,
164 @NonNull Runnable onReportSpam,
165 @Nullable Runnable onBlockAndReportSpam)
166 {
167 recipient = recipient.resolve();
168
169 AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context)
170 .setTitle(R.string.BlockUnblockDialog_report_spam_title)
171 .setPositiveButton(R.string.BlockUnblockDialog_report_spam, (d, w) -> onReportSpam.run());
172
173 if (onBlockAndReportSpam != null) {
174 builder.setNeutralButton(android.R.string.cancel, null)
175 .setNegativeButton(R.string.BlockUnblockDialog_report_spam_and_block, (d, w) -> onBlockAndReportSpam.run());
176 } else {
177 builder.setNegativeButton(android.R.string.cancel, null);
178 }
179
180 if (recipient.isGroup()) {
181 Recipient adder = SignalDatabase.groups().getGroupInviter(recipient.requireGroupId());
182 if (adder != null) {
183 builder.setMessage(context.getString(R.string.BlockUnblockDialog_report_spam_group_named_adder, adder.getDisplayName(context)));
184 } else {
185 builder.setMessage(R.string.BlockUnblockDialog_report_spam_group_unknown_adder);
186 }
187 } else {
188 builder.setMessage(R.string.BlockUnblockDialog_report_spam_description);
189 }
190
191 return builder;
192 }
193}