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