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.
279 lines
8.8 KiB
279 lines
8.8 KiB
//
|
|
// LoginViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Sujal on 12/12/17.
|
|
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
class _LoginViewController: UIViewController {
|
|
|
|
@IBOutlet weak var viewContent: UIView!
|
|
|
|
private var isScrolled: Bool = false
|
|
|
|
private var activeTextField: UITextField?
|
|
|
|
private var redirectMessage: String = "nil"
|
|
var noConnectionTimeOutDialog: Bool?
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
private var loginviewmodel = LoginViewModel()
|
|
|
|
@IBOutlet weak var textFieldUsername: UITextField!
|
|
@IBOutlet weak var textFieldPassword: UITextField!
|
|
|
|
@IBAction func forgetPasswordAction(_ sender: Any) {
|
|
self.performSegue(withIdentifier: "forgetPasswordIdentifier", sender: nil)
|
|
clearKeyboard()
|
|
activeTextField?.resignFirstResponder()
|
|
if viewScrolled {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
}
|
|
|
|
|
|
@IBAction func logIn(_ sender: Any) {
|
|
|
|
activeTextField?.resignFirstResponder()
|
|
if viewScrolled {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
|
|
disableUserInteractions()
|
|
showActivityIndicator(activityIndicator: activityIndicator)
|
|
|
|
switch loginviewmodel.checkParams(username: textFieldUsername.text!, password: textFieldPassword.text!) {
|
|
case .Valid:
|
|
loginviewmodel.setCredentials(userId: textFieldUsername.text!, password: textFieldPassword.text!)
|
|
loginviewmodel.logIn()
|
|
case .InValid(let error):
|
|
dismissActivityIndicator(activityIndicator: activityIndicator)
|
|
self.popUpMessageError(value: 11, message: error)
|
|
enableUserInteractions()
|
|
}
|
|
}
|
|
|
|
|
|
@objc func appMovedToForeground() {
|
|
|
|
activeTextField?.resignFirstResponder()
|
|
|
|
if isScrolled {
|
|
isScrolled = !isScrolled
|
|
}
|
|
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
|
|
super.viewDidLoad()
|
|
|
|
setUpNavBar(id: 100, title: "")
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
|
|
registerTapListener()
|
|
|
|
textFieldUsername.delegate = self
|
|
textFieldPassword.delegate = self
|
|
|
|
noConnectionTimeOutDialog = false
|
|
|
|
textFieldUsername.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
|
|
textFieldUsername.layer.borderWidth = 1.0
|
|
textFieldUsername.layer.cornerRadius = 5
|
|
|
|
textFieldPassword.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
|
|
textFieldPassword.layer.borderWidth = 1.0
|
|
textFieldPassword.layer.cornerRadius = 5
|
|
|
|
|
|
textFieldUsername.text = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
|
|
|
|
|
|
loginviewmodel.loggedInConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
loginviewmodel.loggedInConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
|
|
if !self.noConnectionTimeOutDialog! {
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 20)
|
|
}
|
|
self.noConnectionTimeOutDialog = true
|
|
|
|
print("12345")
|
|
|
|
}
|
|
|
|
loginviewmodel.internetConnection.value = nil
|
|
/**
|
|
internet check
|
|
*/
|
|
loginviewmodel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
|
|
}
|
|
/**
|
|
Update user login Info
|
|
*/
|
|
|
|
loginviewmodel.loggedin.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.enableUserInteractions()
|
|
guard $0! else {
|
|
if self.loginviewmodel.redirectToCodeFillUp() {
|
|
if let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String{
|
|
self.redirectMessage = "\(userId) is already registered, please click Resend code and enter four digit code that is sent to \(userId) OR call our customer center number: +82 1588-6864"
|
|
}else{
|
|
self.redirectMessage = "userId is already registered, please click Resend code and enter four digit code that is sent to userId OR call our customer center number: +82 1588-6864"
|
|
}
|
|
|
|
self.performSegue(withIdentifier: "redirectToOTP", sender: nil)
|
|
} else {
|
|
self.popUpMessageError(value: 10, message: self.loginviewmodel.getErrorMessage())
|
|
}
|
|
return
|
|
}
|
|
guard self.isVerified() else {
|
|
guard self.isKYCSubmitted() else {
|
|
self.performSegue(withIdentifier: "fillKYCPersonalInfo", sender: nil)
|
|
return
|
|
}
|
|
self.redirectToHomeViewController()
|
|
return
|
|
}
|
|
self.redirectToHomeViewController()
|
|
}
|
|
}
|
|
|
|
func redirectToHomeViewController() {
|
|
// self.performSegue(withIdentifier: "homeFromLogin", sender: nil)
|
|
let wireFrame = MainWireframe.shared
|
|
let tabBarViewController = wireFrame?.getMainView()
|
|
if let delegate = UIApplication.shared.delegate as? AppDelegate {
|
|
delegate.window?.rootViewController = tabBarViewController
|
|
delegate.window?.makeKeyAndVisible()
|
|
}
|
|
}
|
|
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
|
|
if segue.identifier == "redirectToOTP" {
|
|
let fillcodeViewController = segue.destination as! FillSignUpCodeController
|
|
fillcodeViewController.deviceORpassword = 1
|
|
fillcodeViewController.redirectToOTP = self.redirectMessage
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension _LoginViewController: UITextFieldDelegate {
|
|
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
activeTextField = textField
|
|
checkScroll()
|
|
}
|
|
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
checkScroll()
|
|
}
|
|
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
if textField == textFieldUsername {
|
|
textFieldPassword.becomeFirstResponder()
|
|
} else if textField == textFieldPassword {
|
|
textFieldPassword.resignFirstResponder()
|
|
}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension _LoginViewController: ScrollableProtocol {
|
|
/**
|
|
- Returns offset value to animate
|
|
*/
|
|
var offset: CGFloat {
|
|
get {
|
|
return viewContent.frame.origin.y - 40
|
|
}
|
|
}
|
|
|
|
/**
|
|
- Returns Bool value to scroll
|
|
*/
|
|
var viewScrolled: Bool {
|
|
get {
|
|
return isScrolled
|
|
}
|
|
}
|
|
|
|
/**
|
|
Check if textfield is active and required scroll
|
|
*/
|
|
|
|
func checkScroll() {
|
|
|
|
if !viewScrolled {
|
|
performScroll(direction: 0)
|
|
isScrolled = !isScrolled
|
|
} else {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
}
|
|
|
|
/**
|
|
Dissmiss keyboard when tap outside to textfield
|
|
*/
|
|
func registerTapListener() {
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
|
|
view.addGestureRecognizer(tap)
|
|
}
|
|
|
|
/**
|
|
Dissmiss keyboard
|
|
*/
|
|
|
|
@objc func clearKeyboard() {
|
|
activeTextField?.resignFirstResponder()
|
|
|
|
if viewScrolled {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
}
|
|
|
|
/**
|
|
Animate scroll UI in case when textfield is active and also if inactive.
|
|
*/
|
|
func performScroll(direction: Int) {
|
|
if direction == 0 {
|
|
UIView.animate(withDuration: 0.3, animations: {
|
|
self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1)
|
|
})
|
|
} else if direction == 1 {
|
|
UIView.animate(withDuration: 0.3, animations: {
|
|
self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset)
|
|
})
|
|
}
|
|
}
|
|
}
|