diff --git a/Susi.xcodeproj/project.pbxproj b/Susi.xcodeproj/project.pbxproj index ea7bb959..9a6a0c7d 100644 --- a/Susi.xcodeproj/project.pbxproj +++ b/Susi.xcodeproj/project.pbxproj @@ -109,6 +109,8 @@ 71DF0561EA8079C5C53174C1 /* Pods_Susi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C564B012515FE5529232089A /* Pods_Susi.framework */; }; 80183F6F21D170BB00859F72 /* AboutVCMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80183F6E21D170BB00859F72 /* AboutVCMethods.swift */; }; 807A754421D143A1008D4032 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807A754321D143A1008D4032 /* AboutViewController.swift */; }; + 80E8C2CE229D2F400086F420 /* AccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8C2CD229D2F400086F420 /* AccountViewController.swift */; }; + 80E8C2D0229D2F6D0086F420 /* AccountVCMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E8C2CF229D2F6D0086F420 /* AccountVCMethods.swift */; }; 94889CA61F7CCD370028B8C3 /* GeneralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94889CA51F7CCD370028B8C3 /* GeneralViewController.swift */; }; 94889CAE1F7CEAA80028B8C3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 94889CB01F7CEAA80028B8C3 /* Localizable.strings */; }; A0DEC06E21E0F40300659A5B /* SelectLanguageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DEC06D21E0F40300659A5B /* SelectLanguageViewController.swift */; }; @@ -244,6 +246,8 @@ 6DFC75B81EE077E9002F92BA /* ForgotPasswordViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForgotPasswordViewController.swift; sourceTree = ""; }; 80183F6E21D170BB00859F72 /* AboutVCMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutVCMethods.swift; sourceTree = ""; }; 807A754321D143A1008D4032 /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = ""; }; + 80E8C2CD229D2F400086F420 /* AccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewController.swift; sourceTree = ""; }; + 80E8C2CF229D2F6D0086F420 /* AccountVCMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountVCMethods.swift; sourceTree = ""; }; 94889CA51F7CCD370028B8C3 /* GeneralViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralViewController.swift; sourceTree = ""; }; 94889CAF1F7CEAA80028B8C3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 94889CB11F7CEAAA0028B8C3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; @@ -563,6 +567,7 @@ 6D4D9B501E768F2E0067459C /* Controllers */ = { isa = PBXGroup; children = ( + 80E8C2CC229D2F110086F420 /* AccountViewController */, A0DEC06C21E0F40300659A5B /* SelectLanguageController */, 807A754521D1639B008D4032 /* AboutViewController */, 406482FE20FCF2EF0014EB47 /* PlayerViewController */, @@ -685,6 +690,15 @@ path = AboutViewController; sourceTree = ""; }; + 80E8C2CC229D2F110086F420 /* AccountViewController */ = { + isa = PBXGroup; + children = ( + 80E8C2CD229D2F400086F420 /* AccountViewController.swift */, + 80E8C2CF229D2F6D0086F420 /* AccountVCMethods.swift */, + ); + path = AccountViewController; + sourceTree = ""; + }; 94889CAB1F7CEA620028B8C3 /* Localization */ = { isa = PBXGroup; children = ( @@ -1006,12 +1020,14 @@ 40623B7F20D243910013FE60 /* Ratings.swift in Sources */, 6D395D1D1F58966900BCC3C5 /* SkillDetailExampleCell.swift in Sources */, 3BC1D8D5203B177E003E62F9 /* noConnectionViewController.swift in Sources */, + 80E8C2D0229D2F6D0086F420 /* AccountVCMethods.swift in Sources */, 6D395D1F1F589CC000BCC3C5 /* SkillDetailVCMethods.swift in Sources */, 94889CA61F7CCD370028B8C3 /* GeneralViewController.swift in Sources */, 6DEE71121F2C9DC900A512CF /* AppNavigationController.swift in Sources */, 80183F6F21D170BB00859F72 /* AboutVCMethods.swift in Sources */, 40801EE320F33B4C0071860E /* VideoPlayerView.swift in Sources */, 6DE0025B1F3FF93A0065DB85 /* AnchorCell.swift in Sources */, + 80E8C2CE229D2F400086F420 /* AccountViewController.swift in Sources */, 6D24B0961EE409DB0097418A /* SignUpVCMethods.swift in Sources */, 40DE743920E49F3A003C0116 /* AllFeedbackViewController.swift in Sources */, 407EFAC020C34C0000675A0B /* LanguagePickerController.swift in Sources */, diff --git a/Susi/Controllers/AccountViewController/AccountVCMethods.swift b/Susi/Controllers/AccountViewController/AccountVCMethods.swift new file mode 100644 index 00000000..02332593 --- /dev/null +++ b/Susi/Controllers/AccountViewController/AccountVCMethods.swift @@ -0,0 +1,127 @@ +// +// AccountVCMethods.swift +// Susi +// +// Created by Syed on 28/05/19. +// Copyright © 2019 FOSSAsia. All rights reserved. +// + +import Foundation + +extension AccountViewController: UITextFieldDelegate { + + @objc func dismissView() { + self.dismiss(animated: true, completion: nil) + } + + func setupTitle() { + navigationItem.titleLabel.text = ControllerConstants.SettingParams.title + navigationItem.titleLabel.textAlignment = .left + navigationItem.titleLabel.textColor = .white + navigationItem.leftViews = [backButton] + navigationItem.rightViews = [settingsButton] + deleteAccountButton.tintColor = .red + } + + func setUpUserDetails() { + if let user = delegate?.currentUser { + let imageURL = URL(string: SettingsViewController.getAvatarPath(user.accessToken) ) + userAvatarImageView.kf.setImage(with: imageURL) + if UserDefaults.standard.object(forKey: ControllerConstants.SettingParams.userName) == nil { + userEmailLabel.text = user.emailID + } else { + userEmailLabel.text = UserDefaults.standard.object(forKey: ControllerConstants.SettingParams.userName) as? String + } + roundedCorner() + outerViewShadow() + } + } + + func roundedCorner() { + userAvatarImageView.layer.cornerRadius = 38.0 + userAvatarImageView.layer.borderWidth = 1.0 + userAvatarImageView.layer.borderColor = UIColor.white.cgColor + userAvatarImageView.layer.masksToBounds = true + userAvatarImageView.clipsToBounds = true + } + + // Outer View + + func outerViewShadow() { + outerView.layer.cornerRadius = 38.0 + outerView.layer.shadowColor = UIColor.gray.cgColor + outerView.layer.shadowOpacity = 1 + outerView.layer.shadowRadius = 10.0 + outerView.layer.shadowOffset = CGSize.zero + } + + // Setting Action + + @objc func settingButtonClicked() { + if let user = delegate?.currentUser { + let param = [ + ControllerConstants.SettingParams.userName: userNameTextField.text as AnyObject, + ControllerConstants.SettingParams.phoneNumber: phoneNumberTextField.text as AnyObject, + ControllerConstants.SettingParams.prefLanguage: prefLanguageTextField.text as AnyObject, + ControllerConstants.SettingParams.count: 3 as AnyObject, + ControllerConstants.SettingParams.accessToken: user.accessToken as AnyObject + ] + Client.sharedInstance.changeUserSettings(param) { (_, message) in + DispatchQueue.main.async { + UserDefaults.standard.set(self.userNameTextField.text, forKey: ControllerConstants.SettingParams.userName) + self.view.makeToast(message) + } + } + } + } + + // Key Return on Hit + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + switch textField { + case userNameTextField: + _ = phoneNumberTextField.becomeFirstResponder() + case phoneNumberTextField: + dismissKeyboard() default: + textField.resignFirstResponder() + } + return true + } + + // Dismiss Keyboard + + @objc func dismissKeyboard() { + view.endEditing(true) + } + + // Add Delegates + + func addDelegates() { + userNameTextField.delegate = self + phoneNumberTextField.delegate = self + picker.dataSource = self + picker.delegate = self + prefLanguageTextField.inputView = picker + } + + // Handle Delete Account Request. + + func handleDeleteAccountRequest() { + deleteAccountButton.addTarget(self, action: #selector(deleteAccount), for: .touchUpInside) + } + + @objc func deleteAccount() { + + } + + // Handle Upload Avatar + + func handleAvatarUpload() { + uploadAvatarButton.addTarget(self, action: #selector(uploadAvatar), for: .touchUpInside) + } + + @objc func uploadAvatar() { + + } + +} diff --git a/Susi/Controllers/AccountViewController/AccountViewController.swift b/Susi/Controllers/AccountViewController/AccountViewController.swift new file mode 100644 index 00000000..b00fd541 --- /dev/null +++ b/Susi/Controllers/AccountViewController/AccountViewController.swift @@ -0,0 +1,73 @@ +// +// AccountViewController.swift +// Susi +// +// Created by Syed on 28/05/19. +// Copyright © 2019 FOSSAsia. All rights reserved. +// + +import UIKit +import Material + +class AccountViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { + + + let delegate = UIApplication.shared.delegate as? AppDelegate + + lazy var backButton: IconButton = { + let ib = IconButton() + ib.image = Icon.cm.arrowBack + ib.tintColor = .white + ib.addTarget(self, action: #selector(dismissView), for: .touchUpInside) + return ib + }() + + lazy var settingsButton: IconButton = { + let ib = IconButton() + ib.image = Icon.check + ib.tintColor = .white + ib.layer.cornerRadius = 18.0 + ib.addTarget(self, action: #selector(settingButtonClicked), for: .touchUpInside) + return ib + }() + + var picker = UIPickerView() + + var preferredLanguage = ["Armenian (am-AM)","Chinese (zh-CH)","Deutsch (de-DE)"," Greek (gr-GR)","Hindi (hi-IN) ","Punjabi (pb-IN)","Nepali (np-NP)","Russian (ru-RU)","Spanish (es-SP)","French (fr-FR)","apanese (jp-JP) ","Dutch (nl-NL)","US Eng (en-US)"] + + @IBOutlet weak var outerView: UIView! + @IBOutlet weak var uploadAvatarButton: UIButton! + @IBOutlet weak var deleteAccountButton: UIButton! + @IBOutlet weak var prefLanguageTextField: TextField! + @IBOutlet weak var phoneNumberTextField: TextField! + @IBOutlet weak var userNameTextField: TextField! + @IBOutlet weak var userEmailLabel: UILabel! + @IBOutlet weak var userAvatarImageView: UIImageView! + + override func viewDidLoad() { + super.viewDidLoad() + setupTitle() + setUpUserDetails() + addDelegates() + } + + //UIPickerView Deledate Functions + + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + return preferredLanguage.count + } + + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { + return preferredLanguage[row] + } + + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { + prefLanguageTextField.text = preferredLanguage[row] + self.view.endEditing(false) + } + +} diff --git a/Susi/Controllers/SettingsController/SettingsVCMethods.swift b/Susi/Controllers/SettingsController/SettingsVCMethods.swift index af79863b..c4ec6a01 100644 --- a/Susi/Controllers/SettingsController/SettingsVCMethods.swift +++ b/Susi/Controllers/SettingsController/SettingsVCMethods.swift @@ -120,6 +120,15 @@ extension SettingsViewController { let nvc = AppNavigationController(rootViewController: vc) present(nvc, animated: true, completion: nil) } + + // Present Account View Controller + + func presentAccountController() { + let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) + let vc = mainStoryboard.instantiateViewController(withIdentifier: "AccountViewController") + let nvc = AppNavigationController(rootViewController: vc) + present(nvc, animated: true, completion: nil) + } func presentDeviceActivity() { if let delegate = UIApplication.shared.delegate as? AppDelegate, delegate.currentUser != nil { diff --git a/Susi/Controllers/SettingsController/SettingsViewController.swift b/Susi/Controllers/SettingsController/SettingsViewController.swift index dacb2f3d..d027439a 100644 --- a/Susi/Controllers/SettingsController/SettingsViewController.swift +++ b/Susi/Controllers/SettingsController/SettingsViewController.swift @@ -134,7 +134,7 @@ class SettingsViewController: UITableViewController { if user == nil { presentLoginScreen() } else { - // Will Connect to the Account Section. + presentAccountController() } } else if row == 1 { presentResetPasswordController() @@ -176,10 +176,14 @@ class SettingsViewController: UITableViewController { if indexPath.section == 6 && indexPath.row == 0 { let imageURL = URL(string: SettingsViewController.getAvatarPath((user?.accessToken)!) ) userImage.kf.setImage(with: imageURL) - userEmailTitle.text = user?.emailID + if UserDefaults.standard.object(forKey: ControllerConstants.SettingParams.userName) == nil { + userEmailTitle.text = user?.emailID + } else { + userEmailTitle.text = UserDefaults.standard.object(forKey: ControllerConstants.SettingParams.userName) as? String + } roundedCorner() //Since account VC not available so, cell should be inactive - cell.isUserInteractionEnabled = false + cell.isUserInteractionEnabled = true } } } diff --git a/Susi/Helpers/ControllerConstants.swift b/Susi/Helpers/ControllerConstants.swift index 39cad6fd..52e264d5 100644 --- a/Susi/Helpers/ControllerConstants.swift +++ b/Susi/Helpers/ControllerConstants.swift @@ -315,6 +315,16 @@ class ControllerConstants { static let unBookmarkSuccessMessage = "Bookmark Removed Successfully" } + struct SettingParams { + static let userName = "userName" + static let phoneNumber = "phoneNo" + static let prefLanguage = "prefLanguage" + static let timeZone = "timeZone" + static let accessToken = "access_token" + static let count = "count" + static let title = "Account Settings" + } + } diff --git a/Susi/Storyboards/Main.storyboard b/Susi/Storyboards/Main.storyboard index e8ad457c..ed609632 100644 --- a/Susi/Storyboards/Main.storyboard +++ b/Susi/Storyboards/Main.storyboard @@ -1,11 +1,11 @@ - + - + @@ -320,7 +320,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -368,7 +368,7 @@ - + @@ -418,7 +418,7 @@ - + @@ -442,7 +442,7 @@ @@ -532,40 +532,40 @@ - + - + - +