Fix bug where wallpaper didn't update after changing.

This commit is contained in:
Greyson Parrelli 2022-03-16 17:36:17 -04:00 committed by Cody Henthorne
parent 0359f27cd9
commit 604f6709db
3 changed files with 20 additions and 3 deletions

View file

@ -187,9 +187,11 @@ public class ConversationViewModel extends ViewModel {
.observeOn(Schedulers.io())
.withLatestFrom(conversationMetadata, (messages, metadata) -> new MessageData(metadata, messages));
Observable<Recipient> liveRecipient = recipientId.distinctUntilChanged().switchMap(id -> Recipient.live(id).asObservable());
canShowAsBubble = threadId.observeOn(Schedulers.io()).map(conversationRepository::canShowAsBubble);
wallpaper = recipientCache.map(r -> Optional.ofNullable(r.getWallpaper())).distinctUntilChanged();
chatColors = recipientCache.map(Recipient::getChatColors).distinctUntilChanged();
wallpaper = liveRecipient.map(r -> Optional.ofNullable(r.getWallpaper())).distinctUntilChanged();
chatColors = liveRecipient.map(Recipient::getChatColors).distinctUntilChanged();
threadAnimationStateStore.update(threadId, (id, state) -> {
if (state.getThreadId() == id) {

View file

@ -270,7 +270,7 @@ public class DatabaseObserver {
}
public void notifyRecipientChanged(@NonNull RecipientId recipientId) {
runPostSuccessfulTransaction(KEY_RECIPIENT + recipientId.serialize(), () -> {
SignalDatabase.runPostSuccessfulTransaction(KEY_RECIPIENT + recipientId.serialize(), () -> {
Recipient.live(recipientId).refresh();
});
}

View file

@ -29,6 +29,8 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicReference;
import io.reactivex.rxjava3.core.Observable;
public final class LiveRecipient {
private static final String TAG = Log.tag(LiveRecipient.class);
@ -95,6 +97,19 @@ public final class LiveRecipient {
ThreadUtil.runOnMain(() -> observableLiveData.removeObservers(owner));
}
public Observable<Recipient> asObservable() {
return Observable.create(emitter -> {
Recipient current = recipient.get();
if (current != null && current.getId() != RecipientId.UNKNOWN) {
emitter.onNext(current);
}
RecipientForeverObserver foreverObserver = emitter::onNext;
observeForever(foreverObserver);
emitter.setCancellable(() -> removeForeverObserver(foreverObserver));
});
}
/**
* Watch the recipient for changes. The callback could be invoked at any time. You MUST call
* {@link #removeForeverObserver(RecipientForeverObserver)} when finished. You should use