Show a verification badge on the Room Member/User Profile screens. (#3427)

* Add a badge for verified users/room members.

* Reorder subviews.

* Add a (disabled) button to verify other users.

* PR comments.

* Update the SDK.

* Adopt the SDK changes introduced in matrix-rust-sdk/pull/4100

---------

Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
This commit is contained in:
Doug
2024-10-21 16:07:19 +01:00
committed by GitHub
parent a0c81cf393
commit a4ea552a83
50 changed files with 522 additions and 275 deletions
@@ -17,6 +17,7 @@ struct AvatarHeaderView<Footer: View>: View {
private enum Badge: Hashable {
case encrypted(Bool)
case `public`
case verified
}
private let avatarInfo: AvatarInfo
@@ -70,6 +71,7 @@ struct AvatarHeaderView<Footer: View>: View {
}
init(member: RoomMemberDetails,
isVerified: Bool = false,
avatarSize: AvatarSize,
mediaProvider: MediaProviderProtocol? = nil,
onAvatarTap: ((URL) -> Void)? = nil,
@@ -77,6 +79,7 @@ struct AvatarHeaderView<Footer: View>: View {
let profile = UserProfileProxy(member: member)
self.init(user: profile,
isVerified: isVerified,
avatarSize: avatarSize,
mediaProvider: mediaProvider,
onAvatarTap: onAvatarTap,
@@ -84,6 +87,7 @@ struct AvatarHeaderView<Footer: View>: View {
}
init(user: UserProfileProxy,
isVerified: Bool,
avatarSize: AvatarSize,
mediaProvider: MediaProviderProtocol? = nil,
onAvatarTap: ((URL) -> Void)? = nil,
@@ -96,27 +100,29 @@ struct AvatarHeaderView<Footer: View>: View {
self.mediaProvider = mediaProvider
self.onAvatarTap = onAvatarTap
self.footer = footer
badges = []
badges = isVerified ? [.verified] : []
}
private var badgesStack: some View {
HStack(spacing: 8) {
ForEach(badges, id: \.self) { badge in
switch badge {
case .encrypted(let isEncrypted):
if isEncrypted {
BadgeLabel(title: L10n.screenRoomDetailsBadgeEncrypted,
icon: \.lockSolid,
isHighlighted: true)
} else {
BadgeLabel(title: L10n.screenRoomDetailsBadgeNotEncrypted,
icon: \.lockOff,
isHighlighted: false)
}
case .encrypted(true):
BadgeLabel(title: L10n.screenRoomDetailsBadgeEncrypted,
icon: \.lockSolid,
isHighlighted: true)
case .encrypted(false):
BadgeLabel(title: L10n.screenRoomDetailsBadgeNotEncrypted,
icon: \.lockOff,
isHighlighted: false)
case .public:
BadgeLabel(title: L10n.screenRoomDetailsBadgePublic,
icon: \.public,
isHighlighted: false)
case .verified:
BadgeLabel(title: L10n.commonVerified,
icon: \.verified,
isHighlighted: true)
}
}
}
@@ -220,6 +226,11 @@ struct AvatarHeaderView_Previews: PreviewProvider, TestablePreview {
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }
AvatarHeaderView(member: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockBob),
isVerified: true,
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }
AvatarHeaderView(member: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockBanned[3]),
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }