Skip to content

Commit

Permalink
Fix presentation when not enrolled in Touch/Face ID. (#1981)
Browse files Browse the repository at this point in the history
  • Loading branch information
pixlwave authored Oct 30, 2023
1 parent de0656d commit 8f01053
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
29 changes: 16 additions & 13 deletions ElementX/Sources/FlowCoordinators/AppLockSetupFlowCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class AppLockSetupFlowCoordinator: FlowCoordinatorProtocol {
/// The unlock screen.
case unlock
/// The create PIN screen.
case createPIN
case createPIN(replacingExitingPIN: Bool)
/// The allow biometrics screen.
case biometricsPrompt
/// The settings screen.
Expand Down Expand Up @@ -113,26 +113,28 @@ class AppLockSetupFlowCoordinator: FlowCoordinatorProtocol {

switch (event, fromState) {
case (.start, .initial):
if presentingFlow == .authentication { return .createPIN }
return appLockService.isEnabled ? .unlock : .createPIN
if presentingFlow == .authentication { return .createPIN(replacingExitingPIN: false) }
return appLockService.isEnabled ? .unlock : .createPIN(replacingExitingPIN: false)
case (.pinEntered, .unlock):
return .settings
case (.cancel, .unlock):
return .complete
case (.forceLogout, .unlock):
return .loggingOut
case (.pinEntered, .createPIN):
case (.pinEntered, .createPIN(let replacingExitingPIN)):
if presentingFlow == .authentication {
return appLockService.biometryType != .none ? .biometricsPrompt : .complete
} else {
} else if !replacingExitingPIN {
return appLockService.biometricUnlockEnabled || appLockService.biometryType == .none ? .settings : .biometricsPrompt
} else {
return .settings
}
case (.cancel, .createPIN):
return .complete
case (.cancel, .createPIN(let replacingExitingPIN)):
return replacingExitingPIN ? .settings : .complete
case (.biometricsSet, .biometricsPrompt):
return presentingFlow == .settings ? .settings : .complete
case (.changePIN, .settings):
return .createPIN
return .createPIN(replacingExitingPIN: true)
case (.appLockDisabled, .settings):
return .complete
default:
Expand All @@ -153,11 +155,12 @@ class AppLockSetupFlowCoordinator: FlowCoordinatorProtocol {
showSettings()
case (.createPIN, .biometricsPrompt):
showBiometricsPrompt()
case (.createPIN, .settings):
navigationStackCoordinator.setSheetCoordinator(nil)
// The above is fine for change pin, but not create PIN when biometrics are unavailable.
// Need to track the two flows differently to call the alternative below.
// showSettings()
case (.createPIN(let replacingExitingPIN), .settings):
if replacingExitingPIN {
navigationStackCoordinator.setSheetCoordinator(nil) // Reveal the settings screen again.
} else {
showSettings() // Biometrics was unavailable, push the settings screen now.
}
case (.biometricsPrompt, .settings):
showSettings()
case (.settings, .createPIN):
Expand Down
1 change: 1 addition & 0 deletions changelog.d/pr-1981.wip
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug when setting up App Lock if biometrics aren't available.

0 comments on commit 8f01053

Please sign in to comment.