Device Manager: Verify session (#6832)

* Initial implementation
* Add verificationState to UserSessionInfo
* Listen for changes device changes in the service.
This commit is contained in:
Doug
2022-10-11 16:11:52 +01:00
committed by GitHub
parent 6c9a058b93
commit 6a0112aa95
33 changed files with 534 additions and 114 deletions
@@ -26,22 +26,6 @@ struct UserSessionCardView: View {
var onViewDetailsAction: ((String) -> Void)?
var onLearnMoreAction: (() -> Void)?
private var verificationStatusImageName: String {
viewData.isVerified ? Asset.Images.userSessionVerified.name : Asset.Images.userSessionUnverified.name
}
private var verificationStatusText: String {
viewData.isVerified ? VectorL10n.userSessionVerified : VectorL10n.userSessionUnverified
}
private var verificationStatusColor: Color {
viewData.isVerified ? theme.colors.accent : theme.colors.alert
}
private var verificationStatusAdditionalInfoText: String {
viewData.isVerified ? VectorL10n.userSessionVerifiedAdditionalInfo : VectorL10n.userSessionUnverifiedAdditionalInfo
}
private var backgroundShape: RoundedRectangle {
RoundedRectangle(cornerRadius: 8)
}
@@ -53,27 +37,25 @@ struct UserSessionCardView: View {
var body: some View {
VStack(alignment: .center, spacing: 12) {
DeviceAvatarView(viewData: viewData.deviceAvatarViewData)
.accessibilityHidden(true)
Text(viewData.sessionName)
.font(theme.fonts.headline)
.foregroundColor(theme.colors.primaryContent)
.multilineTextAlignment(.center)
HStack {
Image(verificationStatusImageName)
Text(verificationStatusText)
.font(theme.fonts.subheadline)
.foregroundColor(verificationStatusColor)
.multilineTextAlignment(.center)
}
Label(viewData.verificationStatusText, image: viewData.verificationStatusImageName)
.font(theme.fonts.subheadline)
.foregroundColor(theme.colors[keyPath: viewData.verificationStatusColor])
.multilineTextAlignment(.center)
if viewData.isCurrentSessionDisplayMode {
Text(verificationStatusAdditionalInfoText)
Text(viewData.verificationStatusAdditionalInfoText)
.font(theme.fonts.footnote)
.foregroundColor(theme.colors.secondaryContent)
.multilineTextAlignment(.center)
} else {
InlineTextButton(verificationStatusAdditionalInfoText + " %@", tappableText: VectorL10n.userSessionLearnMore) {
InlineTextButton(viewData.verificationStatusAdditionalInfoText + " %@", tappableText: VectorL10n.userSessionLearnMore) {
onLearnMoreAction?()
}
.font(theme.fonts.footnote)
@@ -99,7 +81,7 @@ struct UserSessionCardView: View {
}
}
if viewData.isVerified == false {
if viewData.verificationState != .verified {
Button {
onVerifyAction?(viewData.sessionId)
} label: {
@@ -137,11 +119,11 @@ struct UserSessionCardViewPreview: View {
let viewData: UserSessionCardViewData
init(isCurrent: Bool = false) {
init(isCurrent: Bool = false, verificationState: UserSessionInfo.VerificationState = .unverified) {
let sessionInfo = UserSessionInfo(id: "alice",
name: "iOS",
deviceType: .mobile,
isVerified: false,
verificationState: verificationState,
lastSeenIP: "10.0.0.10",
lastSeenTimestamp: nil,
applicationName: "Element iOS",
@@ -174,6 +156,13 @@ struct UserSessionCardView_Previews: PreviewProvider {
UserSessionCardViewPreview(isCurrent: true).theme(.dark).preferredColorScheme(.dark)
UserSessionCardViewPreview().theme(.light).preferredColorScheme(.light)
UserSessionCardViewPreview().theme(.dark).preferredColorScheme(.dark)
UserSessionCardViewPreview(isCurrent: true, verificationState: .verified)
.theme(.light).preferredColorScheme(.light)
UserSessionCardViewPreview(verificationState: .verified)
.theme(.light).preferredColorScheme(.light)
UserSessionCardViewPreview(verificationState: .unknown)
.theme(.light).preferredColorScheme(.light)
}
}
}