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

6 years ago
  1. //
  2. // ProfileChangePasswordViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Fm-user on 1/9/18.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class ProfileChangePasswordViewController: UIViewController {
  10. private var isScrolled: Bool = false
  11. @IBOutlet weak var textFieldCurrentPassword: UITextField!
  12. @IBOutlet weak var textFieldNewPassword: UITextField!
  13. @IBOutlet weak var textFieldConfirmPassword: UITextField!
  14. @IBOutlet weak var topLabel: UILabel!
  15. @IBOutlet weak var contentView: UIView!
  16. private var changepasswordviewmodel = ChangePasswordViewModel()
  17. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  18. @objc func appMovedToForeground() {
  19. resignAllResponders()
  20. if isScrolled {
  21. isScrolled = !isScrolled
  22. }
  23. }
  24. override func viewDidLoad() {
  25. super.viewDidLoad()
  26. NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
  27. registerTapListener()
  28. setUpNavBar(id: 201,title: "Profile")
  29. setUpAnotherLoginListener(genericviewmodel: changepasswordviewmodel)
  30. textFieldCurrentPassword.delegate = self
  31. textFieldNewPassword.delegate = self
  32. textFieldConfirmPassword.delegate = self
  33. changepasswordviewmodel.passwordConnectionTimeOut.value = nil
  34. /**
  35. connection timeout
  36. */
  37. changepasswordviewmodel.passwordConnectionTimeOut.bind { [unowned self] in
  38. guard $0 != nil else {
  39. return
  40. }
  41. self.enableUserInteractions()
  42. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  43. self.popUpMessage(value: 20)
  44. }
  45. changepasswordviewmodel.internetConnection.value = nil
  46. /**
  47. Internet check
  48. */
  49. changepasswordviewmodel.internetConnection.bind { [unowned self] in
  50. guard $0 != nil else {
  51. return
  52. }
  53. self.enableUserInteractions()
  54. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  55. self.popUpMessage(value: 15)
  56. }
  57. /**
  58. Update request for change password
  59. */
  60. changepasswordviewmodel.passwordChanged.bind { [unowned self] in
  61. guard $0 != nil else {
  62. return
  63. }
  64. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  65. self.enableUserInteractions()
  66. guard $0! else {
  67. self.popUpMessageError(value: 10, message: self.changepasswordviewmodel.getErrorMessage())
  68. return
  69. }
  70. let alert = UIAlertController(title: "Password changed", message: "Successfully changed", preferredStyle: UIAlertControllerStyle.alert)
  71. alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: {Void in self.navigationController?.popViewController(animated: true)}))
  72. self.present(alert, animated: true, completion: nil)
  73. }
  74. }
  75. @IBAction func savePasswordChanges(_ sender: Any) {
  76. resignAllResponders()
  77. switch changepasswordviewmodel.validateFields() {
  78. case .Valid:
  79. showActivityIndicator(activityIndicator: activityIndicator)
  80. disableUserInteractions()
  81. changepasswordviewmodel.requestPasswordChanges()
  82. return
  83. case .InValid(let error):
  84. self.popUpMessageError(value: 11, message: error)
  85. }
  86. }
  87. override func didReceiveMemoryWarning() {
  88. super.didReceiveMemoryWarning()
  89. }
  90. func resignAllResponders() {
  91. textFieldCurrentPassword.resignFirstResponder()
  92. textFieldNewPassword.resignFirstResponder()
  93. textFieldConfirmPassword.resignFirstResponder()
  94. }
  95. func popOutCurrentViewController() {
  96. dismiss(animated: true, completion: nil)
  97. navigationController?.popViewController(animated: true)
  98. }
  99. }
  100. extension ProfileChangePasswordViewController: UITextFieldDelegate {
  101. func textFieldDidBeginEditing(_ textField: UITextField) {
  102. checkScroll()
  103. }
  104. func textFieldDidEndEditing(_ textField: UITextField) {
  105. checkScroll()
  106. }
  107. func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  108. switch textField {
  109. case textFieldCurrentPassword:
  110. textFieldNewPassword.becomeFirstResponder()
  111. return true
  112. case textFieldNewPassword:
  113. textFieldConfirmPassword.becomeFirstResponder()
  114. return true
  115. case textFieldConfirmPassword:
  116. textFieldConfirmPassword.resignFirstResponder()
  117. return true
  118. default:
  119. return false
  120. }
  121. }
  122. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  123. let inputCharacters = (textField.text! as NSString).replacingCharacters(in: range, with: string)
  124. switch textField {
  125. case textFieldCurrentPassword:
  126. changepasswordviewmodel.updateOldPassword(inputString: inputCharacters)
  127. return true
  128. case textFieldNewPassword:
  129. changepasswordviewmodel.updateNewPassword(inputString: inputCharacters)
  130. return true
  131. case textFieldConfirmPassword:
  132. changepasswordviewmodel.updateConfirmPassword(inputString: inputCharacters)
  133. return true
  134. default:
  135. return false
  136. }
  137. }
  138. }
  139. extension ProfileChangePasswordViewController: ScrollableProtocol {
  140. var offset: CGFloat {
  141. get {
  142. return topLabel.frame.origin.y + topLabel.frame.height
  143. }
  144. }
  145. var viewScrolled: Bool {
  146. get {
  147. return isScrolled
  148. }
  149. }
  150. func checkScroll() {
  151. if !viewScrolled {
  152. performScroll(direction: 0)
  153. isScrolled = !isScrolled
  154. } else {
  155. performScroll(direction: 1)
  156. isScrolled = !isScrolled
  157. }
  158. }
  159. func registerTapListener() {
  160. let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
  161. view.addGestureRecognizer(tap)
  162. }
  163. @objc func clearKeyboard() {
  164. resignAllResponders()
  165. if viewScrolled {
  166. performScroll(direction: 1)
  167. isScrolled = !isScrolled
  168. }
  169. }
  170. func performScroll(direction: Int) {
  171. if direction == 0 {
  172. UIView.animate(withDuration: 0.3, animations: {
  173. self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1)
  174. })
  175. } else if direction == 1 {
  176. UIView.animate(withDuration: 0.3, animations: {
  177. self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset)
  178. })
  179. }
  180. }
  181. }