Convert all database notifiers to use DatabaseObserver.

Lots of red in this diff to celebrate the release of Red (Taylor's Version).
This commit is contained in:
Greyson Parrelli
2021-11-12 12:14:59 -05:00
committed by Cody Henthorne
parent ab55fec6bd
commit 658de3b6e7
30 changed files with 179 additions and 729 deletions

View File

@@ -1,10 +1,6 @@
package org.thoughtcrime.securesms.longmessage;
import android.app.Application;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;
@@ -12,31 +8,22 @@ import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import org.thoughtcrime.securesms.database.DatabaseContentProviders;
import org.thoughtcrime.securesms.database.DatabaseObserver;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.whispersystems.libsignal.util.guava.Optional;
class LongMessageViewModel extends ViewModel {
private final Application application;
private final LongMessageRepository repository;
private final long messageId;
private final boolean isMms;
private final MutableLiveData<Optional<LongMessage>> message;
private final MessageObserver messageObserver;
private final DatabaseObserver.Observer threadObserver;
private LongMessageViewModel(@NonNull Application application, @NonNull LongMessageRepository repository, long messageId, boolean isMms) {
this.application = application;
this.repository = repository;
this.messageId = messageId;
this.isMms = isMms;
this.message = new MutableLiveData<>();
this.messageObserver = new MessageObserver(new Handler(Looper.getMainLooper()));
this.message = new MutableLiveData<>();
this.threadObserver = () -> repository.getMessage(application, messageId, isMms, message::postValue);
repository.getMessage(application, messageId, isMms, longMessage -> {
if (longMessage.isPresent()) {
Uri uri = DatabaseContentProviders.Conversation.getUriForThread(longMessage.get().getMessageRecord().getThreadId());
application.getContentResolver().registerContentObserver(uri, true, messageObserver);
ApplicationDependencies.getDatabaseObserver().registerConversationObserver(longMessage.get().getMessageRecord().getThreadId(), threadObserver);
}
message.postValue(longMessage);
@@ -49,18 +36,7 @@ class LongMessageViewModel extends ViewModel {
@Override
protected void onCleared() {
application.getContentResolver().unregisterContentObserver(messageObserver);
}
private class MessageObserver extends ContentObserver {
MessageObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
repository.getMessage(application, messageId, isMms, message::postValue);
}
ApplicationDependencies.getDatabaseObserver().unregisterObserver(threadObserver);
}
static class Factory extends ViewModelProvider.NewInstanceFactory {
@@ -79,6 +55,7 @@ class LongMessageViewModel extends ViewModel {
@Override
public @NonNull<T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions
return modelClass.cast(new LongMessageViewModel(context, repository, messageId, isMms));
}
}