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
@@ -17,7 +17,7 @@ enum RoomMemberDetailsScreenViewModelAction {
struct RoomMemberDetailsScreenViewState: BindableState {
let userID: String
var memberDetails: RoomMemberDetails?
var isVerified: Bool?
var verificationState: UserIdentityVerificationState?
var isOwnMemberDetails = false
var isProcessingIgnoreRequest = false
var dmRoomID: String?
@@ -25,11 +25,15 @@ struct RoomMemberDetailsScreenViewState: BindableState {
var bindings: RoomMemberDetailsScreenViewStateBindings
var showVerifiedBadge: Bool {
isVerified == true // We purposely show the badge on your own account for consistency with Web.
verificationState == .verified // We purposely show the badge on your own account for consistency with Web.
}
var showVerificationSection: Bool {
isVerified == false && !isOwnMemberDetails
var showVerifyIdentitySection: Bool {
verificationState == .notVerified && !isOwnMemberDetails
}
var showWithdrawVerificationSection: Bool {
verificationState == .verificationViolation && !isOwnMemberDetails
}
}
@@ -90,6 +94,7 @@ enum RoomMemberDetailsScreenViewAction {
case createDirectChat
case startCall(roomID: String)
case verifyUser
case withdrawVerification
}
enum RoomMemberDetailsScreenAlertType: Hashable {