That fuck shit the fascists are using
at master 107 lines 3.9 kB view raw
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}