Fix bug where wallpaper didn't update after changing.
This commit is contained in:
parent
0359f27cd9
commit
604f6709db
3 changed files with 20 additions and 3 deletions
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue