That fuck shit the fascists are using
at master 64 lines 2.2 kB view raw
1package org.tm.archive.longmessage; 2 3import android.app.Application; 4 5import androidx.annotation.NonNull; 6import androidx.lifecycle.LiveData; 7import androidx.lifecycle.MutableLiveData; 8import androidx.lifecycle.ViewModel; 9import androidx.lifecycle.ViewModelProvider; 10 11import org.tm.archive.database.DatabaseObserver; 12import org.tm.archive.dependencies.ApplicationDependencies; 13 14import java.util.Optional; 15 16 17class LongMessageViewModel extends ViewModel { 18 19 private final MutableLiveData<Optional<LongMessage>> message; 20 private final DatabaseObserver.Observer threadObserver; 21 22 private LongMessageViewModel(@NonNull Application application, @NonNull LongMessageRepository repository, long messageId, boolean isMms) { 23 this.message = new MutableLiveData<>(); 24 this.threadObserver = () -> repository.getMessage(application, messageId, message::postValue); 25 26 repository.getMessage(application, messageId, longMessage -> { 27 if (longMessage.isPresent()) { 28 ApplicationDependencies.getDatabaseObserver().registerConversationObserver(longMessage.get().getMessageRecord().getThreadId(), threadObserver); 29 } 30 31 message.postValue(longMessage); 32 }); 33 } 34 35 LiveData<Optional<LongMessage>> getMessage() { 36 return message; 37 } 38 39 @Override 40 protected void onCleared() { 41 ApplicationDependencies.getDatabaseObserver().unregisterObserver(threadObserver); 42 } 43 44 static class Factory extends ViewModelProvider.NewInstanceFactory { 45 46 private final Application context; 47 private final LongMessageRepository repository; 48 private final long messageId; 49 private final boolean isMms; 50 51 public Factory(@NonNull Application application, @NonNull LongMessageRepository repository, long messageId, boolean isMms) { 52 this.context = application; 53 this.repository = repository; 54 this.messageId = messageId; 55 this.isMms = isMms; 56 } 57 58 @Override 59 public @NonNull<T extends ViewModel> T create(@NonNull Class<T> modelClass) { 60 //noinspection ConstantConditions 61 return modelClass.cast(new LongMessageViewModel(context, repository, messageId, isMms)); 62 } 63 } 64}