diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt index 6746d28bfb..1f60c9d683 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt @@ -100,19 +100,23 @@ class ConversationSettingsRepository( } } - fun getGroupsInCommon(recipientId: RecipientId, consumer: (List) -> Unit) { - SignalExecutors.BOUNDED.execute { - consumer( - SignalDatabase - .groups - .getPushGroupsContainingMember(recipientId) - .asSequence() - .filter { it.members.contains(Recipient.self().id) } - .map(GroupRecord::recipientId) - .map(Recipient::resolved) - .sortedBy { gr -> gr.getDisplayName(context) } - .toList() - ) + fun getGroupsInCommon(recipientId: RecipientId): Observable> { + return Recipient.observable(recipientId).flatMapSingle { recipient -> + if (recipient.hasGroupsInCommon) { + Single.fromCallable { + SignalDatabase + .groups + .getPushGroupsContainingMember(recipientId) + .asSequence() + .filter { it.members.contains(Recipient.self().id) } + .map(GroupRecord::recipientId) + .map(Recipient::resolved) + .sortedBy { gr -> gr.getDisplayName(context) } + .toList() + }.observeOn(Schedulers.io()) + } else { + Single.just(listOf()) + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt index 0b8a1baf03..c147152559 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt @@ -194,7 +194,7 @@ sealed class ConversationSettingsViewModel( } if (recipientId != Recipient.self().id) { - repository.getGroupsInCommon(recipientId) { groupsInCommon -> + disposable += repository.getGroupsInCommon(recipientId).subscribe { groupsInCommon -> store.update { state -> val recipientSettings = state.requireRecipientSettingsState() val canShowMore = !recipientSettings.groupsInCommonExpanded && groupsInCommon.size > 6