Skip to content

Commit

Permalink
Present session verification directly from Settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
pixlwave committed Jan 30, 2023
1 parent 35a27cf commit 4d67e67
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 42 deletions.
18 changes: 15 additions & 3 deletions ElementX/Sources/Screens/Settings/SettingsScreenCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ struct SettingsScreenCoordinatorParameters {

enum SettingsScreenCoordinatorAction {
case dismiss
case sessionVerification
case logout
}

Expand All @@ -52,7 +51,7 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
case .reportBug:
self.presentBugReportScreen()
case .sessionVerification:
self.callback?(.sessionVerification)
self.verifySession()
case .logout:
self.callback?(.logout)
}
Expand Down Expand Up @@ -96,7 +95,20 @@ final class SettingsScreenCoordinator: CoordinatorProtocol {
}

private func verifySession() {
// TODO: to be implemented
guard let sessionVerificationController = parameters.userSession.sessionVerificationController else {
fatalError("The sessionVerificationController should aways be valid at this point")
}

let verificationParameters = SessionVerificationCoordinatorParameters(sessionVerificationControllerProxy: sessionVerificationController)
let coordinator = SessionVerificationCoordinator(parameters: verificationParameters)

coordinator.callback = { [weak self] in
self?.parameters.navigationStackCoordinator.setSheetCoordinator(nil)
}

parameters.navigationStackCoordinator.setSheetCoordinator(coordinator) { [weak self] in
self?.parameters.navigationStackCoordinator.setSheetCoordinator(nil)
}
}

private func showSuccess(label: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {

private let sidebarNavigationStackCoordinator: NavigationStackCoordinator
private let detailNavigationStackCoordinator: NavigationStackCoordinator

private weak var settingsNavigationStackCoordinator: NavigationStackCoordinator?

var callback: ((UserSessionFlowCoordinatorAction) -> Void)?

Expand Down Expand Up @@ -94,11 +92,6 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
case (.sessionVerificationScreen, .dismissedSessionVerificationScreen, .roomList):
break

case (.settingsScreen, .showSessionVerificationScreenFromSettings, .sessionVerificationScreenFromSettings):
self.presentSessionVerification()
case (.sessionVerificationScreenFromSettings, .dismissedSessionVerificationScreenFromSettings, .settingsScreen):
break

case (.roomList, .showSettingsScreen, .settingsScreen):
self.presentSettingsScreen()
case (.settingsScreen, .dismissedSettingsScreen, .roomList):
Expand Down Expand Up @@ -207,20 +200,14 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
switch action {
case .dismiss:
self.navigationSplitCoordinator.setSheetCoordinator(nil)
self.settingsNavigationStackCoordinator = nil
case .logout:
self.navigationSplitCoordinator.setSheetCoordinator(nil)
self.settingsNavigationStackCoordinator = nil
self.callback?(.signOut)
case .sessionVerification:
self.stateMachine.processEvent(.showSessionVerificationScreenFromSettings)
}
}

settingsNavigationStackCoordinator.setRootCoordinator(settingsScreenCoordinator)

self.settingsNavigationStackCoordinator = settingsNavigationStackCoordinator

navigationSplitCoordinator.setSheetCoordinator(userNotificationController) { [weak self] in
self?.stateMachine.processEvent(.dismissedSettingsScreen)
}
Expand All @@ -238,21 +225,11 @@ class UserSessionFlowCoordinator: CoordinatorProtocol {
let coordinator = SessionVerificationCoordinator(parameters: parameters)

coordinator.callback = { [weak self] in
if let settingsNavigationStackCoordinator = self?.settingsNavigationStackCoordinator {
settingsNavigationStackCoordinator.setSheetCoordinator(nil)
} else {
self?.navigationSplitCoordinator.setSheetCoordinator(nil)
}
self?.navigationSplitCoordinator.setSheetCoordinator(nil)
}

if let settingsNavigationStackCoordinator = settingsNavigationStackCoordinator {
settingsNavigationStackCoordinator.setSheetCoordinator(coordinator) { [weak self] in
self?.stateMachine.processEvent(.dismissedSessionVerificationScreenFromSettings)
}
} else {
navigationSplitCoordinator.setSheetCoordinator(coordinator) { [weak self] in
self?.stateMachine.processEvent(.dismissedSessionVerificationScreen)
}
navigationSplitCoordinator.setSheetCoordinator(coordinator) { [weak self] in
self?.stateMachine.processEvent(.dismissedSessionVerificationScreen)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ class UserSessionFlowCoordinatorStateMachine {

/// Showing the session verification flows
case sessionVerificationScreen(selectedRoomId: String?)

/// Showing the session verification flows
case sessionVerificationScreenFromSettings(selectedRoomId: String?)

/// Showing the session verification flows
case feedbackScreen(selectedRoomId: String?)
Expand Down Expand Up @@ -64,11 +61,6 @@ class UserSessionFlowCoordinatorStateMachine {
case showSessionVerificationScreen
/// Session verification has finished
case dismissedSessionVerificationScreen

/// Request the start of the session verification flow from the settings screen
case showSessionVerificationScreenFromSettings
/// Session verification requested from the settings screen has finished
case dismissedSessionVerificationScreenFromSettings
}

private let stateMachine: StateMachine<State, Event>
Expand Down Expand Up @@ -107,11 +99,6 @@ class UserSessionFlowCoordinatorStateMachine {
case (.dismissedSessionVerificationScreen, .sessionVerificationScreen(let selectedRoomId)):
return .roomList(selectedRoomId: selectedRoomId)

case (.showSessionVerificationScreenFromSettings, .settingsScreen(let selectedRoomId)):
return .sessionVerificationScreenFromSettings(selectedRoomId: selectedRoomId)
case (.dismissedSessionVerificationScreenFromSettings, .sessionVerificationScreenFromSettings(let selectedRoomId)):
return .settingsScreen(selectedRoomId: selectedRoomId)

default:
return nil
}
Expand Down

0 comments on commit 4d67e67

Please sign in to comment.