// // SendMoneyCodeViewController.swift // GME Remit // // Created by gme_2 on 27/02/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import PMAlertController import Hex class SendMoneyCodeViewController: UIViewController { // MARK: IBOutlets @IBOutlet weak var otpCodeTitlelabel: UILabel! @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var verificationCodeTextField: UITextField! @IBOutlet weak var resendButton: UIButton! @IBOutlet weak var submitButton: UIButton! @IBOutlet weak var notNowButton: UIButton! @IBOutlet weak var counterLabel: UILabel! @IBOutlet weak var counterTitleLabel: UILabel! @IBOutlet weak var counterStackView: UIStackView! @IBOutlet weak var backGourndBorderView: UIView! var timer: Timer? let expiryTime = 5 // second var count: Int = 5 { didSet { if ( count <= 0) { count = expiryTime // two minutes passed self.timer?.invalidate() self.counterStackView.isHidden = true self.resendButton.isUserInteractionEnabled = true self.resendButton.isHidden = false } else { let result = count.quotientAndRemainder(dividingBy: 60) self.counterLabel.text = "\(result.quotient): \(result.remainder)" self.resendButton.isUserInteractionEnabled = false self.resendButton.isHidden = true } } } // MARK: Properties var mNumberTransKeyView : TransKeyView! var numberCipherString : String! var presenter: SendMoneyCodeModuleInterface? var completion: ((String) -> Void)? var type: CodeType = .sendMoney var newValue: String? private var requestModel: SendMoneyRequestModel? var encryptedNumber: String? { didSet { touchSubmit(UIButton()) } } var isShowNumber : Bool! var isTranskeyShowing : Bool! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() switch type { case .sendMoney: self.requestOtpCode() case .editProfile: startTimer() } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) backGourndBorderView.bottomToOrigin(duration: 0.1) } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) } // MARK: IBActions @IBAction func touchSubmit(_ sender: UIButton) { if let number = encryptedNumber { self.dismiss(animated: true) { self.completion?(number) } } else { alert(type: .error, message: "4-digit OTP code is required.") } } // MARK: Other Functions private func setup() { // all setup should be done here self.titleLabel.text = "enter_otp_password_text".localized() self.verificationCodeTextField.placeholder = "otp_password_hint_text".localized() self.resendButton.setTitle("resend_request_text".localized(), for: UIControl.State.normal) self.submitButton.setTitle("submit_text".localized(), for: .normal) self.notNowButton.setTitle("not_now_text".localized(), for: .normal) verificationCodeTextField.delegate = self submitButton.layer.cornerRadius = 5 submitButton.backgroundColor = .themeRed resendButton.setTitleColor(.themeRed, for: .normal) counterLabel.textColor = .themeRed } private func configureText() { self.titleLabel.text = "penny_test_promt_description_text".localized() self.otpCodeTitlelabel.text = "otp__Code_text".localized() self.resendButton.setTitle("resend_text".localized(), for: UIControl.State.normal) self.submitButton.setTitle("submit_text".localized(), for: UIControl.State.normal) self.notNowButton.setTitle("not_now_text".localized(), for: UIControl.State.normal) self.counterTitleLabel.text = "resend_code_text".localized() } @IBAction func viewSample(_ sender: Any) { self.showSampleImage() } @IBAction func resend(_ sender: Any) { switch type { case .sendMoney: self.requestOtpCode() case .editProfile: presenter?.changeProfileResendOTP(newValue: newValue ?? "") } } @IBAction func dismiss(_ sender: Any) { backGourndBorderView.originToBottom(duration: 0.1) { self.dismiss() } } private func dismiss() { self.dismiss(animated: true, completion: nil) } func showSampleImage() { let image = #imageLiteral(resourceName: "penny3.jpg") let alertVC = PMAlertController(title: "", description: "", image: image, style: .alert) alertVC.alertView.layer.cornerRadius = 5 let action = PMAlertAction(title: "ok_text".localized(), style: .cancel) alertVC.addAction(action) self.present(alertVC, animated: true, completion: nil) } // resend private func requestOtpCode() { // request otp self.presenter?.viewIsReady() self.startTimer() } private func startTimer() { self.timer = Timer.scheduledTimer( timeInterval: 1, target: self, selector: #selector(self.updateCounter), userInfo: nil, repeats: true ) self.timer?.fire() self.resendButton.isUserInteractionEnabled = false self.counterStackView.isHidden = false } @objc func updateCounter() { self.count -= 1 } private func requestOtpCodeRetryCount() { } } // MARK: SendMoneyCodeViewInterface extension SendMoneyCodeViewController: SendMoneyCodeViewInterface { func successChangeProfileInformation() { self.alertWithOk( type: .success, message: "Type 4-digit OTP number", title: "new OTP number has re-sent", okTitle: "OK" ) startTimer() } func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } func show(message: String) { self.titleLabel.text = message } func show(error: String) { self.alert(type: .error, message: error) } func expiredError(error: Error) { alert(type: .error, message: error.localizedDescription, title: "Error") { self.dismiss() } } } // MARK: - UITextFieldDelegate extension SendMoneyCodeViewController: UITextFieldDelegate { func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { let secureKeypad = SecureKeypad(target: self, keypadType: .numberic) secureKeypad.delegate = self secureKeypad.present(animated: true) return false } } // MARK: - OtpCodeRequestApiService extension SendMoneyCodeViewController: OtpCodeRequestApiService {} // MARK: - SecureKeypadDelegate extension SendMoneyCodeViewController: SecureKeypadDelegate { func didComplete(_ encryptedString: String, garbagePassword: String, length: Int) { if length != 0 { self.encryptedNumber = encryptedString } } }