Add in-call info sheet for call links.

This commit is contained in:
Alex Hart
2023-06-08 11:44:33 -03:00
committed by Cody Henthorne
parent 369ca189d3
commit 886c149c3f
20 changed files with 452 additions and 69 deletions

View File

@@ -1,7 +1,8 @@
package org.thoughtcrime.securesms.conversation.colors
import androidx.lifecycle.LiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.map
import androidx.lifecycle.switchMap
import com.annimon.stream.Stream
import org.signal.core.util.MapUtil
import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette.Names.all
@@ -23,13 +24,13 @@ object NameColors {
recipientId: LiveData<RecipientId>,
sessionMemberCache: MutableMap<GroupId, Set<Recipient>>
): LiveData<Map<RecipientId, NameColor>> {
val recipient = Transformations.switchMap(recipientId) { r: RecipientId? -> Recipient.live(r!!).liveData }
val group = Transformations.map(recipient) { obj: Recipient -> obj.groupId }
val groupMembers = Transformations.switchMap(group) { g: Optional<GroupId> ->
val recipient = recipientId.switchMap { r: RecipientId? -> Recipient.live(r!!).liveData }
val group = recipient.map { obj: Recipient -> obj.groupId }
val groupMembers = group.switchMap { g: Optional<GroupId> ->
g.map { groupId: GroupId -> this.getSessionGroupRecipients(groupId, sessionMemberCache) }
.orElseGet { DefaultValueLiveData(emptySet()) }
}
return Transformations.map(groupMembers) { members: Set<Recipient>? ->
return groupMembers.map { members: Set<Recipient>? ->
val sorted = Stream.of(members)
.filter { member: Recipient? -> member != Recipient.self() }
.sortBy { obj: Recipient -> obj.requireStringId() }
@@ -44,14 +45,13 @@ object NameColors {
}
private fun getSessionGroupRecipients(groupId: GroupId, sessionMemberCache: MutableMap<GroupId, Set<Recipient>>): LiveData<Set<Recipient>> {
val fullMembers = Transformations.map(
LiveGroup(groupId).fullMembers
) { members: List<FullMember>? ->
val fullMembers = LiveGroup(groupId).fullMembers.map { members: List<FullMember>? ->
Stream.of(members)
.map { it.member }
.toList()
}
return Transformations.map(fullMembers) { currentMembership: List<Recipient>? ->
return fullMembers.map { currentMembership: List<Recipient>? ->
val cachedMembers: MutableSet<Recipient> = MapUtil.getOrDefault(sessionMemberCache, groupId, HashSet()).toMutableSet()
cachedMembers.addAll(currentMembership!!)
sessionMemberCache[groupId] = cachedMembers