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.
 
 
 
 

575 lines
24 KiB

//
// 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".localized()
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)
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)
}
}