You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
6.8 KiB
226 lines
6.8 KiB
//
|
|
// ProfileChangePhoneNumberViewController.swift
|
|
// GME Remit
|
|
//
|
|
// Created by Jeongbae Kong on 21/01/2020.
|
|
//Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ChangePersonalInformationViewController: UIViewController {
|
|
|
|
// MARK: Properties
|
|
|
|
var presenter: ChangePersonalInformationModuleInterface?
|
|
var type: TargetInfo = .mobile
|
|
private var target: String?
|
|
|
|
private var password: String? {
|
|
didSet {
|
|
guard
|
|
let password = password
|
|
else { return }
|
|
let model = ChangePersonalInformationModel(
|
|
passwordForChangePersonalInformation: password,
|
|
newValue: changeInformationTextField.text
|
|
)
|
|
target = type.rawValue
|
|
presenter?.verifyPasswordForChangePersonalInformation(model: model, target: target ?? "")
|
|
}
|
|
}
|
|
|
|
// MARK: Computed Properties
|
|
|
|
// MARK: IBOutlets
|
|
|
|
@IBOutlet weak var changeDescriptionLabel: UILabel!
|
|
@IBOutlet weak var whatToChangeLabel: UILabel!
|
|
@IBOutlet weak var changeInformationTextField: ValidationTextField!
|
|
@IBOutlet weak var saveButton: UIButton!
|
|
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
setup()
|
|
}
|
|
|
|
// MARK: IBActions
|
|
|
|
@IBAction func saveNewPersonalInformationButton(_ sender: UIButton) {
|
|
|
|
if let isUseBiometric = KeyChain.shared.get(key: .biometricAuth), isUseBiometric == "1" {
|
|
let biometricAuthenticationWireframe = BiometricAuthenticationWireframe()
|
|
biometricAuthenticationWireframe.openWithDelegate(on: self, delegate: self)
|
|
} else {
|
|
showSecureKeyPad()
|
|
}
|
|
}
|
|
|
|
private func showSecureKeyPad() {
|
|
self.openPasswordInput { (value) in
|
|
self.password = value
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: ChangePersonalInformationViewInterface
|
|
extension ChangePersonalInformationViewController: ChangePersonalInformationViewInterface {
|
|
func successChangeProfileInformation() {
|
|
presenter?.goBackToPersonalInformation()
|
|
}
|
|
|
|
func successProfileValidationOTP() {
|
|
self.alertWithOk(
|
|
type: .success,
|
|
message: "verification_completed_title_text".localized(),
|
|
title: "will_change_your_personal_information_title_text".localized(),
|
|
okTitle: "ok_text".localized()
|
|
) {
|
|
if let newValue = self.changeInformationTextField.text {
|
|
self.presenter?.changeProfileInformation(newValue: newValue, target: self.target ?? "")
|
|
} else {
|
|
self.alert(type: .error, message: "Cannot verify OTP.")
|
|
}
|
|
}
|
|
}
|
|
|
|
func readyForOpenOTP() {
|
|
|
|
self.alertWithOk(
|
|
type: .success,
|
|
message: "will_proceed_to_check_otp_title_text".localized(),
|
|
title: "successfully_verified_password_title_text".localized(),
|
|
okTitle: "ok_text".localized()
|
|
) {
|
|
if let newValue = self.changeInformationTextField.text {
|
|
self.presenter?.openOTP(newValue: newValue)
|
|
} else {
|
|
self.alert(type: .error, message: "Cannot verify password")
|
|
}
|
|
}
|
|
}
|
|
|
|
func setError(with error: Error) {
|
|
alert(message: error.localizedDescription)
|
|
}
|
|
}
|
|
|
|
// MARK: Other Functions
|
|
extension ChangePersonalInformationViewController {
|
|
private func setup() {
|
|
setupTargets()
|
|
setupLabel()
|
|
validationCheck()
|
|
|
|
saveButton.layer.cornerRadius = 5
|
|
}
|
|
|
|
private func setupTargets() {
|
|
saveButton.isEnabled = false
|
|
saveButton.backgroundColor = .lightGray
|
|
|
|
changeInformationTextField.addTarget(
|
|
self,
|
|
action: #selector(newPersonalInformationType(sender:)),
|
|
for: UIControl.Event.editingChanged
|
|
)
|
|
}
|
|
|
|
private func setupLabel() {
|
|
switch type {
|
|
|
|
case .mobile:
|
|
navigationItem.title = "change_your_phonenumber_title_text".localized()
|
|
changeDescriptionLabel.text = "change_your_phonenumber_instruction_text".localized()
|
|
whatToChangeLabel.text = "new_phonenumber_text".localized()
|
|
changeInformationTextField.placeholder = "enter_your_new_phonenumber_text".localized()
|
|
|
|
case .email:
|
|
|
|
changeInformationTextField.keyboardType = .emailAddress
|
|
navigationItem.title = "change_your_email_title_text".localized()
|
|
changeDescriptionLabel.text = "change_your_email_instruction_text".localized()
|
|
whatToChangeLabel.text = "new_email_text".localized()
|
|
changeInformationTextField.placeholder = "enter_your_new_email_text".localized()
|
|
}
|
|
}
|
|
|
|
@objc private func newPersonalInformationType(sender: UITextField) {
|
|
|
|
switch type {
|
|
|
|
case .mobile:
|
|
if changeInformationTextField.isValid {
|
|
saveButton.isEnabled = true
|
|
saveButton.backgroundColor = .themeRed
|
|
} else {
|
|
saveButton.isEnabled = false
|
|
saveButton.backgroundColor = .lightGray
|
|
}
|
|
case .email:
|
|
if changeInformationTextField.isValid {
|
|
saveButton.isEnabled = true
|
|
saveButton.backgroundColor = .themeRed
|
|
} else {
|
|
saveButton.isEnabled = false
|
|
saveButton.backgroundColor = .lightGray
|
|
}
|
|
}
|
|
}
|
|
|
|
private func validationCheck() {
|
|
switch type {
|
|
case .mobile:
|
|
changeInformationTextField.validCondition = { !$0.isEmpty && $0.count > 9 && $0.count < 12 }
|
|
case .email:
|
|
changeInformationTextField.validCondition = { $0.isEmail() }
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - BiometricAuthenticationViewControllerDelegate
|
|
extension ChangePersonalInformationViewController: BiometricAuthenticationViewControllerDelegate {
|
|
func viewController(
|
|
_ viewController: BiometricAuthenticationViewController,
|
|
didFailWithError error: BiometricAuthenticationError, errorMessage: String?) {
|
|
|
|
print("BiometricAuthenticationWireframe Error: \(errorMessage ?? "")")
|
|
viewController.dismiss(animated: true) {
|
|
|
|
switch error {
|
|
case .userFallback:
|
|
self.showSecureKeyPad()
|
|
case .authenticationFailed, .userCancel, .biometryNotAvailable,
|
|
.biometryNotEnrolled, .biometryLockout, .notBeConfigured:
|
|
self.alert(type: .error, message: error.message)
|
|
}
|
|
}
|
|
}
|
|
|
|
func doSelectLocalAuthenticationPolicy(
|
|
_ viewController: BiometricAuthenticationViewController
|
|
) -> BiometricAuthenticationPolicy {
|
|
return .deviceOwnerAuthenticationWithBiometrics
|
|
}
|
|
|
|
func didComplete(_ viewController: BiometricAuthenticationViewController) {
|
|
viewController.dismiss(animated: true) {
|
|
guard let encryptedPW = KeyChain.shared.get(key: .password) else {
|
|
MainWireframe.logoutWarningAlert(message: "To use biometrics authentication you have to login again.")
|
|
return
|
|
}
|
|
self.password = encryptedPW
|
|
}
|
|
}
|
|
|
|
func viewController(
|
|
_ viewController: BiometricAuthenticationViewController,
|
|
informationTitleLabel titleLabel: UILabel,
|
|
authenticationButton button: UIButton
|
|
) {
|
|
titleLabel.text = "use_biometric_authentication_text".localized()
|
|
button.setTitle("verify_account_button_text".localized(), for: .normal)
|
|
}
|
|
}
|