// // SettingViewController.swift // GMERemittance // // Created by Sujal on 2/18/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import Localize_Swift import SDWebImage import SafariServices class SettingViewController: UIViewController { struct StringConstants { var changePasswordText = "change_password_text".localized() var changePINText = "changepin_text".localized() var settingText = "setting_text".localized() var languageText = "language_text".localized() } var languages: [SendMoneyCountryViewModel] = [] private var multiMediaManager: MultiMediaManager? var selectedLanguage: SendMoneyCountryViewModel? { didSet { let code = selectedLanguage?.code ?? "en" if code == "lk" { Localize.setCurrentLanguage("si") } else if code == "kh" { Localize.setCurrentLanguage("km") } else if code == "kr" { Localize.setCurrentLanguage("ko") } else if code == "mm" { Localize.setCurrentLanguage("my") } else if code == "bd" { Localize.setCurrentLanguage("bn") } else if code == "np" { Localize.setCurrentLanguage("ne") } else if code == "ru" { Localize.setCurrentLanguage("ru-RU") } else if code == "vn" { Localize.setCurrentLanguage("vi-VN") } else if code == "pk" { Localize.setCurrentLanguage("ur-PK") }else if code == "jp" { Localize.setCurrentLanguage("ja") } else if code == "ja" { Localize.setCurrentLanguage("ja") } else { Localize.setCurrentLanguage(code) } print("code: \(code)") GMEDB.shared.app.set(code, .firstTimeLanguageIsSet) configureLanguage() appDelegate.reload() } } var status: Bool! // @IBOutlet weak var settingLabel: UILabel! // @IBOutlet weak var changePasswordButton: UIButton! // @IBOutlet weak var useBiometricAuthLabel: UILabel! // @IBOutlet weak var settingButton: UIButton! @IBOutlet weak var useBiometricAuthSwitch: UISwitch! @IBOutlet weak var settingTopBackgroundView: UIView! @IBOutlet weak var profileImage: UIImageView! { didSet { profileImage.clipsToBounds = true profileImage.layer.cornerRadius = profileImage.frame.width/2 profileImage.sizeToFit() } } @IBOutlet weak var pinView: UIView! { didSet{ pinView.clipsToBounds = true pinView.layer.cornerRadius = pinView.frame.width/2 } } @IBOutlet weak var verifiedImage: UIImageView! @IBOutlet weak var renewIdView: UIStackView! @IBOutlet weak var loyaltyPointsView: UIStackView! @IBOutlet weak var referAndEarnView: UIStackView! @IBOutlet weak var copyButton: UIButton! @IBOutlet weak var paymentInfoStackView: UIStackView! @IBOutlet weak var languageStackView: UIStackView! @IBOutlet weak var accountStatementStackView: UIStackView! @IBOutlet weak var changePinStackView: UIStackView! @IBOutlet weak var changePasswordStackView: UIStackView! @IBOutlet weak var biometricsStackView: UIStackView! @IBOutlet weak var contactStackView: UIStackView! @IBOutlet weak var aboutStackView: UIStackView! @IBOutlet weak var usernameLabel: UILabel! @IBOutlet weak var verificationStatusButton: UIButton! @IBOutlet weak var accountNumberLabel: UILabel! @IBOutlet weak var emailLabel: UILabel! @IBOutlet weak var profileLabel: UILabel! @IBOutlet weak var accountLabel: UILabel! @IBOutlet weak var accountTitleLabel: UILabel! @IBOutlet weak var accountDetailLabel: UILabel! @IBOutlet weak var loyaltyPointsLabel: UILabel! @IBOutlet weak var referTitleLabel: UILabel! @IBOutlet weak var rewardPointLabel: UILabel! @IBOutlet weak var paymentInfoLabel: UILabel! @IBOutlet weak var viewLinkedCardLabel: UILabel! @IBOutlet weak var renewIdLabel: UILabel! @IBOutlet weak var langSelectionLabel: UILabel! @IBOutlet weak var accountStatementLabel: UILabel! @IBOutlet weak var changePinLabel: UILabel! @IBOutlet weak var changePasswordLabel: UILabel! @IBOutlet weak var enableBiometricLabel: UILabel! @IBOutlet weak var fingerPrintLabel: UILabel! @IBOutlet weak var supportLabel: UILabel! @IBOutlet weak var contactUsLabel: UILabel! @IBOutlet weak var aboutUsLabel: UILabel! @IBOutlet weak var logoutLabel: UIButton! @IBOutlet weak var privacyPolicyLabel: UIButton! @IBOutlet weak var termsLabel: UIButton! @IBOutlet weak var fraudGuranteeLabel: UIButton! @IBOutlet weak var basicInformationLabel: UILabel! @IBOutlet weak var securitySettingsLabel: UILabel! @IBOutlet weak var roundview: UIView! @IBAction func logoutTapped(_ sender: UIButton) { alertWithOkCancel( type: .normal, message: "logout_confirmation_text".localized(), title: "logout_text".localized(), okTitle: "yes_text".localized(), cancelTitle: "no_text".localized(), okAction: { MainWireframe.logout() } ) } @IBAction func uploadProfileTapped(_ sender: UIButton) { self.multiMediaManager?.openPicker(mode: UIImagePickerController.CameraCaptureMode.photo) } @IBAction func privacyPolicy(_ sender: UIButton) { let urlString = "https://japanremit.com/Website/PrivacyPolicy" showTutorial(url: urlString) } @IBAction func termsAndConditions(_ sender: UIButton) { let urlString = "https://www.japanremit.com/Website/TermsAndConditions" showTutorial(url: urlString) } @IBAction func fraudGuranteePolicy(_ sender: UIButton) { let urlString = "https://japanremit.com/Website/FraudGuaranteePolicy" showTutorial(url: urlString) } @IBAction func copyAccountNumber(_ sender: UIButton) { UIPasteboard.general.string = GMEDB.shared.user.string(.walletNumber) ?? "" if let textString = UIPasteboard.general.string { print("paste:\(textString)") showToast(message: "Copied to clipboard", font: .sanfrancisco(.medium, size: 12)) } } override func viewDidLoad() { super.viewDidLoad() let isVerified = GMEDB.shared.user.string(.verified) ?? "" if (isVerified != "1") { // verificationStatusButton.isHidden = true verifiedImage.isHidden = true } NotificationCenter.default.addObserver( self, selector: #selector(setText), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil ) roundview.rounded() setTapGestures() usernameLabel.text = GMEDB.shared.user.string(.firstName) ?? "" accountNumberLabel.text = GMEDB.shared.user.string(.mobileNumber) ?? "" emailLabel.text = GMEDB.shared.user.string(.email) ?? "" multiMediaManager = MultiMediaManager(presenter: self) multiMediaManager?.delegate = self let image = GMEDB.shared.user.string(.profileImage) ?? "" profileImage.sd_setImage(with: URL(string: image), placeholderImage: UIImage(named: "round-person")) setupLanguages() let userBiometricAuth = (KeyChain.shared.get(key: .biometricAuth) ?? "0" ) == "1" ? true : false self.useBiometricAuthSwitch.setOn(userBiometricAuth, animated: true) self.useBiometricAuthSwitch.onTintColor = .themeBlue self.useBiometricAuthSwitch.addTarget( self, action: #selector(self.changeBiometricAuthSwitch(_:)), for: .valueChanged ) // settingTopBackgroundView.backgroundColor = .themeRed } func configureLanguage() { basicInformationLabel.text = "baisc_information".localized() profileLabel.text = "profile_title_text".localized() accountTitleLabel.text = "jme_wallet_no_text_1".localized() accountDetailLabel.text = GMEDB.shared.user.string(.walletNumber) ?? "" referTitleLabel.text = "refer_and_earn_text".localized() rewardPointLabel.text = (GMEDB.shared.user.string(.rewardPoints) ?? "") + " " + "reward_point_text".localized().lowercased() renewIdLabel.text = "renewId_text".localized() loyaltyPointsLabel.text = "loyalty_points".localized() paymentInfoLabel.text = "payment_information".localized() viewLinkedCardLabel.text = "how_to_deposit_text".localized() accountLabel.text = "account".localized() langSelectionLabel.text = "language_selection".localized() accountStatementLabel.text = "jme_account_statement_text".localized() securitySettingsLabel.text = "security_setting".localized() changePinLabel.text = "changepin_text".localized() enableBiometricLabel.text = "enable_biometrics".localized() fingerPrintLabel.text = "use_fingerprint_for_login".localized() supportLabel.text = "support_text".localized() contactUsLabel.text = "contact_us".localized() aboutUsLabel.text = "about_us".localized() logoutLabel.setTitle("logout_text".localized(), for: .normal) fraudGuranteeLabel.setTitle("fraud_guarantee_policy_text".localized(), for: .normal) logoutLabel.backgroundColor = .lightBlueColor changePasswordLabel.text = "change_password_text".localized() privacyPolicyLabel.setTitle("privacyAndPolicy_text".localized(), for: .normal) termsLabel.setTitle("terms_and_condition_title_text".localized(), for: .normal) } func showTutorial(url: String) { if let url = URL(string: url) { let config = SFSafariViewController.Configuration() config.entersReaderIfAvailable = false let vc = SFSafariViewController(url: url, configuration: config) present(vc, animated: true) } } @objc func changeBiometricAuthSwitch(_ sender: UISwitch) { // let isOn = sender.isOn ? "1" : "0" status = sender.isOn ? true : false let password = KeyChain.shared.get(key: .password) ?? "" // if status { guard let viewController = UIStoryboard(name: "PasswordConfirmation", bundle: nil) .instantiateViewController(withIdentifier: "PasswordConfirmViewController") as? PasswordConfirmViewController else { return } viewController.delegate = self self.present(viewController, animated: true, completion: nil) /* } else { APIRouter.changeBioSwitch(isBio: status, password: password).request( needsAuthorization: true, success: { (response: ResponseMessage) in if (response.errorCode ?? "") == "1" { let error = NSError(domain: "Network", code: 0, message: response.message ?? "") print(error.localizedDescription) self.alertWithOk(type: .error, message: error.localizedDescription, title: "Error", okTitle: "ok_text".localized()) { self.dismiss(animated: true, completion: nil) } } else { let defaults = UserDefaults.standard defaults.register(defaults: ["bioAcessCode" : ""]) defaults.set(response.id, forKey: "bioAcessCode") if sender.isOn { BiometricAuthenticationWireframe().showBiometricAuthentication { error in if error != nil { DispatchQueue.main.async { self.alert(type: .error, message: error!.message) self.useBiometricAuthSwitch.setOn(false, animated: true) } } else { KeyChain.shared.save(data: isOn, key: .biometricAuth) } } } else { KeyChain.shared.save(data: isOn, key: .biometricAuth) } } }, failure: { error in self.alertWithOk(type: .error, message: error.localizedDescription, title: "Error", okTitle: "ok_text".localized()) { self.dismiss(animated: true, completion: nil) } } ) }*/ } @objc func setText() { profileLabel.text = "profile_title_text".localized() accountTitleLabel.text = "account_number_text".localized() renewIdLabel.text = "renewId_text".localized() changePasswordLabel.text = "change_password_text".localized() privacyPolicyLabel.setTitle("privacyAndPolicy_text".localized(), for: .normal) termsLabel.setTitle("terms_and_condition_title_text".localized(), for: .normal) } func setTapGestures() { let paymentInfo = UITapGestureRecognizer(target: self, action: #selector(self.paymentInfo(_:))) paymentInfoStackView.addGestureRecognizer(paymentInfo) let loyaltyPoints = UITapGestureRecognizer(target: self, action: #selector(self.loyaltyInfo(_:))) loyaltyPointsView.addGestureRecognizer(loyaltyPoints) let referAndEarn = UITapGestureRecognizer(target: self, action: #selector(self.referAndEarn(_:))) referAndEarnView.addGestureRecognizer(referAndEarn) let accountStatementTap = UITapGestureRecognizer(target: self, action: #selector(self.accountStatement(_:))) accountStatementStackView.addGestureRecognizer(accountStatementTap) let renewId = UITapGestureRecognizer(target: self, action: #selector(self.renewId(_:))) renewIdView.addGestureRecognizer(renewId) let languageSelectionGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showCountryPickerview(_:))) languageStackView.addGestureRecognizer(languageSelectionGuesture) let changePin = UITapGestureRecognizer(target: self, action: #selector(self.changePin(_:))) changePinStackView.addGestureRecognizer(changePin) let changePassword = UITapGestureRecognizer(target: self, action: #selector(self.changePassword(_:))) changePasswordStackView.addGestureRecognizer(changePassword) let contactUs = UITapGestureRecognizer(target: self, action: #selector(self.contactUsTapped(_:))) contactStackView.addGestureRecognizer(contactUs) let aboutUs = UITapGestureRecognizer(target: self, action: #selector(self.aboutUsTapped(_:))) aboutStackView.addGestureRecognizer(aboutUs) } @objc func loyaltyInfo(_ sender: UITapGestureRecognizer) { if let naviVC = navigationController { LoyalityPointsWireframe().pushMainView(in: naviVC) } } @objc func referAndEarn(_ sender: UITapGestureRecognizer) { if let naviVC = navigationController { InviteUserWireframe().pushMainView(in: naviVC) } } @objc func accountStatement(_ sender: UITapGestureRecognizer) { if let naviVC = navigationController { WalletStatementWireframe().pushMainView(in: naviVC) } } @objc func renewId(_ sender: UITapGestureRecognizer) { RenewIDWireframe().pushMainView(on: self) } @objc func paymentInfo(_ sender: UITapGestureRecognizer) { if let naviVC = navigationController { HowToDepositWireframe().pushMainView(in: naviVC) } } @objc private func showCountryPickerview(_ sender: UITapGestureRecognizer) { setupLanguages() TablePresenterWireframe().openWith( delegate: self, model: languages, source: self ) } @objc func changePin(_ sender: UITapGestureRecognizer) { guard let viewController = UIStoryboard(name: "Profile", bundle: nil) .instantiateViewController(withIdentifier: "changePin") as? ProfileChangePinViewController else { return } self.push(viewController, animated: true) } @objc func changePassword(_ sender: UITapGestureRecognizer) { guard let viewController = UIStoryboard(name: "Profile", bundle: nil) .instantiateViewController(withIdentifier: "changePassword") as? ProfileChangePasswordViewController else { return } self.push(viewController, animated: true) } @objc func contactUsTapped(_ sender: UITapGestureRecognizer) { support() } @objc func aboutUsTapped(_ sender: UITapGestureRecognizer) { guard let viewController = UIStoryboard(name: "SideMenu", bundle: nil) .instantiateViewController(withIdentifier: "AboutGMEViewController") as? AboutGMEViewController else { return } self.push(viewController, animated: true) } func support() { let actionArray = [ActionSheetElement(title: "Facebook", id: "https://m.facebook.com/jmeremit/", icon: "Facebook"), ActionSheetElement(title: "03-5475-3913", id: "tel://0354753913", icon: "contact")] if UIDevice.current.userInterfaceIdiom == .pad { ActionSheetHelper.shared.openWith(parentVc: self, button: nil, title: "help_you_text".localized(), values: actionArray) { (element) in UIApplication.tryURL(url: element.id) } } else { ActionSheetHelper.shared.open(parentVc: self, title: "help_you_text".localized(), values: actionArray) { (element) in UIApplication.tryURL(url: element.id) } } } func setupLanguages() { self.languages = Utility.getLanguages() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) configureLanguage() self.navigationController?.navigationBar.isHidden = true } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } func countrySelected(models: [SendMoneyCountryViewModel]) { self.selectedLanguage = models.first } func saveProfileInfo(image: UIImage, success: @escaping (String) -> Void, failure: @escaping (Error) -> Void ) { APIRouter.uploadProfile .requestMultipart( images: getImageParams(model: image), needsAuthorization: true, success: { (response: KYCResponseContainer) in if (response.errorCode ?? "") == "1" { let error = NSError( domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] ) failure(error) } else { guard let message = response.message else { return } success(message) } }, failure: failure) } private func getImageParams(model: UIImage) -> [String: Data] { var images: [String: Data] = [:] if let data = model.pngData() { images["CustomerProfile"] = data } return images } } extension SettingViewController: ConfirmPasswordDelegate { func confirm(password: String) { APIRouter.changeBioSwitch(isBio: self.status, password: password).request( needsAuthorization: true, success: { (response: ResponseMessage) in if (response.errorCode ?? "") == "1" { let error = NSError(domain: "Network", code: 0, message: response.message ?? "") print(error.localizedDescription) self.alertWithOk(type: .error, message: error.localizedDescription, title: "Error", okTitle: "ok_text".localized()) { self.useBiometricAuthSwitch.setOn(!self.status, animated: true) self.dismiss(animated: true, completion: nil) } } else { let defaults = UserDefaults.standard defaults.register(defaults: ["bioAcessCode" : ""]) defaults.set(response.id, forKey: "bioAcessCode") if self.status { BiometricAuthenticationWireframe().showBiometricAuthentication { error in if error != nil { DispatchQueue.main.async { self.alert(type: .error, message: error!.message) self.useBiometricAuthSwitch.setOn(!self.status, animated: true) } } else { KeyChain.shared.save(data: self.status ? "1" : "0", key: .biometricAuth) } } } else { KeyChain.shared.save(data: self.status ? "1" : "0", key: .biometricAuth) } } }, failure: { error in self.alertWithOk(type: .error, message: error.localizedDescription, title: "Error", okTitle: "ok_text".localized()) { self.useBiometricAuthSwitch.setOn(!self.status, animated: true) self.dismiss(animated: true, completion: nil) } } ) } func cancel() { self.useBiometricAuthSwitch.setOn(!self.status, animated: true) } } extension SettingViewController: TablePresenterDelegate { func tablePresenterView(_ viewController: TablePresenterViewController) -> TablePresenterConfiguration { return TablePresenterConfiguration( presenterTitle: "select_country_text".localized(), closeButtonTitle: "cancel_text".localized(), notFoundTitle: "no_result_found_text".localized(), searchBarPlaceHolder: "search_country_text".localized() ) } func tablePresenterView( _ viewController: TablePresenterViewController, didSelectModel model: TablePresenterProtocol? ) { self.selectedLanguage = (model as? SendMoneyCountryViewModel) ?? self.selectedLanguage } } extension SettingViewController: MultimediaPresenterProtocol { func presenting() -> UIViewController { return self } } extension SettingViewController: MultiMediaManagerDelegate { func didFinishPickingWithImage(image: UIImage) { self.showProgressHud() saveProfileInfo(image: image, success: { msg in self.hideProgressHud() self.alertWithOk(type: .success, message: msg, title: nil, okTitle: "OK", okAction: { self.profileImage.image = image self.navigationController?.popViewController(animated: true) }) }, failure: { error in self.hideProgressHud() self.alert(message: error.localizedDescription) }) } func didFinishPickingWithError(error: String) { self.alert(type: .error, message: error) } func hideBorder(view: UIView?) { view?.layer.borderWidth = 0 view?.layer.addShadow(with: .clear) } }