That fuck shit the fascists are using
1package org.tm.archive.blocked;
2
3import androidx.annotation.NonNull;
4import androidx.annotation.Nullable;
5import androidx.lifecycle.ViewModel;
6import androidx.lifecycle.ViewModelProvider;
7
8import org.tm.archive.recipients.Recipient;
9import org.tm.archive.recipients.RecipientId;
10
11import java.util.List;
12import java.util.Objects;
13
14import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
15import io.reactivex.rxjava3.core.Observable;
16import io.reactivex.rxjava3.subjects.BehaviorSubject;
17import io.reactivex.rxjava3.subjects.PublishSubject;
18import io.reactivex.rxjava3.subjects.Subject;
19
20public class BlockedUsersViewModel extends ViewModel {
21
22 private final BlockedUsersRepository repository;
23 private final Subject<List<Recipient>> recipients = BehaviorSubject.create();
24 private final Subject<Event> events = PublishSubject.create();
25
26 private BlockedUsersViewModel(@NonNull BlockedUsersRepository repository) {
27 this.repository = repository;
28
29 loadRecipients();
30 }
31
32 public Observable<List<Recipient>> getRecipients() {
33 return recipients.observeOn(AndroidSchedulers.mainThread());
34 }
35
36 public Observable<Event> getEvents() {
37 return events.observeOn(AndroidSchedulers.mainThread());
38 }
39
40 void block(@NonNull RecipientId recipientId) {
41 repository.block(recipientId,
42 () -> {
43 loadRecipients();
44 events.onNext(new Event(EventType.BLOCK_SUCCEEDED, Recipient.resolved(recipientId)));
45 },
46 () -> events.onNext(new Event(EventType.BLOCK_FAILED, Recipient.resolved(recipientId))));
47 }
48
49 void createAndBlock(@NonNull String number) {
50 repository.createAndBlock(number, () -> {
51 loadRecipients();
52 events.onNext(new Event(EventType.BLOCK_SUCCEEDED, number));
53 });
54 }
55
56 void unblock(@NonNull RecipientId recipientId) {
57 repository.unblock(recipientId, () -> {
58 loadRecipients();
59 events.onNext(new Event(EventType.UNBLOCK_SUCCEEDED, Recipient.resolved(recipientId)));
60 });
61 }
62
63 private void loadRecipients() {
64 repository.getBlocked(recipients::onNext);
65 }
66
67 enum EventType {
68 BLOCK_SUCCEEDED,
69 BLOCK_FAILED,
70 UNBLOCK_SUCCEEDED
71 }
72
73 public static final class Event {
74
75 private final EventType eventType;
76 private final Recipient recipient;
77 private final String number;
78
79 private Event(@NonNull EventType eventType, @NonNull Recipient recipient) {
80 this.eventType = eventType;
81 this.recipient = recipient;
82 this.number = null;
83 }
84
85 private Event(@NonNull EventType eventType, @NonNull String number) {
86 this.eventType = eventType;
87 this.recipient = null;
88 this.number = number;
89 }
90
91 public @Nullable Recipient getRecipient() {
92 return recipient;
93 }
94
95 public @Nullable String getNumber() {
96 return number;
97 }
98
99 public @NonNull EventType getEventType() {
100 return eventType;
101 }
102 }
103
104 public static class Factory implements ViewModelProvider.Factory {
105
106 private final BlockedUsersRepository repository;
107
108 public Factory(@NonNull BlockedUsersRepository repository) {
109 this.repository = repository;
110 }
111
112 @Override
113 public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
114 return Objects.requireNonNull(modelClass.cast(new BlockedUsersViewModel(repository)));
115 }
116 }
117}