Update configuration
This commit is contained in:
parent
8a01633e03
commit
4861749415
|
|
@ -24,26 +24,22 @@
|
|||
public struct PassCodeConfiguration {
|
||||
|
||||
/// Pass code length
|
||||
public var passCodeCharactersNumber: UInt = 4
|
||||
public let passCodeLength: Int
|
||||
|
||||
/// Incorrect pass code attempts count
|
||||
public var maxAttemptsLoginNumber: UInt = 5
|
||||
public let maxAttemptsNumber: Int
|
||||
|
||||
/// Clear input progress when application goes to background
|
||||
public var shouldResetWhenGoBackground: Bool = true
|
||||
public let shouldResetWhenGoBackground: Bool
|
||||
|
||||
private init() {}
|
||||
|
||||
init?(passCodeCharactersNumber: UInt) {
|
||||
guard passCodeCharactersNumber > 0 else {
|
||||
assertionFailure("passCodeCharactersNumber must be greater then 0")
|
||||
return nil
|
||||
}
|
||||
self.passCodeCharactersNumber = passCodeCharactersNumber
|
||||
public init(passCodeLength: Int = 4, maxAttemptsNumber: Int = 5, shouldResetWhenGoBackground: Bool = true) {
|
||||
self.passCodeLength = passCodeLength
|
||||
self.maxAttemptsNumber = maxAttemptsNumber
|
||||
self.shouldResetWhenGoBackground = shouldResetWhenGoBackground
|
||||
}
|
||||
|
||||
/// Returns configuration with default values
|
||||
public static var defaultConfiguration: PassCodeConfiguration {
|
||||
return PassCodeConfiguration()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
|
|||
private func initialDotNumberConfiguration() {
|
||||
dotStackView.arrangedSubviews.forEach { dotStackView.removeArrangedSubview($0) }
|
||||
|
||||
for _ in 0..<viewModel.passCodeConfiguration.passCodeCharactersNumber {
|
||||
for _ in 0 ..< viewModel.passCodeConfiguration.passCodeLength {
|
||||
let dotImageView = UIImageView()
|
||||
dotImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
dotImageView.widthAnchor.constraint(equalTo: dotImageView.heightAnchor, multiplier: 1)
|
||||
|
|
@ -132,7 +132,7 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
|
|||
private func setStates(for passCodeText: String) {
|
||||
var statesArray: [PinImageType] = []
|
||||
|
||||
for characterIndex in 0..<viewModel.passCodeConfiguration.passCodeCharactersNumber {
|
||||
for characterIndex in 0..<viewModel.passCodeConfiguration.passCodeLength {
|
||||
let state: PinImageType = Int(characterIndex) <= passCodeText.characters.count - 1 ? .entered : .clear
|
||||
statesArray.append(state)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,26 +39,25 @@ open class BasePassCodeViewModel: BaseViewModel {
|
|||
|
||||
/// TouchId service, which can answer if user is authorized by finger
|
||||
public let touchIdService: TouchIDService?
|
||||
|
||||
/// Contains configuration for pass code operations
|
||||
public let passCodeConfiguration: PassCodeConfiguration
|
||||
|
||||
fileprivate let validationResultHolder = Variable<PassCodeValidationResult?>(nil)
|
||||
private let validationResultHolder = Variable<PassCodeValidationResult?>(nil)
|
||||
var validationResult: Driver<PassCodeValidationResult?> {
|
||||
return validationResultHolder.asDriver()
|
||||
}
|
||||
|
||||
fileprivate let passCodeControllerStateHolder = Variable<PassCodeControllerState>(.enter)
|
||||
private let passCodeControllerStateHolder = Variable<PassCodeControllerState>(.enter)
|
||||
public var passCodeControllerState: Driver<PassCodeControllerState> {
|
||||
return passCodeControllerStateHolder.asDriver()
|
||||
}
|
||||
|
||||
private let passCodeText = Variable<String?>(nil)
|
||||
|
||||
fileprivate var attemptsNumber = 0
|
||||
private var attemptsNumber = 0
|
||||
|
||||
fileprivate lazy var passCodeHolder: PassCodeHolderProtocol = {
|
||||
return PassCodeHolderBuilder.build(with: self.controllerType)
|
||||
}()
|
||||
private lazy var passCodeHolder: PassCodeHolderProtocol = PassCodeHolderBuilder.build(with: self.controllerType)
|
||||
|
||||
public init(controllerType: PassCodeControllerType,
|
||||
passCodeConfiguration: PassCodeConfiguration,
|
||||
|
|
@ -76,7 +75,7 @@ open class BasePassCodeViewModel: BaseViewModel {
|
|||
.distinctUntilChanged { $0 == $1 }
|
||||
.drive(onNext: { [weak self] passCode in
|
||||
if let passCode = passCode,
|
||||
passCode.characters.count == Int(self?.passCodeConfiguration.passCodeCharactersNumber ?? 0) {
|
||||
passCode.characters.count == Int(self?.passCodeConfiguration.passCodeLength ?? 0) {
|
||||
self?.set(passCode: passCode)
|
||||
}
|
||||
})
|
||||
|
|
@ -184,8 +183,8 @@ extension BasePassCodeViewModel {
|
|||
validationResult = .inValid(.wrongCode)
|
||||
}
|
||||
|
||||
if (!validationResult.isValid && attemptsNumber == Int(passCodeConfiguration.maxAttemptsLoginNumber)) ||
|
||||
attemptsNumber > Int(passCodeConfiguration.maxAttemptsLoginNumber) {
|
||||
if (!validationResult.isValid && attemptsNumber == Int(passCodeConfiguration.maxAttemptsNumber)) ||
|
||||
attemptsNumber > Int(passCodeConfiguration.maxAttemptsNumber) {
|
||||
validationResult = .inValid(.tooManyAttempts)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue