That fuck shit the fascists are using
1package org.tm.archive.conversation;
2
3import android.content.Context;
4import android.os.Bundle;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8
9import androidx.annotation.NonNull;
10import androidx.annotation.Nullable;
11import androidx.annotation.WorkerThread;
12import androidx.fragment.app.DialogFragment;
13import androidx.fragment.app.FragmentManager;
14
15import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
16
17import org.tm.archive.R;
18import org.tm.archive.database.SignalDatabase;
19import org.tm.archive.database.model.GroupRecord;
20import org.tm.archive.groups.GroupId;
21import org.tm.archive.groups.ParcelableGroupId;
22import org.tm.archive.groups.ui.GroupMemberListView;
23import org.tm.archive.recipients.Recipient;
24import org.tm.archive.util.BottomSheetUtil;
25import org.tm.archive.util.CommunicationActions;
26import org.signal.core.util.concurrent.LifecycleDisposable;
27import org.tm.archive.util.WindowUtil;
28
29import java.util.Collections;
30import java.util.List;
31
32import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
33import io.reactivex.rxjava3.core.Single;
34import io.reactivex.rxjava3.schedulers.Schedulers;
35
36/**
37 * Renders a list of admins for a specified groupId. Tapping on one will allow you to send them a message.
38 */
39public final class ShowAdminsBottomSheetDialog extends BottomSheetDialogFragment {
40
41 private static final String KEY_GROUP_ID = "group_id";
42
43 private final LifecycleDisposable disposables = new LifecycleDisposable();
44
45 public static void show(@NonNull FragmentManager manager, @NonNull GroupId.V2 groupId) {
46 ShowAdminsBottomSheetDialog fragment = new ShowAdminsBottomSheetDialog();
47
48 Bundle args = new Bundle();
49 args.putParcelable(KEY_GROUP_ID, ParcelableGroupId.from(groupId));
50 fragment.setArguments(args);
51
52 fragment.show(manager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG);
53 }
54
55 @Override
56 public void onCreate(@Nullable Bundle savedInstanceState) {
57 setStyle(DialogFragment.STYLE_NORMAL, R.style.Signal_DayNight_BottomSheet_Rounded);
58 super.onCreate(savedInstanceState);
59 }
60
61 @Override
62 public @NonNull View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
63 return inflater.inflate(R.layout.show_admin_bottom_sheet, container, false);
64 }
65
66 @Override
67 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
68 disposables.bindTo(getViewLifecycleOwner().getLifecycle());
69
70 GroupMemberListView list = view.findViewById(R.id.show_admin_list);
71 list.initializeAdapter(getViewLifecycleOwner());
72 list.setDisplayOnlyMembers(Collections.emptyList());
73
74 list.setRecipientClickListener(recipient -> {
75 CommunicationActions.startConversation(requireContext(), recipient, null);
76 dismissAllowingStateLoss();
77 });
78
79 disposables.add(Single.fromCallable(() -> getAdmins(requireContext().getApplicationContext(), getGroupId()))
80 .subscribeOn(Schedulers.io())
81 .observeOn(AndroidSchedulers.mainThread())
82 .subscribe(list::setDisplayOnlyMembers));
83 }
84
85 @Override
86 public void onResume() {
87 super.onResume();
88 WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow());
89 }
90
91 @Override
92 public void show(@NonNull FragmentManager manager, @Nullable String tag) {
93 BottomSheetUtil.show(manager, tag, this);
94 }
95
96 private GroupId getGroupId() {
97 return ParcelableGroupId.get(requireArguments().getParcelable(KEY_GROUP_ID));
98 }
99
100 @WorkerThread
101 private static @NonNull List<Recipient> getAdmins(@NonNull Context context, @NonNull GroupId groupId) {
102 return SignalDatabase.groups()
103 .getGroup(groupId)
104 .map(GroupRecord::getAdmins)
105 .orElse(Collections.emptyList());
106 }
107}