mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
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:
committed by
Cody Henthorne
parent
ab55fec6bd
commit
658de3b6e7
@@ -99,7 +99,7 @@ public class ViewOnceMessageActivity extends PassphraseRequiredActivity implemen
|
||||
private void initViewModel(long messageId, @NonNull Uri uri) {
|
||||
ViewOnceMessageRepository repository = new ViewOnceMessageRepository(this);
|
||||
|
||||
viewModel = ViewModelProviders.of(this, new ViewOnceMessageViewModel.Factory(getApplication(), messageId, repository))
|
||||
viewModel = ViewModelProviders.of(this, new ViewOnceMessageViewModel.Factory(messageId, repository))
|
||||
.get(ViewOnceMessageViewModel.class);
|
||||
|
||||
viewModel.getMessage().observe(this, (message) -> {
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
@@ -31,8 +32,8 @@ class ViewOnceMessageRepository {
|
||||
|
||||
void getMessage(long messageId, @NonNull Callback<Optional<MmsMessageRecord>> callback) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
try (MmsDatabase.Reader reader = MmsDatabase.readerFor(mmsDatabase.getMessageCursor(messageId))) {
|
||||
MmsMessageRecord record = (MmsMessageRecord) reader.getNext();
|
||||
try {
|
||||
MmsMessageRecord record = (MmsMessageRecord) mmsDatabase.getMessageRecord(messageId);
|
||||
|
||||
MessageDatabase.MarkedMessageInfo info = mmsDatabase.setIncomingMessageViewed(record.getId());
|
||||
if (info != null) {
|
||||
@@ -44,6 +45,8 @@ class ViewOnceMessageRepository {
|
||||
}
|
||||
|
||||
callback.onComplete(Optional.fromNullable(record));
|
||||
} catch (NoSuchMessageException e) {
|
||||
callback.onComplete(Optional.absent());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.thoughtcrime.securesms.revealable;
|
||||
|
||||
import android.app.Application;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.Uri;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
@@ -12,37 +10,25 @@ import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseContentProviders;
|
||||
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.whispersystems.libsignal.util.guava.Optional;
|
||||
|
||||
class ViewOnceMessageViewModel extends ViewModel {
|
||||
|
||||
private static final String TAG = Log.tag(ViewOnceMessageViewModel.class);
|
||||
|
||||
private final Application application;
|
||||
private final ViewOnceMessageRepository repository;
|
||||
private final MutableLiveData<Optional<MmsMessageRecord>> message;
|
||||
private final ContentObserver observer;
|
||||
private final DatabaseObserver.Observer observer;
|
||||
|
||||
private ViewOnceMessageViewModel(@NonNull Application application,
|
||||
long messageId,
|
||||
@NonNull ViewOnceMessageRepository repository)
|
||||
{
|
||||
this.application = application;
|
||||
this.repository = repository;
|
||||
this.message = new MutableLiveData<>();
|
||||
this.observer = new ContentObserver(null) {
|
||||
@Override
|
||||
public void onChange(boolean selfChange) {
|
||||
repository.getMessage(messageId, optionalMessage -> onMessageRetrieved(optionalMessage));
|
||||
}
|
||||
};
|
||||
private ViewOnceMessageViewModel(long messageId, @NonNull ViewOnceMessageRepository repository) {
|
||||
this.message = new MutableLiveData<>();
|
||||
this.observer = () -> repository.getMessage(messageId, this::onMessageRetrieved);
|
||||
|
||||
repository.getMessage(messageId, message -> {
|
||||
if (message.isPresent()) {
|
||||
Uri uri = DatabaseContentProviders.Conversation.getUriForThread(message.get().getThreadId());
|
||||
application.getContentResolver().registerContentObserver(uri, true, observer);
|
||||
ApplicationDependencies.getDatabaseObserver().registerConversationObserver(message.get().getThreadId(), observer);
|
||||
}
|
||||
|
||||
onMessageRetrieved(message);
|
||||
@@ -55,7 +41,7 @@ class ViewOnceMessageViewModel extends ViewModel {
|
||||
|
||||
@Override
|
||||
protected void onCleared() {
|
||||
application.getContentResolver().unregisterContentObserver(observer);
|
||||
ApplicationDependencies.getDatabaseObserver().unregisterObserver(observer);
|
||||
}
|
||||
|
||||
private void onMessageRetrieved(@NonNull Optional<MmsMessageRecord> optionalMessage) {
|
||||
@@ -73,15 +59,10 @@ class ViewOnceMessageViewModel extends ViewModel {
|
||||
|
||||
static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||
|
||||
private final Application application;
|
||||
private final long messageId;
|
||||
private final ViewOnceMessageRepository repository;
|
||||
|
||||
Factory(@NonNull Application application,
|
||||
long messageId,
|
||||
@NonNull ViewOnceMessageRepository repository)
|
||||
{
|
||||
this.application = application;
|
||||
Factory(long messageId, @NonNull ViewOnceMessageRepository repository) {
|
||||
this.messageId = messageId;
|
||||
this.repository = repository;
|
||||
}
|
||||
@@ -89,7 +70,7 @@ class ViewOnceMessageViewModel extends ViewModel {
|
||||
@Override
|
||||
public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
|
||||
//noinspection ConstantConditions
|
||||
return modelClass.cast(new ViewOnceMessageViewModel(application, messageId, repository));
|
||||
return modelClass.cast(new ViewOnceMessageViewModel(messageId, repository));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user