User verification state indicators (#3793)

* Introduce a `UserIdentityProxy` and have it combine upstream methods into an easy to digest  `UserIdentityVerificationState`. Use it in a dedicated `VerificationBadge` UI component

* Show a DMs counterpart verification state in the room header

* Show a warning on the room details `People` entry when there are identity verification state violations on any of the members.

* Show verification badges in the room member list

* Show a withdraw verification section on the room member details for users that have pinning violations.

* Remove the verification section from the profile screen as there's no reliable way to keep it up to date
- the underlying Rust SDK Olm Machine can be rebuilt without notice which would break any existing user identity change streams.

* Update preview test snapshots
This commit is contained in:
Stefan Ceriu
2025-02-18 08:37:34 +02:00
committed by GitHub
parent b71c93dfaa
commit f77faee981
101 changed files with 722 additions and 305 deletions
@@ -29,10 +29,15 @@ enum RoomMembersListScreenMode {
case banned
}
struct RoomMemberListScreenEntry: Equatable {
let member: RoomMemberDetails
let verificationState: UserIdentityVerificationState
}
struct RoomMembersListScreenViewState: BindableState {
private var joinedMembers: [RoomMemberDetails]
private var invitedMembers: [RoomMemberDetails]
private var bannedMembers: [RoomMemberDetails]
private var joinedMembers: [RoomMemberListScreenEntry]
private var invitedMembers: [RoomMemberListScreenEntry]
private var bannedMembers: [RoomMemberListScreenEntry]
let joinedMembersCount: Int
var bannedMembersCount: Int { bannedMembers.count }
@@ -44,9 +49,9 @@ struct RoomMembersListScreenViewState: BindableState {
var bindings: RoomMembersListScreenViewStateBindings
init(joinedMembersCount: Int,
joinedMembers: [RoomMemberDetails] = [],
invitedMembers: [RoomMemberDetails] = [],
bannedMembers: [RoomMemberDetails] = [],
joinedMembers: [RoomMemberListScreenEntry] = [],
invitedMembers: [RoomMemberListScreenEntry] = [],
bannedMembers: [RoomMemberListScreenEntry] = [],
bindings: RoomMembersListScreenViewStateBindings) {
self.joinedMembersCount = joinedMembersCount
self.joinedMembers = joinedMembers
@@ -55,19 +60,19 @@ struct RoomMembersListScreenViewState: BindableState {
self.bindings = bindings
}
var visibleJoinedMembers: [RoomMemberDetails] {
var visibleJoinedMembers: [RoomMemberListScreenEntry] {
joinedMembers
.filter { $0.matches(searchQuery: bindings.searchQuery) }
.filter { $0.member.matches(searchQuery: bindings.searchQuery) }
}
var visibleInvitedMembers: [RoomMemberDetails] {
var visibleInvitedMembers: [RoomMemberListScreenEntry] {
invitedMembers
.filter { $0.matches(searchQuery: bindings.searchQuery) }
.filter { $0.member.matches(searchQuery: bindings.searchQuery) }
}
var visibleBannedMembers: [RoomMemberDetails] {
var visibleBannedMembers: [RoomMemberListScreenEntry] {
bannedMembers
.filter { $0.matches(searchQuery: bindings.searchQuery) }
.filter { $0.member.matches(searchQuery: bindings.searchQuery) }
}
}