diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java index 31f9e30637..ba840b7751 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java @@ -131,7 +131,7 @@ class ConversationRepository { } /** - * Watchest the given recipient id for changes, and gets the security info for the recipient + * Watches the given recipient id for changes, and gets the security info for the recipient * whenever a change occurs. * * @param recipientId The recipient id we are interested in @@ -140,6 +140,7 @@ class ConversationRepository { */ @NonNull Observable getSecurityInfo(@NonNull RecipientId recipientId) { return Recipient.observable(recipientId) + .distinctUntilChanged((lhs, rhs) -> lhs.isPushGroup() == rhs.isPushGroup() && lhs.getRegistered().equals(rhs.getRegistered())) .switchMapSingle(this::getSecurityInfo) .subscribeOn(Schedulers.io()); } @@ -154,7 +155,7 @@ class ConversationRepository { registeredState = RecipientDatabase.RegisteredState.REGISTERED; } else { Log.i(TAG, "Checking through resolved recipient"); - registeredState = recipient.resolve().getRegistered(); + registeredState = recipient.getRegistered(); } Log.i(TAG, "Resolved registered state: " + registeredState); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java index e211f09397..a7d24b05e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java @@ -135,8 +135,7 @@ public class ConversationViewModel extends ViewModel { .map(Recipient::resolved) .subscribe(recipientCache); - conversationStateStore.update(Observable.combineLatest(recipientId, conversationStateTick, (id, tick) -> id) - .distinctUntilChanged() + conversationStateStore.update(Observable.combineLatest(recipientId.distinctUntilChanged(), conversationStateTick, (id, tick) -> id) .switchMap(conversationRepository::getSecurityInfo) .toFlowable(BackpressureStrategy.LATEST), (securityInfo, state) -> state.withSecurityInfo(securityInfo)); @@ -313,7 +312,8 @@ public class ConversationViewModel extends ViewModel { @NonNull Flowable getConversationSecurityInfo(@NonNull RecipientId recipientId) { return getConversationState().map(ConversationState::getSecurityInfo) - .filter(info -> info.isInitialized() && Objects.equals(info.getRecipientId(), recipientId)); + .filter(info -> info.isInitialized() && Objects.equals(info.getRecipientId(), recipientId)) + .distinctUntilChanged(); } void updateSecurityInfo() {