james
6 years ago
9 changed files with 0 additions and 1497 deletions
-
BINGMERemittance/Module/GmeContacts/.DS_Store
-
BINGMERemittance/Module/GmeContacts/User Interface/View/.DS_Store
-
216GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController 2.swift
-
BINGMERemittance/Module/Home/User Interface/View/.DS_Store
-
731GMERemittance/Module/Home/User Interface/View/HomeViewController 2.swift
-
BINGMERemittance/Module/Main/User Interface/View/.DS_Store
-
176GMERemittance/Module/Main/User Interface/View/MainViewController 2.swift
-
BINGMERemittance/Module/Register/User Interface/View/.DS_Store
-
374GMERemittance/Module/Register/User Interface/View/RegisterViewController 2.swift
@ -1,216 +0,0 @@ |
|||
// |
|||
// GmeContactsViewController.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 25/08/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import Localize_Swift |
|||
|
|||
class GmeContactsViewController: UIViewController { |
|||
|
|||
|
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet weak var tableview: UITableView! |
|||
|
|||
var presenter: GmeContactsModuleInterface? |
|||
var contacts: [GmeContacts] = [] { |
|||
didSet { |
|||
self.tableview.reloadData() |
|||
} |
|||
} |
|||
|
|||
// MARK: Properties |
|||
|
|||
|
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
self.viperSetup() // since the viewcontroller in the tabbar is in strong bind with storyboard and segue |
|||
self.setup() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
self.setLargeTitle() |
|||
self.navigationItem.title = "branch_text".localized() |
|||
|
|||
} |
|||
|
|||
// MARK: IBActions |
|||
|
|||
// MARK: Other Functions |
|||
|
|||
private func setup() { |
|||
self.tableview.dataSource = self |
|||
self.tableview.delegate = self |
|||
// all setup should be done here |
|||
|
|||
self.createTestContacts() |
|||
NotificationCenter.default.addObserver(self, selector: #selector(setupTabItem), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil) |
|||
} |
|||
|
|||
struct StringConstants { |
|||
|
|||
} |
|||
|
|||
|
|||
private func createTestContacts() { |
|||
// let headOfficeContacts = GmeContacts() |
|||
// headOfficeContacts.title = "Head Office" |
|||
// headOfficeContacts.address = "325, Jong-ro, Jongno-gu, 03104 Seoul" |
|||
// headOfficeContacts.contactNumber = ["15886864"] |
|||
// headOfficeContacts.language = "Korean Language Support" |
|||
|
|||
let dongdaemunBranchContacts = GmeContacts() |
|||
dongdaemunBranchContacts.title = "Dongdaemun Branch" |
|||
dongdaemunBranchContacts.address = "315, Jong-ro Jongno-gu, Seoul \n(Dongdaemun Station - Exit 3) \n 서울시 종로구 종로 315" |
|||
dongdaemunBranchContacts.contactNumber = ["027635559"] |
|||
|
|||
|
|||
|
|||
let hwaseongBranchContacts = GmeContacts() |
|||
hwaseongBranchContacts.title = "Hwaseong Branch" |
|||
hwaseongBranchContacts.address = "1101-1, 3.1 Manse-ro Hyangnam-eup, Hwaseong-si, Gyeonggi-do \n(Baran Market Place) \n 경기도 화성시 향남읍 3.1만세로 1101-1" |
|||
hwaseongBranchContacts.contactNumber = ["0313540450"] |
|||
|
|||
|
|||
let ansanBranchContacts = GmeContacts() |
|||
ansanBranchContacts.title = "Ansan Branch" |
|||
ansanBranchContacts.address = "2nd floor, 455, Jungang-daero, Danwon-gu, Ansan -si, Gyeonggi-do \n(Entrance of Asian Street) \n 경기도 안산시 단원구 중앙대로 455 2층" |
|||
ansanBranchContacts.contactNumber = ["0313626740"] |
|||
|
|||
|
|||
let gimhaeBranchContacts = GmeContacts() |
|||
gimhaeBranchContacts.title = "Gimhae Branch" |
|||
gimhaeBranchContacts.address = "84, Garak-ro, Gimhae-si, Gyeongsangnam-do,\n(Opposite to Top Mart) \n 경상남도 김해시 가락로 84 " |
|||
gimhaeBranchContacts.contactNumber = ["0553295559"] |
|||
|
|||
|
|||
|
|||
let songuriBranchContacts = GmeContacts() |
|||
songuriBranchContacts.title = "Songu-ri Branch" |
|||
songuriBranchContacts.address = "91, Solmoru-ro, Soheul-eup, Pocheon-si, Gyeonggi-do, Korea\nNext to Nonghyub Bank) \n 경기도 포천시 소흘읍 솔모루로 91" |
|||
songuriBranchContacts.contactNumber = ["0315411856"] |
|||
|
|||
let dongdaemunCisBranch = GmeContacts() |
|||
dongdaemunCisBranch.title = "Dongdaemun CIS Branch" |
|||
dongdaemunCisBranch.address = "2nd floor, 281, Changgyeonggunag-ro Jongno-gu, Seoul\n(Upper floor of Dongdaemun Mart) \n 서울 중구 을지로 42길 5 2층" |
|||
dongdaemunCisBranch.contactNumber = ["0221386429", "01030156864"] |
|||
|
|||
|
|||
let hyehwaBranch = GmeContacts() |
|||
hyehwaBranch.title = "Hyehwa Branch" |
|||
hyehwaBranch.address = "281, Changgyeonggung-ro, Jongno-gu, Seoul Hyehwa Rotary\n(Right across from Catholic Church) \n 서울특별시 종로구 창경궁로 281" |
|||
hyehwaBranch.contactNumber = ["0221386429", "01029706864"] |
|||
|
|||
|
|||
let gmeContacts = [dongdaemunCisBranch, dongdaemunBranchContacts, hwaseongBranchContacts, ansanBranchContacts, gimhaeBranchContacts, songuriBranchContacts, hyehwaBranch] |
|||
self.contacts = gmeContacts |
|||
|
|||
} |
|||
|
|||
private func call(number: String) { |
|||
let number = number.removeWhitespacesInBetween() |
|||
if let url = URL(string: "tel://\(number)") { |
|||
if UIApplication.shared.canOpenURL(url) { |
|||
UIApplication.shared.openURL(url) |
|||
} |
|||
} |
|||
} |
|||
|
|||
override func setupTabItem() { |
|||
let image = UIImage.init(named: "ic-agent") |
|||
self.tabBarItem = UITabBarItem(title: "branch_text".localized(), image: image, selectedImage: nil) |
|||
self.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: UI_USER_INTERFACE_IDIOM() == .pad ? 2 : -6) |
|||
} |
|||
} |
|||
|
|||
// MARK: GmeContactsViewInterface |
|||
extension GmeContactsViewController: GmeContactsViewInterface { |
|||
|
|||
} |
|||
|
|||
extension GmeContactsViewController { |
|||
func viperSetup() { |
|||
let service = GmeContactsService() |
|||
let interactor = GmeContactsInteractor(service: service) |
|||
let presenter = GmeContactsPresenter() |
|||
let wireframe = GmeContactsWireframe() |
|||
|
|||
self.presenter = presenter |
|||
interactor.output = presenter |
|||
presenter.interactor = interactor |
|||
presenter.wireframe = wireframe |
|||
presenter.view = self |
|||
wireframe.view = self |
|||
} |
|||
} |
|||
|
|||
extension GmeContactsViewController: UITableViewDelegate { |
|||
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
|||
print(indexPath.row) |
|||
if indexPath.row == 0 {return 10} |
|||
return UITableViewAutomaticDimension |
|||
} |
|||
} |
|||
|
|||
|
|||
extension GmeContactsViewController: UITableViewDataSource { |
|||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|||
return contacts.count + 1 |
|||
} |
|||
|
|||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
|||
if indexPath.row == 0 { |
|||
let cell = tableView.dequeueReusableCell(withIdentifier: "EmptyTableViewCell") as! EmptyTableViewCell |
|||
return cell |
|||
} |
|||
|
|||
|
|||
let cell = tableView.dequeueReusableCell(withIdentifier: "GmeContactsTableViewCell") as! GmeContactsTableViewCell |
|||
cell.contact = self.contacts.elementAt(index: indexPath.row - 1) |
|||
cell.delegate = self |
|||
cell.index = indexPath.row - 1 |
|||
cell.setup() |
|||
|
|||
cell.layer.shadowColor = UIColor.darkGray.cgColor |
|||
cell.layer.shadowOpacity = 0.5 |
|||
cell.layer.shadowRadius = 2 |
|||
let offset = CGSize(width: 2, height: 2) |
|||
cell.layer.shadowOffset = offset |
|||
|
|||
return cell |
|||
} |
|||
} |
|||
|
|||
extension GmeContactsViewController: GmeContactCallDelegate { |
|||
func call(index: Int?) { |
|||
guard let index = index else {return} |
|||
if let contact = self.contacts.elementAt(index: index) { |
|||
let numbers = contact.contactNumber |
|||
|
|||
let alert = UIAlertController(title:nil, message:"help_you_text".localized(), preferredStyle: .actionSheet) |
|||
|
|||
numbers?.forEach({ number in |
|||
let action = UIAlertAction.init(title: "\(number)", style: UIAlertActionStyle.default, handler: { action in |
|||
self.call(number: number) |
|||
}) |
|||
alert.addAction(action) |
|||
}) |
|||
|
|||
alert.view.tintColor = UIColor.darkGray |
|||
|
|||
alert.addAction(UIAlertAction(title: "cancel_text".localized(), style: UIAlertActionStyle.cancel, handler: nil)) |
|||
present(alert, animated: true, completion: nil) |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
} |
@ -1,731 +0,0 @@ |
|||
// |
|||
// HomeViewController.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 21/09/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import Crashlytics |
|||
import Localize_Swift |
|||
|
|||
class HomeViewController: UIViewController, UICollectionViewDelegateFlowLayout { |
|||
|
|||
|
|||
enum Sections: Int { |
|||
case balance = 0 |
|||
case collection |
|||
} |
|||
|
|||
struct Constants { |
|||
static let verificationNoticeHeight: CGFloat = 100 |
|||
} |
|||
|
|||
struct StringConstants { |
|||
let homeText = "home_text".localized() |
|||
let registerProcessText = "complete_your_registration_text".localized() |
|||
let registrationApprovalText = "verification_in_aproval_process_text".localized() |
|||
let pennyTestPrimaryBankText = "complete_penny_test".localized() |
|||
let verifyTitleText = "kyc_fill_text".localized() |
|||
let continueRegistrationTitleText = "penny_test_pending_text".localized() |
|||
let verificationInProcessTitleText = "kyc_verify_pending_text".localized() |
|||
let soonToUseGmeServicesTitle = "verification_in_aproval_process_text".localized() |
|||
} |
|||
|
|||
// MARK: IBOutlets |
|||
@IBOutlet weak var tableView: UITableView! |
|||
@IBOutlet weak var verificationNoticeHeightConstraint: NSLayoutConstraint! |
|||
@IBOutlet var verificationNoticeView: UIView! |
|||
@IBOutlet weak var verificationCloseButton: UIButton! |
|||
@IBOutlet weak var verificationText: UILabel! |
|||
@IBOutlet var tapGuesture: UITapGestureRecognizer! |
|||
@IBOutlet weak var verificationTitleLabel: UILabel! |
|||
@IBOutlet weak var verificationHeaderLeftImageview: UIImageView! |
|||
@IBOutlet weak var verificationHeaderRightButton: UIButton! |
|||
|
|||
@IBOutlet weak var seperatorView: UIView! |
|||
// title labels |
|||
@IBOutlet weak var thankyouTitleLabel: UILabel! |
|||
|
|||
// MARK: Properties |
|||
var refreshControl: UIRefreshControl? |
|||
var presenter: HomeModuleInterface? |
|||
var user: User? { |
|||
didSet { |
|||
// update |
|||
self.save(user: user) |
|||
self.showUnverifiedNotice() |
|||
self.tableView.reloadData() |
|||
updateBalance() |
|||
self.update() |
|||
} |
|||
} |
|||
var sections: [Sections] = [.balance, .collection] |
|||
|
|||
var menuHeight: CGFloat? { |
|||
didSet { |
|||
self.tableView.reloadData() |
|||
} |
|||
} |
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
// test() |
|||
setupNavigationNotifications() |
|||
self.setup() |
|||
} |
|||
|
|||
func test() { |
|||
let web = WkWebViewController() |
|||
web.url = "http://gmeuat.gmeremit.com:5013/kftcCallback?code=b894944b-c500-4627-9cf9-9fc5fd3f2822&scope=login+inquiry+transfer&client_info=f6Qv6Xd44Q5hmkcYLNVH8w%3D%3D" |
|||
// web.url = "http://gmeuat.gmeremit.com:5013/test.html" |
|||
// self.present(web, animated: true, completion: nil) |
|||
self.navigationController?.pushViewController(web, animated: true) |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
configureViews() |
|||
self.setActionBarIcons(showNotificationParameter: false) // set true if there is unread |
|||
self.tableView.reloadData() |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(updateTabBarTitle), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil) |
|||
} |
|||
|
|||
override func viewWillDisappear(_ animated: Bool) { |
|||
super.viewWillDisappear(animated) |
|||
self.navigationItem.title = "" |
|||
} |
|||
// MARK: IBActions |
|||
|
|||
@IBAction func closeVerificationNotice(_ sender: UIButton) { |
|||
return |
|||
if #available(iOS 10.0, *) { |
|||
let animator = UIViewPropertyAnimator(duration: 0.4, curve: .easeOut ) |
|||
animator.addAnimations { |
|||
self.verificationNoticeView.alpha = 0 |
|||
} |
|||
|
|||
animator.addAnimations({ |
|||
self.verificationNoticeHeightConstraint.constant = 0 |
|||
self.view.layoutIfNeeded() |
|||
}, delayFactor: 0.5) |
|||
|
|||
animator.startAnimation() |
|||
} |
|||
} |
|||
|
|||
|
|||
// MARK: Other Functions |
|||
|
|||
private func setup() { |
|||
// all setup should be done here |
|||
setupDelegates() |
|||
setupNotifications() |
|||
configureLanguage() |
|||
self.addRefreshControlTableView() |
|||
self.presenter?.refreshData() |
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showPennyTestFirstTime), name: NSNotification.Name.init("showPennyTestFirstTime"), object: nil) |
|||
} |
|||
|
|||
@objc private func configureLanguage() { |
|||
// self.barButtonItem.title = StringConstants().homeText |
|||
} |
|||
|
|||
@objc private func showPennyTestFirstTime() { |
|||
presenter?.showPennyTest() |
|||
} |
|||
|
|||
private func update() { |
|||
let platform = self.user?.platforms ?? [] |
|||
guard let ios = platform.filter({ |
|||
$0.os ?? "" == "IOS" |
|||
|
|||
}).first else {return} |
|||
let critical = ios.critical ?? "N" |
|||
UserDefaults.standard.set(critical, forKey: AppConstants.criticalUpdate) |
|||
let version = Utility.getAppVersion() ?? "" |
|||
let val = version.components(separatedBy: ".") |
|||
let latestVersion = ios.version ?? "0" |
|||
let latestVal = latestVersion.components(separatedBy: ".").last ?? "0" |
|||
|
|||
if val.count == 3 { |
|||
if let build = val.last { |
|||
|
|||
if (Int(latestVal) ?? 0) > (Int(build) ?? 0) { |
|||
self.presenter?.showAppUpdate() |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
private func updateBalance() { |
|||
let balance = user?.availableBalance ?? "" |
|||
UserDefaults.standard.set(balance, forKey: UserKeys.availableBalance) |
|||
let userInfo = [SideMenuNavigationNotifications.availableBalance : balance] |
|||
NotificationCenter.default.post(name: self.getAvailableBalanceNotificationName(), object: nil, userInfo: userInfo) |
|||
self.tableView.reloadData() |
|||
} |
|||
|
|||
private func setupNavigationNotifications() { |
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showAutoDebit), name: self.getKftcAccountListNotificationName(), object: nil) |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showWithdraw), name: self.getWithdrawNotificationName(), object: nil) |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showSideMenuAboutGme), name: self.getAboutMeNotificationName(), object: nil) |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showSideMenuSupport), name: self.getSupportNotificationName(), object: nil) |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showSideMenuSetting), name: self.getSettingNotificationName(), object: nil) |
|||
|
|||
NotificationCenter.default.addObserver(self, selector: #selector(self.showTransactionStatement), name: self.getTransactionHistoryNotificationName(), object: nil) |
|||
} |
|||
|
|||
private func getAboutMeNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.aboutGme) |
|||
} |
|||
|
|||
private func getTransactionHistoryNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.transactionHistory) |
|||
} |
|||
|
|||
private func getSupportNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.support) |
|||
} |
|||
|
|||
private func getSettingNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.setting) |
|||
} |
|||
|
|||
@objc private func showSideMenuAboutGme() { |
|||
let vc = UIStoryboard.init(name: "_Home", bundle: nil).instantiateViewController(withIdentifier: "AboutGMEViewController") as! AboutGMEViewController |
|||
self.navigationController?.pushViewController(vc, animated: true) |
|||
} |
|||
|
|||
@objc private func showSideMenuSetting() { |
|||
let vc = UIStoryboard.init(name: "Setting", bundle: nil).instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController |
|||
self.navigationController?.pushViewController(vc, animated: true) |
|||
} |
|||
|
|||
@objc private func showSideMenuSupport() { |
|||
let vc = UIStoryboard.init(name: "_Home", bundle: nil).instantiateViewController(withIdentifier: "SupportViewController") as! SupportViewController |
|||
self.navigationController?.pushViewController(vc, animated: true) |
|||
} |
|||
|
|||
@objc private func showAutoDebit() { |
|||
let wireframe = AutoDebitWireframe() |
|||
if let navigation = self.navigationController { |
|||
wireframe.pushMainView(in: navigation) |
|||
} |
|||
} |
|||
|
|||
@objc private func showWithdraw() { |
|||
let vc = UIStoryboard.init(name: "autoRefund", bundle: nil).instantiateViewController(withIdentifier: "AutoRefundsViewController") as! AutoRefundsViewController |
|||
self.navigationController?.pushViewController(vc, animated: true) |
|||
} |
|||
|
|||
private func setupDelegates() { |
|||
tableView.delegate = self |
|||
tableView.dataSource = self |
|||
self.tapGuesture.delegate = self |
|||
} |
|||
|
|||
private func addRefreshControlTableView() { |
|||
let colorOption = [NSAttributedStringKey.foregroundColor : AppConstants.themWhiteColor]; |
|||
|
|||
let title = NSAttributedString(string: "pull to refresh", attributes: colorOption) |
|||
let refreshControl = UIRefreshControl() |
|||
refreshControl.attributedTitle = title |
|||
refreshControl.backgroundColor = AppConstants.themeBlueColor |
|||
refreshControl.tintColor = AppConstants.themWhiteColor |
|||
refreshControl.addTarget(self, action: #selector(self.refresh), for: .valueChanged) |
|||
self.refreshControl = refreshControl |
|||
if #available(iOS 10.0, *) { |
|||
tableView.refreshControl = self.refreshControl |
|||
} else { |
|||
if let control = self.refreshControl { |
|||
tableView.addSubview(control) |
|||
} |
|||
} |
|||
} |
|||
|
|||
@objc private func refresh() { |
|||
presenter?.refreshData() |
|||
} |
|||
|
|||
@objc func showNotification(){ |
|||
performSegue(withIdentifier: "notification", sender: nil) |
|||
} |
|||
|
|||
@objc func showSupport() { |
|||
let alert = UIAlertController(title:nil, message:"help_you_text".localized(), preferredStyle: .actionSheet) |
|||
// alert.view.subviews.last?.subviews.last?.backgroundColor = UIColor.darkGray |
|||
|
|||
let liveChat = UIAlertAction(title: "Live Chat", style: .default) { |
|||
UIAlertAction in |
|||
} |
|||
let contactNumber = UIAlertAction(title: "1588 6864", style: .default) { |
|||
UIAlertAction in |
|||
self.startCall(contactNumber: "1588 6864") |
|||
} |
|||
let supportEmail = UIAlertAction(title: "support@gmeremit.com", style: .default) { |
|||
UIAlertAction in |
|||
let storyboard = UIStoryboard.init(name: "MessageCompose", bundle: Bundle.main) |
|||
if let messageViewController = storyboard.instantiateViewController(withIdentifier: "message") as? MessageComposeViewController { |
|||
self.navigationController!.pushViewController(messageViewController, animated: true) |
|||
} |
|||
} |
|||
|
|||
liveChat.setValue(UIImage(named:"ic_live_chat")?.withRenderingMode(.alwaysOriginal),forKey:"image") |
|||
contactNumber.setValue(UIImage(named:"ic_call")?.withRenderingMode(.alwaysOriginal),forKey:"image") |
|||
supportEmail.setValue(UIImage(named:"ic_email")?.withRenderingMode(.alwaysOriginal),forKey:"image") |
|||
|
|||
// TODO: have to enable when zendesk is provided |
|||
// alert.addAction(liveChat) |
|||
alert.addAction(contactNumber) |
|||
// alert.addAction(supportEmail) |
|||
alert.view.tintColor = UIColor.darkGray |
|||
|
|||
// alert.view.subviews.last?.subviews.last?.layer.cornerRadius = 10 |
|||
|
|||
alert.addAction(UIAlertAction(title: "cancel_text".localized(), style: UIAlertActionStyle.cancel, handler: nil)) |
|||
present(alert, animated: true, completion: nil) |
|||
} |
|||
|
|||
|
|||
func startCall(contactNumber: String){ |
|||
if let url = URL(string: "tel://\(contactNumber.removeWhitespacesInBetween())"), UIApplication.shared.canOpenURL(url) { |
|||
if #available(iOS 10, *) { |
|||
UIApplication.shared.open(url) |
|||
} else { |
|||
UIApplication.shared.openURL(url) |
|||
} |
|||
} |
|||
} |
|||
|
|||
private func setupNotifications() { |
|||
let center = NotificationCenter.default |
|||
center.addObserver(self, selector: #selector(self.showSendMoney), name: self.getSendMoneyNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.showMobileRecharge), name: self.getMobileRechargeNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.showTodaysRate), name: self.getTodaysRateNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.showResendMoney), name: self.getTrackYourTransferNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.showTrackYourTransfer), name: self.getTransactionStatementNotificationName(), object: nil) |
|||
// center.addObserver(self, selector: #selector(self.showResendMoney), name: self.getWalletToWalletNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.setupHeight(sender:)), name: self.getCollectionHeightNotificationName(), object: nil) |
|||
center.addObserver(self, selector: #selector(self.showUnVerifiedMessage), name: self.getMainControllerNotificationName(), object: nil) |
|||
|
|||
} |
|||
|
|||
func setActionBarIcons(showNotificationParameter: Bool){ |
|||
let supportImage = UIImage(named: "ic_support")?.withRenderingMode(.alwaysOriginal) |
|||
let supportButton = UIBarButtonItem(image:supportImage, style: .plain, target: self, action: #selector(showSupport)) |
|||
let notificationImage: UIImage! |
|||
if showNotificationParameter { |
|||
notificationImage = UIImage(named: "ic_notificationDot")?.withRenderingMode(.alwaysOriginal) |
|||
} else { |
|||
notificationImage = UIImage(named: "ic_notification")?.withRenderingMode(.alwaysOriginal) |
|||
} |
|||
let notificationButton = UIBarButtonItem(image: notificationImage, style: .plain, target: self, action: #selector(showNotification)) |
|||
// self.navigationItem.rightBarButtonItems=[notificationButton,supportButton] |
|||
self.navigationItem.rightBarButtonItems = [supportButton] |
|||
} |
|||
|
|||
private func showUnverifiedNotice() { |
|||
setVerificationText() |
|||
if shouldShowUnverifiedNotice() { |
|||
UIView.animate(withDuration: 0.33) { |
|||
self.verificationNoticeHeightConstraint.constant = Constants.verificationNoticeHeight |
|||
self.verificationNoticeView.alpha = 1 |
|||
self.view.layoutIfNeeded() |
|||
} |
|||
}else { |
|||
self.verificationNoticeHeightConstraint.constant = 0 |
|||
self.verificationNoticeView.alpha = 0 |
|||
self.view.layoutIfNeeded() |
|||
} |
|||
} |
|||
|
|||
|
|||
private func setVerificationText() { |
|||
// && Utility.didPennyTestNotInitiated() |
|||
if didNotSubmitKycAndNotVerified() { |
|||
verificationTitleLabel.text = StringConstants().verifyTitleText |
|||
self.verificationText.text = StringConstants().registerProcessText |
|||
self.verificationHeaderLeftImageview.image = UIImage.init(named: "ic_home_verified") |
|||
let image = UIImage.init(named: "ic_home_payoutLocation") |
|||
self.verificationHeaderRightButton.setImage(image, for: UIControlState.normal) |
|||
}else if didSubmitKycAndNotVerified() && shouldShowPennyTestError() { |
|||
verificationTitleLabel.text = StringConstants().continueRegistrationTitleText |
|||
self.verificationText.text = StringConstants().pennyTestPrimaryBankText |
|||
self.verificationHeaderLeftImageview.image = #imageLiteral(resourceName: "shield.png") |
|||
self.verificationNoticeHeightConstraint.constant = Constants.verificationNoticeHeight |
|||
self.verificationNoticeView.alpha = 1 |
|||
self.verificationHeaderRightButton.isHidden = true |
|||
} |
|||
else if didSubmitKycAndNotVerified() { |
|||
verificationTitleLabel.text = StringConstants().verificationInProcessTitleText |
|||
self.verificationText.text = StringConstants().soonToUseGmeServicesTitle |
|||
self.verificationHeaderLeftImageview.image = #imageLiteral(resourceName: "ic_home_verified") |
|||
self.verificationHeaderRightButton.setImage(#imageLiteral(resourceName: "ic_home_payoutLocation"), for: UIControlState.normal) |
|||
} |
|||
|
|||
if didSubmitKycAndVerified() && !Utility.pennyTestVerified() { |
|||
verificationTitleLabel.text = StringConstants().continueRegistrationTitleText |
|||
self.verificationText.text = StringConstants().pennyTestPrimaryBankText |
|||
self.verificationHeaderLeftImageview.image = #imageLiteral(resourceName: "shield.png") |
|||
self.verificationNoticeHeightConstraint.constant = Constants.verificationNoticeHeight |
|||
self.verificationNoticeView.alpha = 1 |
|||
self.verificationHeaderRightButton.isHidden = true |
|||
} |
|||
|
|||
if didSubmitKycAndVerified() && Utility.pennyTestVerified() { |
|||
self.verificationNoticeHeightConstraint.constant = 0 |
|||
self.verificationNoticeView.alpha = 0 |
|||
} |
|||
} |
|||
|
|||
private func didSubmitKycAndNotVerified() -> Bool { |
|||
return Utility.didSubmitKyc() && !Utility.isVerifiedUser() |
|||
} |
|||
|
|||
private func didSubmitKycAndVerified() -> Bool { |
|||
return Utility.didSubmitKyc() && Utility.isVerifiedUser() |
|||
} |
|||
|
|||
private func didNotSubmitKycAndNotVerified() -> Bool { |
|||
return !Utility.didSubmitKyc() && !Utility.isVerifiedUser() |
|||
} |
|||
|
|||
private func shouldShowPennyTestError() -> Bool { |
|||
return Utility.shouldShowPennyTestError() |
|||
} |
|||
|
|||
|
|||
|
|||
@IBAction func showKyc(_ sender: UITapGestureRecognizer) { |
|||
if self.didNotSubmitKycAndNotVerified() { |
|||
self.presenter?.showKyc() |
|||
}else if shouldShowPennyTestError() { |
|||
if Utility.didPennyTestRequested() { |
|||
|
|||
presenter?.showPennyTestSubmit() |
|||
}else { |
|||
presenter?.showPennyTest() |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
private func shouldShowUnverifiedNotice() -> Bool { |
|||
return !self.isUserVerified() || Utility.shouldShowPennyTestError() |
|||
} |
|||
|
|||
private func configureViews() { |
|||
self.verificationNoticeHeightConstraint.constant = 0 |
|||
showUnverifiedNotice() |
|||
setNavBar() |
|||
} |
|||
|
|||
func setNavBar() { |
|||
let selector = #selector(self.showSideMenu) |
|||
self.setupPicturedNavBar(sideMenuAction: selector) |
|||
} |
|||
|
|||
@objc func showSideMenu() { |
|||
sideMenuController?.showLeftViewAnimated() |
|||
} |
|||
|
|||
private func isUserVerified() -> Bool { |
|||
return Utility.isVerifiedUser() |
|||
} |
|||
|
|||
|
|||
|
|||
@objc private func showSendMoney() { |
|||
let kycSubmited = user?.kyc ?? false |
|||
let pennyTestComplete = Utility.pennyTestVerified() |
|||
|
|||
if kycSubmited == true && pennyTestComplete == false { |
|||
self.show(error: StringConstants().pennyTestPrimaryBankText) |
|||
return |
|||
} |
|||
if isUserVerified() { |
|||
// remaining of previous developer. I dont have much time. Later. TODO: refracor |
|||
let viewcontroller = UIStoryboard.init(name: |
|||
"RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "RecipientListViewController") as! RecipientListViewController |
|||
self.navigationController?.pushViewController(viewcontroller, animated: true) |
|||
} else { |
|||
self.showUnVerifiedMessage() |
|||
} |
|||
} |
|||
|
|||
@objc private func showResendMoney() { |
|||
let kycSubmited = user?.kyc ?? false |
|||
let pennyTestComplete = Utility.pennyTestVerified() |
|||
|
|||
if kycSubmited == true && pennyTestComplete == false { |
|||
self.show(error: StringConstants().pennyTestPrimaryBankText) |
|||
return |
|||
} |
|||
if isUserVerified() { |
|||
// remaining of previous developer. I dont have much time. Later. TODO: refracor |
|||
if let navigation = self.navigationController { |
|||
let wireframe = ResendWireframe() |
|||
wireframe.pushMainView(in: navigation) |
|||
} |
|||
} else { |
|||
self.showUnVerifiedMessage() |
|||
} |
|||
} |
|||
|
|||
@objc private func showMobileRecharge() { |
|||
let kycSubmited = user?.kyc ?? false |
|||
let pennyTestComplete = Utility.pennyTestVerified() |
|||
|
|||
if kycSubmited == true && pennyTestComplete == false { |
|||
self.show(error: StringConstants().pennyTestPrimaryBankText) |
|||
return |
|||
} |
|||
|
|||
self.alert(message: "This feature is coming soon") |
|||
return |
|||
if isUserVerified() { |
|||
return |
|||
self.performSegue(withIdentifier: "mobileRecharge", sender: nil) |
|||
}else { |
|||
self.showUnVerifiedMessage() |
|||
} |
|||
} |
|||
|
|||
@objc private func showTodaysRate() { |
|||
presenter?.openTodaysRate() |
|||
} |
|||
|
|||
// Transaction Report |
|||
@objc private func showTrackYourTransfer() { |
|||
let kycSubmited = user?.kyc ?? false |
|||
let pennyTestComplete = Utility.pennyTestVerified() |
|||
|
|||
if kycSubmited == true && pennyTestComplete == false { |
|||
self.show(error: StringConstants().pennyTestPrimaryBankText) |
|||
return |
|||
} |
|||
|
|||
isUserVerified() ? (presenter?.openTrackYourTransfer()) : (self.showUnVerifiedMessage()) |
|||
|
|||
} |
|||
|
|||
@objc private func showTransactionStatement() { |
|||
let kycSubmited = user?.kyc ?? false |
|||
let pennyTestComplete = Utility.pennyTestVerified() |
|||
|
|||
if kycSubmited == true && pennyTestComplete == false { |
|||
self.show(error: StringConstants().pennyTestPrimaryBankText) |
|||
return |
|||
} |
|||
|
|||
isUserVerified() ? (presenter?.openTransactionHistory()) : (self.showUnVerifiedMessage()) |
|||
} |
|||
|
|||
@objc private func showUnVerifiedMessage() { |
|||
if didNotSubmitKycAndNotVerified() { |
|||
self.alert(message: StringConstants().registerProcessText) |
|||
} else if Utility.didSubmitKyc() && !Utility.pennyTestVerified() { |
|||
self.alert(message: StringConstants().pennyTestPrimaryBankText) |
|||
} |
|||
else |
|||
if didSubmitKycAndNotVerified() { |
|||
// verification_in_aproval_process_text |
|||
// Your registration request is in approval process. You will soon be able to use GME services. |
|||
self.alert(message: "verification_in_aproval_process_text".localized()) |
|||
} |
|||
} |
|||
|
|||
// TODO:- |
|||
@objc private func showUnVerifiedPennyTestMessage() { |
|||
// complete_penny_test |
|||
self.alert(message: "complete_penny_test".localized()) |
|||
} |
|||
|
|||
@objc private func showWalletToWallet() { |
|||
self.alert(message: "This feature is coming soon") |
|||
} |
|||
|
|||
@objc private func setupHeight(sender: Notification) { |
|||
if let height = sender.userInfo?[MenuNotificationName.collectionHeight] as? CGFloat { |
|||
self.menuHeight = height |
|||
} |
|||
} |
|||
} |
|||
|
|||
// MARK: HomeViewInterface |
|||
extension HomeViewController: HomeViewInterface { |
|||
func show(model: User) { |
|||
self.user = model |
|||
} |
|||
|
|||
func show(error: String) { |
|||
self.alert(message: error) |
|||
} |
|||
|
|||
func show(panicError: String) { |
|||
self.alert(message: panicError, title: "Warning") { |
|||
self.presenter?.logout() |
|||
} |
|||
} |
|||
|
|||
func showLoading() { |
|||
self.showProgressHud() |
|||
} |
|||
|
|||
func hideLoading() { |
|||
self.hideProgressHud() |
|||
} |
|||
|
|||
func endRefreshing() { |
|||
if #available(iOS 10.0, *) { |
|||
guard let control = self.tableView.refreshControl else {return} |
|||
if control.isRefreshing == true { |
|||
DispatchQueue.main.async { |
|||
control.perform(#selector(control.endRefreshing), with: nil, afterDelay: 0.5) |
|||
} |
|||
} |
|||
} else { |
|||
// Fallback on earlier versions |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
extension HomeViewController: UITableViewDelegate { |
|||
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
|||
|
|||
guard let _section = Sections.init(rawValue: indexPath.section) else {return 0} |
|||
|
|||
switch _section { |
|||
case .balance: |
|||
return UITableViewAutomaticDimension |
|||
case .collection: |
|||
let totalHeight = view.frame.height |
|||
let ramainingBalanceCellHeight: CGFloat = 100 |
|||
let finalHeight = totalHeight - ramainingBalanceCellHeight |
|||
return finalHeight |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
extension HomeViewController: UITableViewDataSource { |
|||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|||
return 1 |
|||
} |
|||
|
|||
func numberOfSections(in tableView: UITableView) -> Int { |
|||
return self.sections.count |
|||
} |
|||
|
|||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
|||
guard let _section = Sections.init(rawValue: indexPath.section) else {return UITableViewCell()} |
|||
switch _section { |
|||
case .balance: |
|||
return configureRemainingLimitCell(tableView: tableView, indexPath: indexPath) |
|||
case .collection: |
|||
return configureCollectionCell(tableView: tableView, indexPath: indexPath) |
|||
} |
|||
} |
|||
|
|||
func configureRemainingLimitCell(tableView: UITableView, indexPath: IndexPath) -> UITableViewCell { |
|||
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeRemainingLimitTableViewCell") as! HomeRemainingLimitTableViewCell |
|||
cell.user = self.user |
|||
cell.setup() |
|||
return cell |
|||
} |
|||
|
|||
func configureCollectionCell(tableView: UITableView, indexPath: IndexPath) -> UITableViewCell { |
|||
let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCollectionTableViewCell") as! HomeCollectionTableViewCell |
|||
cell.setup() |
|||
return cell |
|||
} |
|||
|
|||
override func setupTabItem() { |
|||
let image = UIImage.init(named: "ic-home") |
|||
self.tabBarItem = UITabBarItem(title: "home_text".localized(), image: image, selectedImage: nil) |
|||
self.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: UI_USER_INTERFACE_IDIOM() == .pad ? 2 : -6) |
|||
|
|||
} |
|||
|
|||
@objc func updateTabBarTitle() { |
|||
self.tabBarItem.title = "home_text".localized() |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
// notification Name |
|||
extension HomeViewController { |
|||
func getSendMoneyNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.sendMoney) |
|||
} |
|||
|
|||
func getMobileRechargeNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.mobileRecharge) |
|||
} |
|||
|
|||
func getTodaysRateNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.todaysRate) |
|||
} |
|||
func getTrackYourTransferNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.resend) |
|||
} |
|||
func getTransactionStatementNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.transactionStatement) |
|||
} |
|||
func getWalletToWalletNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.walletToWallet) |
|||
} |
|||
|
|||
func getCollectionHeightNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: MenuNotificationName.collectionHeight) |
|||
} |
|||
|
|||
func getAvailableBalanceNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: SideMenuNavigationNotifications.availableBalance) |
|||
} |
|||
|
|||
func getMainControllerNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(rawValue: AppConstants.MainWireFrameNotificationName) |
|||
} |
|||
|
|||
func getWithdrawNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.withdraw) |
|||
} |
|||
|
|||
func getKftcAccountListNotificationName() -> Notification.Name { |
|||
return Notification.Name.init(SideMenuNavigationNotifications.KftcAccountList) |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
extension HomeViewController: UIGestureRecognizerDelegate { |
|||
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { |
|||
return !Utility.didSubmitKyc() || Utility.shouldShowPennyTestError() || Utility.didPennyTestCancelled() || Utility.didPennyTestRequested() || Utility.didPennyTestNotInitiated() |
|||
} |
|||
} |
|||
|
|||
extension HomeViewController { |
|||
|
|||
private func save(value: Any?, forKey: String) { |
|||
let defaults = UserDefaults.standard |
|||
defaults.set(value, forKey: forKey) |
|||
} |
|||
|
|||
func save(user: User?) { |
|||
Utility.save(user: user) |
|||
} |
|||
} |
@ -1,176 +0,0 @@ |
|||
// |
|||
// MainViewController.swift |
|||
// |
|||
// |
|||
// Created by shishir sapkota |
|||
// |
|||
|
|||
|
|||
import Foundation |
|||
import UIKit |
|||
|
|||
class MainViewController: UITabBarController { |
|||
// MARK: Properties |
|||
|
|||
|
|||
// MARK: ENUMS: |
|||
private enum Items: Int { |
|||
case home = 0 |
|||
case sendMoney |
|||
case branch |
|||
case profile |
|||
} |
|||
|
|||
var presenter: MainModuleInterface? |
|||
|
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
self.delegate = self |
|||
self.setupAppearance() |
|||
} |
|||
|
|||
func setup(viewControllers: [UIViewController]) { |
|||
self.viewControllers = viewControllers |
|||
self.setupTab() |
|||
setupTabItem() |
|||
} |
|||
|
|||
// MARK: Other functions |
|||
func setupAppearance() { |
|||
UINavigationBar.setInsideAppearance() |
|||
} |
|||
|
|||
private func setupTab() { |
|||
self.tabBar.tintColor = Colors.defaultRed |
|||
self.tabBar.isTranslucent = false |
|||
self.tabBar.shadowImage = Colors.TabBar.shadow.image() |
|||
self.tabBar.backgroundImage = UIImage() |
|||
} |
|||
|
|||
override func setupTabItem() { |
|||
self.viewControllers?.forEach({ (viewController) in |
|||
}) |
|||
} |
|||
} |
|||
|
|||
extension MainViewController: MainViewInterface { |
|||
|
|||
} |
|||
|
|||
extension MainViewController: UITabBarControllerDelegate { |
|||
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { |
|||
if let nav = viewController as? UINavigationController { |
|||
if let _ = nav.viewControllers.first as? RecipientListViewController { |
|||
NotificationCenter.default.post(name: Notification.Name.init(AppConstants.MainWireFrameNotificationName), object: nil, userInfo: nil) |
|||
return Utility.isVerifiedUser() |
|||
} |
|||
} |
|||
print(tabBarController.selectedIndex) |
|||
return true |
|||
} |
|||
} |
|||
|
|||
extension UINavigationBar { |
|||
static func setInsideAppearance() { |
|||
let navBarAppearance = UINavigationBar.appearance() |
|||
navBarAppearance.isTranslucent = false |
|||
navBarAppearance.barTintColor = UIColor.white |
|||
} |
|||
|
|||
static func setOutsideAppearance() { |
|||
self.setInsideAppearance() |
|||
let navBarAppearance = UINavigationBar.appearance() |
|||
navBarAppearance.barTintColor = Colors.defaultRed |
|||
let font = Fonts.NavBar.titleFont |
|||
navBarAppearance.titleTextAttributes = [ |
|||
NSAttributedStringKey.foregroundColor: UIColor.black, |
|||
NSAttributedStringKey.font: font] |
|||
navBarAppearance.tintColor = UIColor.black |
|||
} |
|||
|
|||
static func setupImageAppearance() { |
|||
let navBarAppearance = UINavigationBar.appearance() |
|||
navBarAppearance.barTintColor = Colors.defaultRed |
|||
let font = Fonts.NavBar.titleFont |
|||
navBarAppearance.titleTextAttributes = [ |
|||
NSAttributedStringKey.foregroundColor: UIColor.black, |
|||
NSAttributedStringKey.font: font] |
|||
navBarAppearance.tintColor = UIColor.black |
|||
} |
|||
} |
|||
|
|||
@objc protocol Setup { |
|||
@objc optional func setupTabItem() |
|||
} |
|||
|
|||
|
|||
extension UIViewController: Setup { |
|||
func setupTabItem() { |
|||
|
|||
} |
|||
} |
|||
struct Colors { |
|||
|
|||
static let separator = UIColor(hex: "#eeeeee") |
|||
static let defaultRed = UIColor(hex: "#0xec1c24") |
|||
static let cartBadge = UIColor(hex: "#F5951D") |
|||
|
|||
struct TabBar { |
|||
static let textItemSelected = Colors.defaultRed |
|||
static let textItemNotSelected = UIColor(hex: "#959595") |
|||
static let shadow = Colors.separator |
|||
} |
|||
|
|||
struct NavBar { |
|||
// static let barTint = |
|||
static let tint = UIColor.white |
|||
static let shadow = Colors.separator |
|||
} |
|||
|
|||
struct XLTabBar { |
|||
static let titleUnselected = UIColor(hex: "#555555") |
|||
static let titleSelected = Colors.defaultRed |
|||
static let selectedBackground = Colors.defaultRed |
|||
} |
|||
} |
|||
|
|||
|
|||
struct Fonts { |
|||
struct Family { |
|||
static let regular = "SanFranciscoDisplay-regular" |
|||
static let light = "SanFranciscoDisplay-light" |
|||
static let bold = "SanFranciscoDisplay-Bold" |
|||
static let semiBold = "SanFranciscoDisplay-Semibold" |
|||
} |
|||
|
|||
struct TabBar { |
|||
static let itemFont = UIFont(name: Family.light, size: 10)! |
|||
} |
|||
|
|||
struct NavBar { |
|||
static let titleFont = UIFont(name: Family.regular, size: 17)! |
|||
} |
|||
|
|||
struct XLTabBar { |
|||
static let itemFont = UIFont(name: Family.regular, size: 12)! |
|||
} |
|||
|
|||
struct Error { |
|||
static let font = UIFont(name: Family.semiBold, size: 11)! |
|||
} |
|||
} |
|||
|
|||
|
|||
extension UIColor { |
|||
func image(of size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { |
|||
let rect = CGRect(origin: .zero, size: size) |
|||
UIGraphicsBeginImageContextWithOptions(size, false, 0) |
|||
self.setFill() |
|||
UIRectFill(rect) |
|||
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! |
|||
UIGraphicsEndImageContext() |
|||
return image |
|||
} |
|||
} |
@ -1,374 +0,0 @@ |
|||
// |
|||
// RegisterViewController.swift |
|||
// GMERemittance |
|||
// |
|||
// Created by gme_2 on 10/09/2018. |
|||
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. |
|||
// |
|||
|
|||
import UIKit |
|||
import Localize_Swift |
|||
|
|||
import RxSwift |
|||
import RxCocoa |
|||
|
|||
class RegisterViewController: UIViewController { |
|||
|
|||
struct StringConstants { |
|||
let userIdTitle = "login_user_id_text".localized() |
|||
let useridPlaceholder = "email_text".localized() |
|||
let passwordTitle = "password_text".localized() |
|||
let passwordPlaceholder = "create_password_text".localized() |
|||
|
|||
let confirmPasswordTitle = "confirm_password_text".localized() |
|||
let confirmPasswordPlaceholder = "confirm_password_text".localized() |
|||
|
|||
let dobTitlePlaceholder = "dob_text".localized() |
|||
let alreadyHaveAccountText = "already_have_account_text".localized() |
|||
let loginText = "login_text".localized() |
|||
let registerText = "register_text".localized() |
|||
let registerHeader = "register_title_text".localized() |
|||
let registerSubtitle = "register_subtitle_text".localized() |
|||
} |
|||
|
|||
// MARK: IBOutlets |
|||
|
|||
@IBOutlet weak var emailTextField: UITextField! |
|||
@IBOutlet weak var passwordTextField: UITextField! |
|||
@IBOutlet weak var confirmPasswordTextfield: UITextField! |
|||
@IBOutlet weak var dobTextField: UITextField! |
|||
@IBOutlet weak var emailValidMessageLabel: UILabel! |
|||
|
|||
// header labels |
|||
@IBOutlet weak var headerLabel: UILabel! |
|||
@IBOutlet weak var subHeaderLabel: UILabel! |
|||
|
|||
// title labels |
|||
@IBOutlet weak var userIdTitleLabel: UILabel! |
|||
@IBOutlet weak var passwordTitleLabel: UILabel! |
|||
@IBOutlet weak var confirmPasswordTitleLabel: UILabel! |
|||
@IBOutlet weak var dobTitileLabel: UILabel! |
|||
|
|||
@IBOutlet weak var alreadyHaveAccountLabel: UILabel! |
|||
|
|||
// buttons |
|||
@IBOutlet weak var loginButton: UIButton! |
|||
@IBOutlet weak var registerButton: UIButton! |
|||
|
|||
// MARK: Properties |
|||
let datePicker = UIDatePicker() |
|||
var presenter: RegisterModuleInterface? |
|||
var disposeBag = DisposeBag() |
|||
|
|||
// keyboard |
|||
var mQwertyTransKeyView : TransKeyView? |
|||
var mNumberTransKeyView : TransKeyView? |
|||
|
|||
var secureKey : NSData! |
|||
var numberCipherString : String! |
|||
var qwertyCipherString : String! |
|||
|
|||
var isTranskeyShowing : Bool! |
|||
var isShowQwerty : Bool! = true |
|||
var isShowNumber : Bool! |
|||
|
|||
var password: String! { |
|||
didSet { |
|||
self.passwordTextField.text = password |
|||
} |
|||
} |
|||
var encryptedPassword: String! |
|||
var encryptedConfirmPassword: String! |
|||
var confirmPassword: String! { |
|||
didSet { |
|||
self.confirmPasswordTextfield.text = confirmPassword |
|||
} |
|||
} |
|||
|
|||
var showingPasswordField = false |
|||
var showingConfirmPasswordField: Bool = false |
|||
|
|||
// MARK: VC's Life cycle |
|||
|
|||
override func viewDidLoad() { |
|||
super.viewDidLoad() |
|||
self.setupKeyboard() |
|||
self.setup() |
|||
self.setBinding() |
|||
} |
|||
|
|||
override func viewWillAppear(_ animated: Bool) { |
|||
super.viewWillAppear(animated) |
|||
self.setupPicturedNavBar() |
|||
} |
|||
|
|||
override func viewWillDisappear(_ animated: Bool) { |
|||
super.viewWillDisappear(animated) |
|||
self.navigationItem.title = "" |
|||
|
|||
mQwertyTransKeyView?.mTK_ClearDelegateSubviews() |
|||
mNumberTransKeyView?.mTK_ClearDelegateSubviews() |
|||
if isTranskeyShowing == false { |
|||
mQwertyTransKeyView?.delegate = nil; |
|||
mNumberTransKeyView?.delegate = nil; |
|||
} |
|||
} |
|||
|
|||
// MARK: IBActions |
|||
|
|||
@IBAction func login(_ sender: UIButton) { |
|||
self.presenter?.login() |
|||
} |
|||
|
|||
private func setupDatePicker() { |
|||
self.datePicker.datePickerMode = .date |
|||
self.dobTextField.inputView = datePicker |
|||
datePicker.maximumDate = Date() |
|||
self.datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged) |
|||
} |
|||
|
|||
@objc private func handleDatePicker(sender: UIDatePicker) { |
|||
let dateFormatter = DateFormatter() |
|||
dateFormatter.dateFormat = "yyyy-MM-dd" |
|||
self.dobTextField.text = dateFormatter.string(from: sender.date) |
|||
} |
|||
|
|||
@IBAction func register(_ sender: UIButton) { |
|||
let email = self.emailTextField.text! |
|||
// let password = self.passwordTextField.text! |
|||
let password = self.password |
|||
let dob = self.dobTextField.text! |
|||
let confirmPassword = self.confirmPasswordTextfield.text! |
|||
let model = RegisterRequestModel() |
|||
model.username = email |
|||
model.password = password |
|||
model.encryptedConfirmPassword = self.encryptedConfirmPassword |
|||
model.confirmPassword = confirmPassword |
|||
model.dob = dob |
|||
model.encryptedPassword = self.encryptedPassword |
|||
self.presenter?.register(model: model) |
|||
} |
|||
|
|||
// MARK: Other Functions |
|||
|
|||
private func setBinding() { |
|||
self.emailTextField |
|||
.rx |
|||
.text |
|||
.map{ userID -> Bool? in |
|||
guard let id = userID else { |
|||
return nil |
|||
} |
|||
if id == "" { |
|||
return nil |
|||
} else { |
|||
return id.isValidEmail() |
|||
} |
|||
} |
|||
.bind{[weak self] in |
|||
guard let isValid = $0 else { |
|||
self?.emailValidMessageLabel.text = "" |
|||
return |
|||
} |
|||
if !isValid { |
|||
self?.emailValidMessageLabel.textColor = .red |
|||
self?.emailValidMessageLabel.text = "* 이메일 형식이여야 합니다." |
|||
} else { |
|||
self?.emailValidMessageLabel.text = "" |
|||
} |
|||
} |
|||
.disposed(by: disposeBag) |
|||
} |
|||
|
|||
func setupKeyboard() { |
|||
isShowNumber = false |
|||
isShowQwerty = true |
|||
isTranskeyShowing = false |
|||
|
|||
setQwertyTranskey() |
|||
// self.showQwertyTranskeyAction() |
|||
} |
|||
|
|||
func setQwertyTranskey(){ |
|||
mQwertyTransKeyView = TransKeyView() |
|||
mQwertyTransKeyView?.mTK_Init(self) |
|||
mQwertyTransKeyView?.delegate = self |
|||
mQwertyTransKeyView?.mTK_MakeSecureKey() |
|||
mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortrait) |
|||
mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false) |
|||
// ccr key |
|||
mQwertyTransKeyView?.mTK_LicenseCheck("license_IBK_TEST_IONEBANK_20181105_20190531") |
|||
} |
|||
|
|||
private func setup() { |
|||
// all setup should be done here |
|||
self.setupPicturedNavBar() |
|||
self.setupDatePicker() |
|||
self.configureLanguage() |
|||
self.passwordTextField.delegate = self |
|||
self.confirmPasswordTextfield.delegate = self |
|||
|
|||
} |
|||
|
|||
private func configureLanguage() { |
|||
self.headerLabel.text = StringConstants().registerHeader |
|||
self.subHeaderLabel.text = StringConstants().registerSubtitle |
|||
self.userIdTitleLabel.text = "email_text".localized() |
|||
self.emailTextField.placeholder = StringConstants().useridPlaceholder |
|||
let passwordPlaceholder = StringConstants().passwordPlaceholder |
|||
let attributedPasswordPlaceholder = NSMutableAttributedString(string: passwordPlaceholder) |
|||
|
|||
let passwordPolicy = " (\("password_policy_error".localized()))" |
|||
|
|||
let font = UIFont.init(name: "SanFranciscoDisplay-regular", size: 12)! |
|||
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.lightGray, NSAttributedStringKey.font : font ] |
|||
let attributedPasswordPolicy = NSAttributedString(string: passwordPolicy, attributes: myAttribute) |
|||
attributedPasswordPlaceholder.append(attributedPasswordPolicy) |
|||
self.passwordTitleLabel.attributedText = attributedPasswordPlaceholder |
|||
self.passwordTextField.placeholder = StringConstants().passwordPlaceholder |
|||
self.confirmPasswordTitleLabel.text = StringConstants().confirmPasswordPlaceholder |
|||
self.confirmPasswordTextfield.placeholder = StringConstants().confirmPasswordPlaceholder |
|||
self.dobTitileLabel.text = StringConstants().dobTitlePlaceholder |
|||
self.dobTextField.placeholder = StringConstants().dobTitlePlaceholder |
|||
self.alreadyHaveAccountLabel.text = StringConstants().alreadyHaveAccountText |
|||
self.loginButton.setTitle(StringConstants().loginText, for: .normal) |
|||
self.registerButton.setTitle(StringConstants().registerText, for: .normal) |
|||
} |
|||
} |
|||
|
|||
// MARK: RegisterViewInterface |
|||
extension RegisterViewController: RegisterViewInterface { |
|||
func showLoading() { |
|||
self.showProgressHud() |
|||
} |
|||
|
|||
func hideLoading() { |
|||
self.hideProgressHud() |
|||
} |
|||
|
|||
func show(error: String) { |
|||
self.alert(message: error) |
|||
} |
|||
|
|||
func show(message: String) { |
|||
self.alertWithOk(message: message, title: "Success", okTitle: "Ok") { |
|||
self.presenter?.login() |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
extension RegisterViewController: TransKeyViewDelegate { |
|||
func secureInputFinish(_ type: Int) { |
|||
NSLog("secureInputFinish Btn Type : %d", type) |
|||
NSLog("secureInputFinish"); |
|||
var targetView : TransKeyView? |
|||
|
|||
NSLog("qwerty : " + isShowQwerty.description + " number : " + isShowNumber.description) |
|||
if isShowQwerty == true{ |
|||
qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData() |
|||
|
|||
if showingPasswordField { |
|||
if mQwertyTransKeyView?.mTK_GetDataLength() == 0 { |
|||
self.encryptedPassword = "" |
|||
self.passwordTextField.text = "" |
|||
}else { |
|||
self.encryptedPassword = qwertyCipherString |
|||
self.passwordTextField.text = "password" |
|||
} } |
|||
|
|||
if showingConfirmPasswordField { |
|||
if mQwertyTransKeyView?.mTK_GetDataLength() == 0 { |
|||
|
|||
encryptedConfirmPassword = "" |
|||
self.confirmPasswordTextfield.text = "" |
|||
}else { |
|||
|
|||
encryptedConfirmPassword = qwertyCipherString |
|||
self.confirmPasswordTextfield.text = "password" |
|||
} |
|||
|
|||
} |
|||
|
|||
targetView = mQwertyTransKeyView |
|||
|
|||
// self.mQwertyTransKeyView?.dismissViewControllerAnimated(true, completion: nil) |
|||
|
|||
} |
|||
|
|||
isShowQwerty = false |
|||
isShowNumber = false |
|||
isTranskeyShowing = false |
|||
|
|||
targetView?.dismiss(animated: true, completion: nil) |
|||
|
|||
} |
|||
|
|||
func showQwertyPasswordTranskeyAction(){ |
|||
// let pbkdfKey = "acc4af609fad57f1cd870a5d94092a24be5fd974" |
|||
//// let salts = { 1, 6, 0, 7, 4, 4, 4, 4, 8, 8, 7, 1, 4, 3, 3, 3, 3, 3, 3, 3} |
|||
// var PBKDF2_SALT : NSData! |
|||
// let PBKDF2_IT = 512; |
|||
|
|||
// mQwertyTransKeyView?.mTK_SetPBKDF_RandKey(<#T##randkey: NSData!##NSData!#>) |
|||
|
|||
|
|||
// setQwertyTranskey() |
|||
|
|||
if mQwertyTransKeyView?.isBeingPresented == false { |
|||
isShowQwerty = true |
|||
isTranskeyShowing = true |
|||
|
|||
let hintStr = String(format:"password", 0) |
|||
let font = UIFont(name: "Arial", size: 15) |
|||
|
|||
mQwertyTransKeyView?.mTK_SetHint(hintStr, font: font) |
|||
mQwertyTransKeyView?.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.") |
|||
mQwertyTransKeyView?.mTK_UseCursor(true) |
|||
mQwertyTransKeyView?.mTK_UseAllDeleteButton(true) |
|||
mQwertyTransKeyView?.mTK_UseNavigationBar(true) |
|||
mQwertyTransKeyView?.mTK_UseVoiceOver(true) |
|||
mQwertyTransKeyView?.mTK_setHideInputPasswordDelay(3) |
|||
mQwertyTransKeyView?.mTK_SetControlCenter(false) |
|||
mQwertyTransKeyView?.mTK_setIgnoreStatusbar(false) |
|||
// mQwertyTransKeyView?.mTK_SetLanguage(1) |
|||
mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape) |
|||
|
|||
mQwertyTransKeyView?.setKeyboardType(self, |
|||
keypadType: 0, |
|||
mTK_inputType: 2, |
|||
mTK_inputTitle: "password", |
|||
mTK_cryptType: 0, |
|||
mTK_maxLength: 100, |
|||
mTK_minLength: 0, |
|||
mTK_keypadUpper: false, |
|||
mTK_languageType: 1) |
|||
mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false) |
|||
mQwertyTransKeyView?.mTK_SetUseBalloonImageButton(true) |
|||
if let mQwertyTransKeyView = mQwertyTransKeyView { |
|||
self.present(mQwertyTransKeyView, animated: true, completion: nil) |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
extension RegisterViewController: UITextFieldDelegate { |
|||
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
|||
if textField == passwordTextField { |
|||
self.showingPasswordField = true |
|||
self.showingConfirmPasswordField = false |
|||
self.showQwertyPasswordTranskeyAction() |
|||
return false |
|||
} |
|||
|
|||
if textField == confirmPasswordTextfield { |
|||
self.showingConfirmPasswordField = true |
|||
self.showingPasswordField = false |
|||
self.showQwertyPasswordTranskeyAction() |
|||
return false |
|||
} |
|||
return true |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue