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.
252 lines
6.6 KiB
252 lines
6.6 KiB
//
|
|
// 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
|
|
}
|
|
}
|
|
}
|