Support dynamically updating common groups in recipient settings.

This commit is contained in:
Sagar
2025-03-26 01:00:55 +05:30
committed by Cody Henthorne
parent 114d9f21ed
commit 18328079c8
2 changed files with 18 additions and 14 deletions

View File

@@ -100,19 +100,23 @@ class ConversationSettingsRepository(
}
}
fun getGroupsInCommon(recipientId: RecipientId, consumer: (List<Recipient>) -> 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<List<Recipient>> {
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())
}
}
}

View File

@@ -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