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.
235 lines
7.1 KiB
235 lines
7.1 KiB
//
|
|
// ProfileChangePasswordViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Fm-user on 1/9/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ProfileChangePasswordViewController: UIViewController {
|
|
|
|
private var isScrolled: Bool = false
|
|
|
|
@IBOutlet weak var textFieldCurrentPassword: UITextField!
|
|
@IBOutlet weak var textFieldNewPassword: UITextField!
|
|
@IBOutlet weak var textFieldConfirmPassword: UITextField!
|
|
|
|
@IBOutlet weak var topLabel: UILabel!
|
|
|
|
@IBOutlet weak var contentView: UIView!
|
|
|
|
private var changepasswordviewmodel = ChangePasswordViewModel()
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
|
|
@objc func appMovedToForeground() {
|
|
|
|
resignAllResponders()
|
|
|
|
if isScrolled {
|
|
isScrolled = !isScrolled
|
|
}
|
|
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
|
|
registerTapListener()
|
|
|
|
setUpNavBar(id: 201,title: "Profile")
|
|
|
|
setUpAnotherLoginListener(genericviewmodel: changepasswordviewmodel)
|
|
|
|
textFieldCurrentPassword.delegate = self
|
|
textFieldNewPassword.delegate = self
|
|
textFieldConfirmPassword.delegate = self
|
|
|
|
|
|
changepasswordviewmodel.passwordConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
changepasswordviewmodel.passwordConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 20)
|
|
}
|
|
|
|
|
|
changepasswordviewmodel.internetConnection.value = nil
|
|
|
|
/**
|
|
Internet check
|
|
*/
|
|
|
|
changepasswordviewmodel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
|
|
/**
|
|
Update request for change password
|
|
*/
|
|
changepasswordviewmodel.passwordChanged.bind { [unowned self] in
|
|
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.enableUserInteractions()
|
|
|
|
guard $0! else {
|
|
self.popUpMessageError(value: 10, message: self.changepasswordviewmodel.getErrorMessage())
|
|
return
|
|
}
|
|
|
|
let alert = UIAlertController(title: "Password changed", message: "Successfully changed", preferredStyle: UIAlertControllerStyle.alert)
|
|
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: {Void in self.navigationController?.popViewController(animated: true)}))
|
|
|
|
self.present(alert, animated: true, completion: nil)
|
|
}
|
|
}
|
|
|
|
|
|
@IBAction func savePasswordChanges(_ sender: Any) {
|
|
resignAllResponders()
|
|
switch changepasswordviewmodel.validateFields() {
|
|
case .Valid:
|
|
showActivityIndicator(activityIndicator: activityIndicator)
|
|
disableUserInteractions()
|
|
changepasswordviewmodel.requestPasswordChanges()
|
|
return
|
|
case .InValid(let error):
|
|
self.popUpMessageError(value: 11, message: error)
|
|
|
|
}
|
|
|
|
}
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
|
|
}
|
|
|
|
func resignAllResponders() {
|
|
textFieldCurrentPassword.resignFirstResponder()
|
|
textFieldNewPassword.resignFirstResponder()
|
|
textFieldConfirmPassword.resignFirstResponder()
|
|
}
|
|
|
|
func popOutCurrentViewController() {
|
|
dismiss(animated: true, completion: nil)
|
|
navigationController?.popViewController(animated: true)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension ProfileChangePasswordViewController: UITextFieldDelegate {
|
|
|
|
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
checkScroll()
|
|
}
|
|
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
checkScroll()
|
|
}
|
|
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
switch textField {
|
|
case textFieldCurrentPassword:
|
|
textFieldNewPassword.becomeFirstResponder()
|
|
return true
|
|
case textFieldNewPassword:
|
|
textFieldConfirmPassword.becomeFirstResponder()
|
|
return true
|
|
case textFieldConfirmPassword:
|
|
textFieldConfirmPassword.resignFirstResponder()
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
|
|
let inputCharacters = (textField.text! as NSString).replacingCharacters(in: range, with: string)
|
|
|
|
switch textField {
|
|
case textFieldCurrentPassword:
|
|
changepasswordviewmodel.updateOldPassword(inputString: inputCharacters)
|
|
return true
|
|
case textFieldNewPassword:
|
|
changepasswordviewmodel.updateNewPassword(inputString: inputCharacters)
|
|
return true
|
|
case textFieldConfirmPassword:
|
|
changepasswordviewmodel.updateConfirmPassword(inputString: inputCharacters)
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension ProfileChangePasswordViewController: ScrollableProtocol {
|
|
var offset: CGFloat {
|
|
get {
|
|
return topLabel.frame.origin.y + topLabel.frame.height
|
|
}
|
|
}
|
|
|
|
var viewScrolled: Bool {
|
|
get {
|
|
return isScrolled
|
|
}
|
|
}
|
|
|
|
func checkScroll() {
|
|
|
|
if !viewScrolled {
|
|
performScroll(direction: 0)
|
|
isScrolled = !isScrolled
|
|
} else {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
}
|
|
|
|
func registerTapListener() {
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
|
|
view.addGestureRecognizer(tap)
|
|
}
|
|
|
|
@objc func clearKeyboard() {
|
|
resignAllResponders()
|
|
if viewScrolled {
|
|
performScroll(direction: 1)
|
|
isScrolled = !isScrolled
|
|
}
|
|
}
|
|
|
|
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)
|
|
})
|
|
}
|
|
}
|
|
|
|
}
|