Unify session verification with Android (#5116)

* session verification now does not have a waiting screen, but the initial state instead presents a loading state. Everything is also handled with one single action

* use progress view in place of the spinner icon

* change progress view tint
This commit is contained in:
Mauro
2026-02-17 17:59:14 +01:00
committed by GitHub
parent e8a6af1956
commit 556b910979
62 changed files with 194 additions and 178 deletions
@@ -33,25 +33,15 @@ struct SessionVerificationScreenViewState: BindableState {
var headerIcon: (keyPath: KeyPath<CompoundIcons, Image>, style: BigIcon.Style) {
switch verificationState {
case .initial:
case .initial, .acceptingVerificationRequest, .requestingVerification,
.verificationRequestAccepted, .startingSasVerification, .sasVerificationStarted,
.cancelling:
switch flow {
case .deviceInitiator, .deviceResponder:
return (\.devices, .defaultSolid)
case .userInitiator, .userResponder:
return (\.userProfileSolid, .defaultSolid)
}
case .acceptingVerificationRequest:
return (\.devices, .defaultSolid)
case .requestingVerification:
return (\.devices, .defaultSolid)
case .verificationRequestAccepted:
return (\.reaction, .defaultSolid)
case .startingSasVerification:
return (\.devices, .defaultSolid)
case .sasVerificationStarted:
return (\.devices, .defaultSolid)
case .cancelling:
return (\.lockSolid, .defaultSolid)
case .showingChallenge:
return (\.reaction, .defaultSolid)
case .acceptingChallenge:
@@ -71,7 +61,9 @@ struct SessionVerificationScreenViewState: BindableState {
var title: String? {
switch verificationState {
case .initial:
case .initial, .acceptingVerificationRequest, .requestingVerification,
.verificationRequestAccepted, .startingSasVerification, .sasVerificationStarted,
.cancelling:
switch flow {
case .deviceInitiator:
return L10n.screenSessionVerificationUseAnotherDeviceTitle
@@ -80,16 +72,6 @@ struct SessionVerificationScreenViewState: BindableState {
case .deviceResponder, .userResponder:
return L10n.screenSessionVerificationRequestTitle
}
case .acceptingVerificationRequest:
return waitingTitle
case .requestingVerification:
return waitingTitle
case .verificationRequestAccepted:
return L10n.screenSessionVerificationCompareEmojisTitle
case .startingSasVerification:
return waitingTitle
case .sasVerificationStarted:
return waitingTitle
case .showingChallenge:
return L10n.screenSessionVerificationCompareEmojisTitle
case .acceptingChallenge:
@@ -103,25 +85,16 @@ struct SessionVerificationScreenViewState: BindableState {
case .userInitiator, .userResponder:
return L10n.commonVerificationComplete
}
case .cancelling:
return waitingTitle
case .cancelled:
return L10n.commonVerificationFailed
}
}
private var waitingTitle: String {
switch flow {
case .deviceInitiator, .deviceResponder:
return L10n.screenSessionVerificationWaitingOtherDeviceTitle
case .userInitiator, .userResponder:
return L10n.screenSessionVerificationWaitingOtherUserTitle
}
}
var message: String {
switch verificationState {
case .initial:
case .initial, .acceptingVerificationRequest, .requestingVerification,
.verificationRequestAccepted, .startingSasVerification, .sasVerificationStarted,
.cancelling:
switch flow {
case .deviceInitiator:
return L10n.screenSessionVerificationUseAnotherDeviceSubtitle
@@ -132,22 +105,10 @@ struct SessionVerificationScreenViewState: BindableState {
case .userResponder:
return L10n.screenSessionVerificationUserResponderSubtitle
}
case .acceptingVerificationRequest:
return waitingMessage
case .requestingVerification:
return waitingMessage
case .verificationRequestAccepted:
return L10n.screenSessionVerificationRequestAcceptedSubtitle
case .startingSasVerification:
return waitingMessage
case .sasVerificationStarted:
return waitingMessage
case .acceptingChallenge:
return L10n.screenSessionVerificationCompareEmojisSubtitle
case .decliningChallenge:
return L10n.screenSessionVerificationCompareEmojisSubtitle
case .cancelling:
return waitingMessage
case .showingChallenge:
switch flow {
case .deviceInitiator, .deviceResponder:
@@ -167,8 +128,23 @@ struct SessionVerificationScreenViewState: BindableState {
return L10n.screenSessionVerificationFailedSubtitle
}
}
var isWaiting: Bool {
switch verificationState {
case .acceptingVerificationRequest, .requestingVerification, .verificationRequestAccepted,
.startingSasVerification, .sasVerificationStarted, .cancelling:
true
default:
false
}
}
private var waitingMessage: String {
L10n.screenSessionVerificationWaitingSubtitle
var showIgnoreButton: Bool {
switch flow {
case .deviceResponder, .userResponder:
true
default:
false
}
}
}