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

//
// 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)
})
}
}
}