diff --git a/GME Remit.xcodeproj/project.pbxproj b/GME Remit.xcodeproj/project.pbxproj index 70fa4b2f..6496e880 100644 --- a/GME Remit.xcodeproj/project.pbxproj +++ b/GME Remit.xcodeproj/project.pbxproj @@ -212,6 +212,7 @@ 7389601422C2F208003FEA90 /* TablePresenterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7389600922C2F208003FEA90 /* TablePresenterViewController.swift */; }; 7389601722C2F558003FEA90 /* TablePresenterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7389601622C2F558003FEA90 /* TablePresenterProtocol.swift */; }; 7389601922C2FADD003FEA90 /* TableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7389601822C2FADD003FEA90 /* TableCell.swift */; }; + 738DEC1B22D429AB00936C2C /* FunctionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 738DEC1A22D429AB00936C2C /* FunctionTest.swift */; }; 739A7781228BB2B40018A1A9 /* DetailOrderModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739A776E228BB2B30018A1A9 /* DetailOrderModuleInterface.swift */; }; 739A7782228BB2B40018A1A9 /* DetailOrderService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739A7772228BB2B40018A1A9 /* DetailOrderService.swift */; }; 739A7783228BB2B40018A1A9 /* DetailOrderServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739A7773228BB2B40018A1A9 /* DetailOrderServiceType.swift */; }; @@ -253,6 +254,7 @@ 73BCCDD7228993040057B161 /* RewardGroup.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 73BCCDCC228993030057B161 /* RewardGroup.storyboard */; }; 73BCCDD8228993040057B161 /* RewardGroupViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCDCD228993030057B161 /* RewardGroupViewInterface.swift */; }; 73BCCDD9228993040057B161 /* RewardGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCDCE228993030057B161 /* RewardGroupViewController.swift */; }; + 73BE702C22D33E6800E87DD2 /* GMENumberTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BE702B22D33E6800E87DD2 /* GMENumberTextField.swift */; }; 73FDCE1D225C167700CC6912 /* KeyChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FDCE1C225C167700CC6912 /* KeyChain.swift */; }; 73FE8837228A4A8C00A5EB56 /* OrderHistoryModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FE8824228A4A8C00A5EB56 /* OrderHistoryModuleInterface.swift */; }; 73FE8838228A4A8C00A5EB56 /* OrderHistoryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FE8828228A4A8C00A5EB56 /* OrderHistoryService.swift */; }; @@ -2379,6 +2381,7 @@ 7389600922C2F208003FEA90 /* TablePresenterViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TablePresenterViewController.swift; sourceTree = ""; }; 7389601622C2F558003FEA90 /* TablePresenterProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TablePresenterProtocol.swift; path = "GMERemittance/Utility/TablePresenter/Application Logic/Interactor/TablePresenterProtocol.swift"; sourceTree = SOURCE_ROOT; }; 7389601822C2FADD003FEA90 /* TableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableCell.swift; sourceTree = ""; }; + 738DEC1A22D429AB00936C2C /* FunctionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FunctionTest.swift; sourceTree = ""; }; 739A776E228BB2B30018A1A9 /* DetailOrderModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailOrderModuleInterface.swift; sourceTree = ""; }; 739A7772228BB2B40018A1A9 /* DetailOrderService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailOrderService.swift; sourceTree = ""; }; 739A7773228BB2B40018A1A9 /* DetailOrderServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailOrderServiceType.swift; sourceTree = ""; }; @@ -2420,6 +2423,7 @@ 73BCCDCC228993030057B161 /* RewardGroup.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = RewardGroup.storyboard; sourceTree = ""; }; 73BCCDCD228993030057B161 /* RewardGroupViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RewardGroupViewInterface.swift; sourceTree = ""; }; 73BCCDCE228993030057B161 /* RewardGroupViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RewardGroupViewController.swift; sourceTree = ""; }; + 73BE702B22D33E6800E87DD2 /* GMENumberTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GMENumberTextField.swift; sourceTree = ""; }; 73FDCE1C225C167700CC6912 /* KeyChain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyChain.swift; sourceTree = ""; }; 73FE8824228A4A8C00A5EB56 /* OrderHistoryModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderHistoryModuleInterface.swift; sourceTree = ""; }; 73FE8828228A4A8C00A5EB56 /* OrderHistoryService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrderHistoryService.swift; sourceTree = ""; }; @@ -6195,6 +6199,7 @@ 731154CB227C178A00FEBF7F /* APITest.swift */, 7310475B226960E70025D77D /* KeychainTest.swift */, 9FD2610E1FD00458007A511D /* Info.plist */, + 738DEC1A22D429AB00936C2C /* FunctionTest.swift */, ); path = GMERemittanceTests; sourceTree = ""; @@ -10392,6 +10397,7 @@ 73FDCE1C225C167700CC6912 /* KeyChain.swift */, D96A4FBB2146079600CFD507 /* AppConstants.swift */, BEF000C6226757D600AB5663 /* SecureKeypad.swift */, + 73BE702B22D33E6800E87DD2 /* GMENumberTextField.swift */, 73A6E20622CF2E2500E9BC68 /* CopyableLabel.swift */, ); path = Utility; @@ -13791,6 +13797,7 @@ D946719A21426DFB003924DB /* LoginPresenter.swift in Sources */, D92B802C2140C3CB00A25B26 /* MainWireframe.swift in Sources */, D922D9222134DCF000D43053 /* EditReciepientWireframeInput.swift in Sources */, + 73BE702C22D33E6800E87DD2 /* GMENumberTextField.swift in Sources */, D96A4FD921460B4A00CFD507 /* SplashScreenPresenter.swift in Sources */, D9768C88213BAE92009E01BC /* User.swift in Sources */, 7301979022535135001954AB /* KycPresenter.swift in Sources */, @@ -14063,6 +14070,7 @@ files = ( 731154CC227C178A00FEBF7F /* APITest.swift in Sources */, 7310475C226960E70025D77D /* KeychainTest.swift in Sources */, + 738DEC1B22D429AB00936C2C /* FunctionTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme b/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme index c851873f..2f14ec94 100644 --- a/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme +++ b/GME Remit.xcodeproj/xcshareddata/xcschemes/GME Remit.xcscheme @@ -28,6 +28,16 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - - - - - - - - - - - - - - - - - + + + + - + - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - + + + + + - + - + @@ -244,8 +259,9 @@ - + + diff --git a/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitTableViewCell.swift b/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitTableViewCell.swift index 526b2649..6ebc1957 100644 --- a/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitTableViewCell.swift +++ b/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitTableViewCell.swift @@ -17,9 +17,14 @@ class AutoDebitTableViewCell: UITableViewCell { let name = model?.bankName labelRecipientName.text = name accountNumnerLabel.text = model?.accountNumMasked - mainView.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor - mainView.layer.borderWidth = 1 - mainView.layer.cornerRadius = 10 + +// mainView.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor +// mainView.layer.borderWidth = 1 +// mainView.layer.cornerRadius = 10 + + layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor + layer.borderWidth = 1 + layer.cornerRadius = 10 } diff --git a/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift b/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift index 98a2669a..c0555238 100644 --- a/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift +++ b/GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift @@ -38,12 +38,9 @@ class AutoDebitViewController: UIViewController { var languages: [String] = ["--- Select Language ---"] lazy var languageTextField = UITextField(frame: .zero) - var selectedLanguage: KftcLanguage? { - didSet { -// print("\(selectedLanguage?.value ?? "undefined")") -// presenter?.goRefreshToken(selectedLanguage: selectedLanguage) - } - } + var selectedLanguage: KftcLanguage? + + private lazy var refreshControl = UIRefreshControl() private var kftcDetail: KFTCModel? { didSet { @@ -66,6 +63,9 @@ class AutoDebitViewController: UIViewController { else { refreshAccountButton.isEnabled = false refreshAccountButton.tintColor = .clear + + labelSwipeInfo.isHidden = true + viewAddAccount.isHidden = true return } @@ -74,6 +74,8 @@ class AutoDebitViewController: UIViewController { refreshAccountButton.isEnabled = true refreshAccountButton.tintColor = .black + labelSwipeInfo.isHidden = false + viewAddAccount.isHidden = false } } @@ -83,7 +85,7 @@ class AutoDebitViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - setLargeTitle() +// setLargeTitle() setupNormalNavigation() navigationItem.title = multiLanguages.navigationTitle @@ -97,7 +99,7 @@ class AutoDebitViewController: UIViewController { setupDelegates() viewAddAccount.layer.cornerRadius = 10 - navigationController?.navigationBar.shadowImage = UIImage() +// navigationController?.navigationBar.shadowImage = UIImage() // tabBarController?.tabBar.shadowImage = UIImage() } @@ -107,15 +109,18 @@ class AutoDebitViewController: UIViewController { view.endEditing(true) - if #available(iOS 11.0, *) { - navigationController?.navigationBar.prefersLargeTitles = false - } +// if #available(iOS 11.0, *) { +// navigationController?.navigationBar.prefersLargeTitles = false +// } } // MARK:- IBAction @IBAction func touchAddAccountButton(_ sender: UIBarButtonItem) { - addNewAccount(UITapGestureRecognizer()) - + presenter?.goAddAccount(model: kftcDetail) + } + + @IBAction func touchAddAccountCellButton(_ sender: UIButton) { + presenter?.goAddAccount(model: kftcDetail) } @IBAction func touchRefreshAccountButton(_ sender: UIBarButtonItem) { @@ -137,8 +142,19 @@ class AutoDebitViewController: UIViewController { self.languageTextField.becomeFirstResponder() self.languageTextField.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(self.editingDidEnd(_:))) + + DispatchQueue.main.asyncAfter(deadline: .now()){[weak self] in + guard let `self` = self else {return} + self.tableView.refreshControl?.endRefreshing() + } + }, - cancelAction: nil + cancelAction: { + DispatchQueue.main.asyncAfter(deadline: .now()){[weak self] in + guard let `self` = self else {return} + self.tableView.refreshControl?.endRefreshing() + } + } ) } @@ -148,7 +164,8 @@ class AutoDebitViewController: UIViewController { @IBAction private func addNewAccount(_ sender: UITapGestureRecognizer) { - presenter?.goAddAccount(model: kftcDetail) +// presenter?.goAddAccount(model: kftcDetail) + touchRefreshAccountButton(UIBarButtonItem()) } // MARK:- other functions @@ -159,6 +176,9 @@ class AutoDebitViewController: UIViewController { configureText() view.addSubview(languageTextField) + +// addRefreshControlTableView() + } private func configureText() { @@ -172,7 +192,7 @@ class AutoDebitViewController: UIViewController { extension AutoDebitViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { - return 90 + return 82 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { @@ -296,3 +316,24 @@ extension AutoDebitViewController: UIPickerViewDataSource { } + +extension AutoDebitViewController { + private func addRefreshControlTableView() { + let colorOption = [NSAttributedStringKey.foregroundColor : AppConstants.themWhiteColor]; + + let title = NSAttributedString(string: "Token Renewal", attributes: colorOption) + + refreshControl.attributedTitle = title + refreshControl.backgroundColor = AppConstants.themeBlueColor + refreshControl.tintColor = AppConstants.themWhiteColor + refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged) + + tableView.refreshControl = refreshControl + + } + + @objc + private func refresh() { + touchRefreshAccountButton(UIBarButtonItem()) + } +} diff --git a/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRates.storyboard b/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRates.storyboard index ca73c182..7fc5bbc7 100644 --- a/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRates.storyboard +++ b/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRates.storyboard @@ -1,11 +1,11 @@ - + - + @@ -162,7 +162,7 @@ - + @@ -282,7 +282,7 @@ - + diff --git a/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift b/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift index b976c709..57dad82b 100644 --- a/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift +++ b/GMERemittance/Module/ExchangeRates/User Interface/View/ExchangeRatesViewController.swift @@ -67,8 +67,8 @@ class ExchangeRatesViewController: UIViewController { @IBOutlet weak var paymentModeStackViewConstraint: NSLayoutConstraint! @IBOutlet weak var paymentModeStackView: UIStackView! - @IBOutlet weak var senderTextField: UITextField! - @IBOutlet weak var reciepientTextField: UITextField! + @IBOutlet weak var senderTextField: GMENumberTextField! + @IBOutlet weak var reciepientTextField: GMENumberTextField! @IBOutlet weak var transferFeeInfoLabel: UILabel! @IBOutlet weak var exchangeRateInfoLabel: UILabel! diff --git a/GMERemittance/Module/Home/Application Logic/Service/HomeServiceType.swift b/GMERemittance/Module/Home/Application Logic/Service/HomeServiceType.swift index 5f53582b..ffa842d6 100644 --- a/GMERemittance/Module/Home/Application Logic/Service/HomeServiceType.swift +++ b/GMERemittance/Module/Home/Application Logic/Service/HomeServiceType.swift @@ -30,7 +30,7 @@ extension UserInfoService { if let model = response.data { success(model) }else { - let error = NSError.init(domain: "UserInfoService", code: AppConstants.emergencyLogoutErrorCode, userInfo: [NSLocalizedDescriptionKey : response.message]) + let error = NSError.init(domain: "UserInfoService", code: AppConstants.emergencyLogoutErrorCode, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""]) failure(error) } diff --git a/GMERemittance/Module/Home/User Interface/View/HomeViewController.swift b/GMERemittance/Module/Home/User Interface/View/HomeViewController.swift index f47554f7..f0797d55 100644 --- a/GMERemittance/Module/Home/User Interface/View/HomeViewController.swift +++ b/GMERemittance/Module/Home/User Interface/View/HomeViewController.swift @@ -96,6 +96,7 @@ class HomeViewController: UIViewController, UICollectionViewDelegateFlowLayout { var userHotLine: HotLine? + var isShowTokenRenewAlert = false override func viewDidLoad() { super.viewDidLoad() @@ -773,6 +774,36 @@ extension HomeViewController { func save(user: User?) { Utility.save(user: user) } + + private func checkKFTCToken() { + if !isShowTokenRenewAlert { + // TODO: Show Alert for token refresh (navigation push) + guard + let remind = UserDefaults.standard.string(forKey: UserKeys.remindKFTCTokenDay), + let remindDay = Int(remind) else { return } + + if remindDay <= 30 { + let expiredMessage = "Your auto debit token has already expired.\nFor use auto debit, you have to renew token." + + let defaultMessage = "Your auto debit token expires after \(remindDay) days." + + alertWithOkCancel( + message: remindDay > 0 ? defaultMessage : expiredMessage, + title: "Would you like to renew your token now?", + okTitle: "Renewal", + cancelTitle: "Later", + okAction: { + AutoDebitWireframe().pushMainView(on: self) + self.isShowTokenRenewAlert = true + }, + cancelAction : { + self.isShowTokenRenewAlert = true + } + ) + } + } + } + } // MARK: - Channel IO @@ -785,13 +816,12 @@ extension HomeViewController { let profile = Profile() guard let username = UserDefaults.standard.string(forKey: UserKeys.fullName) else { return - } + guard let username = UserDefaults.standard.string(forKey: UserKeys.fullName) else { profile.set(name: username) ChannelIO.delegate = self ChannelIO.boot(with:settings, profile: profile) {(_, _) in ChannelIO.open(animated: true) - // For push notification of ChannelIO // ChannelIO.track(eventName:"HomeVisit") } diff --git a/GMERemittance/Module/SendMoneyModules/ResendExchange/User Interface/View/ResendExchange.storyboard b/GMERemittance/Module/SendMoneyModules/ResendExchange/User Interface/View/ResendExchange.storyboard index 5be10767..b1ced954 100644 --- a/GMERemittance/Module/SendMoneyModules/ResendExchange/User Interface/View/ResendExchange.storyboard +++ b/GMERemittance/Module/SendMoneyModules/ResendExchange/User Interface/View/ResendExchange.storyboard @@ -68,7 +68,7 @@ - + @@ -212,7 +212,7 @@ - + @@ -367,16 +367,16 @@ - + - + @@ -394,7 +394,7 @@ - + - + @@ -83,7 +83,7 @@ - + @@ -93,7 +93,7 @@ - + - + @@ -225,7 +225,7 @@ - + @@ -235,13 +235,13 @@ - + @@ -390,16 +390,16 @@ - + - + @@ -417,7 +417,7 @@ - + diff --git a/GMERemittance/Utility/AppConstants.swift b/GMERemittance/Utility/AppConstants.swift index 6c516dbd..fd4a6d22 100644 --- a/GMERemittance/Utility/AppConstants.swift +++ b/GMERemittance/Utility/AppConstants.swift @@ -10,45 +10,48 @@ import Foundation class AppConstants { - static let uuid = "uuid" - static let dateFormat = "yyyy-MM-dd" - static let humanReadableDateFormat = "MMM d, yyyy" - static let errorBorderWidth: CGFloat = 0.1 - static let themeRedColor = UIColor.init(hex: "#ed1b24") - static let themeDarkRedColor = UIColor.init(hex: "#be0007") - static let themeBlueColor = UIColor.init(hex: "#303e9f") // 2D368F - static let themWhiteColor = UIColor.init(hex: "#ffffff") - static let emergencyLogoutErrorCode = -1111 - static let maxKoreanMobileNoLength = 11 - static let MainWireFrameNotificationName = "MainViewControllerSelect" - static let pennyTestServerMessage = "pennyTestServerMessage" - static let pennyTestStatusCode = "pennyTestStatusCode" - static let pennyTestRequested = "pennyTestRequested" - static let pennyTestPresentedOnce = "pennyTestPresentedOnce" - static let criticalUpdate = "criticalUpdate" - static let primaryBankWArningMessage = "Please verify your primary bank account to complete the registration." - static let yearlyLimitNotification = "Yearly LImit" - static let firstTimeLanguageIsSet = "firstTimeLanguageIsSet" - static let currentLanguage = "currentLanguage" + static let uuid = "uuid" + static let dateFormat = "yyyy-MM-dd" + static let humanReadableDateFormat = "MMM d, yyyy" + static let errorBorderWidth: CGFloat = 0.1 + static let themeRedColor = UIColor.init(hex: "#ed1b24") + static let themeDarkRedColor = UIColor.init(hex: "#be0007") + static let themeBlueColor = UIColor.init(hex: "#303e9f") // 2D368F + static let themWhiteColor = UIColor.init(hex: "#ffffff") + static let emergencyLogoutErrorCode = -1111 + static let maxKoreanMobileNoLength = 11 + static let MainWireFrameNotificationName = "MainViewControllerSelect" + static let pennyTestServerMessage = "pennyTestServerMessage" + static let pennyTestStatusCode = "pennyTestStatusCode" + static let pennyTestRequested = "pennyTestRequested" + static let pennyTestPresentedOnce = "pennyTestPresentedOnce" + static let criticalUpdate = "criticalUpdate" + static let primaryBankWArningMessage = "Please verify your primary bank account to complete the registration." + static let yearlyLimitNotification = "Yearly LImit" + static let firstTimeLanguageIsSet = "firstTimeLanguageIsSet" + static let currentLanguage = "currentLanguage" + static let selectedReceiverCountryCode = "receiverCountryCode" + static let accessTokenRegTime = "accessTokenRegTime" + static let accessTokenExpTime = "accessTokenExpTime" } enum Devices { - case iphone5 - case iphone678 - case iphone678Plus - case iphoneX - case ipad - case other + case iphone5 + case iphone678 + case iphone678Plus + case iphoneX + case ipad + case other } //pennyTestStatus='0'-----0 not started, 1 requested , 2 completed enum PennyTestStatusCode: String { - case notStarted = "0" - case requested = "1" - case completed = "2" - case cancelled = "3" + case notStarted = "0" + case requested = "1" + case completed = "2" + case cancelled = "3" } enum Language: String { @@ -151,380 +154,407 @@ extension String { class Utility { - static func getDeviceModel() -> Devices { - if UIDevice().userInterfaceIdiom == .phone { - switch UIScreen.main.nativeBounds.height { - case 1136: - return .iphone5 - case 1334: - return .iphone678 - case 2208: - return .iphone678Plus - case 2436: - return .iphoneX - default: - return .other - } - }else { - return .ipad - } + static func getDeviceModel() -> Devices { + if UIDevice().userInterfaceIdiom == .phone { + switch UIScreen.main.nativeBounds.height { + case 1136: + return .iphone5 + case 1334: + return .iphone678 + case 2208: + return .iphone678Plus + case 2436: + return .iphoneX + default: + return .other + } + }else { + return .ipad + } + } + + // var code: String { + // switch self { + // case .en, .th, .id, .mn, .uz: + // return self.rawValue + // case .kr: + // return "ko" + // case .kh: + // return "km" + // case .lk: + // return "si" + // case .mm: + // return "my" + // case .np: + // return "ne" + // case .bd: + // return "bn" + // case .ru: + // return "ru-RU" + // case .vn: + // return "vi-VN" + // } + + static func getLanguageHeader(for currentLanugage: String) -> String { + var header = "" + switch currentLanugage { + case "ko": + header = "kr" + case "km": + header = "kh" + case "si": + header = "lk" + case "my": + header = "mm" + case "ne": + header = "np" + case "bn": + header = "bd" + case "ru-RU": + header = "ru" + case "vi-VN": + header = "vn" + case "uz": + header = "uz" + case "mn": + header = "mn" + case "id": + header = "id" + case "th": + header = "th" + default: + header = "en" } -// var code: String { -// switch self { -// case .en, .th, .id, .mn, .uz: -// return self.rawValue -// case .kr: -// return "ko" -// case .kh: -// return "km" -// case .lk: -// return "si" -// case .mm: -// return "my" -// case .np: -// return "ne" -// case .bd: -// return "bn" -// case .ru: -// return "ru-RU" -// case .vn: -// return "vi-VN" -// } + return header + } + + static func isVerifiedUser() -> Bool { + let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false + return val + } + + static func didSubmitKyc() -> Bool { + let val = (UserDefaults.standard.object(forKey: UserKeys.kyc) as? Bool ) ?? false + return val + } + + static func isCriticalUpdate() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.criticalUpdate) as? String )?.lowercased() == "Y".lowercased() + return val - static func getLanguageHeader(for currentLanugage: String) -> String { - var header = "" - switch currentLanugage { - case "ko": - header = "kr" - case "km": - header = "kh" - case "si": - header = "lk" - case "my": - header = "mm" - case "ne": - header = "np" - case "bn": - header = "bd" - case "ru-RU": - header = "ru" - case "vi-VN": - header = "vn" - case "uz": - header = "uz" - case "mn": - header = "mn" - case "id": - header = "id" - case "th": - header = "th" - default: - header = "en" - } - - return header + } + + static func didPennyTestRequested() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.requested.rawValue // 0 is false and "1" = true 2 = cancelled + return val + } + + static func pennyTestPresentedOnce() -> Bool { + let val = UserDefaults.standard.bool(forKey: AppConstants.pennyTestPresentedOnce) + return val + } + + static func didPennyTestCancelled() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.cancelled.rawValue + return val + } + + static func didPennyTestNotInitiated() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue + return val + } + + static func pennyTestVerified() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue + return val + } + + static func shouldShowPennyTestError() -> Bool { + let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue + return val + } + + static func shouldShowPennyTestScreen() -> Bool { + let completed = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue + let cancelled = Utility.didPennyTestCancelled() + let requested = Utility.didPennyTestRequested() + return !cancelled && !completed && !requested + } + + + static func getMyUserName() -> String { + let defaults = UserDefaults.standard + let myUsername = defaults.string(forKey: UserKeys.userId) ?? "" + return myUsername + } + + static func getMyId() -> String { + let defaults = UserDefaults.standard + let myId = defaults.string(forKey: UserKeys.senderId) ?? "" + return myId + } + + static func getMyKftcClientId() -> String { + let defaults = UserDefaults.standard + let myId = defaults.string(forKey: UserKeys.kftcClientId) ?? "" + return myId + } + + static func getMyIdNumber() -> String { + let defaults = UserDefaults.standard + let myId = defaults.string(forKey: UserKeys.idNumber) ?? "" + return myId + } + + static func getMyPrimaryAccountNumber() -> String { + let defaults = UserDefaults.standard + let val = defaults.string(forKey: UserKeys.primaryAccountNumber) ?? "" + print(val) + return val + } + + static func isValidEmail(email: String) -> Bool { + let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" + let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex) + return emailTest.evaluate(with: email) + } + + static func getCommaSeperatedString(numberString: String) -> String? { + let text = numberString.filter({ $0 != "," }) + if let number = Double(text) { + let nsNumber = NSNumber.init(value: number) + let currencyFormatter = NumberFormatter() + currencyFormatter.numberStyle = .decimal + let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) + let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",") + return text + } + return nil + } + + static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? { + let text = numberString.filter({ $0 != "," }) + if let number = Double(text) { + let nsNumber = NSNumber.init(value: number) + let currencyFormatter = NumberFormatter() + currencyFormatter.numberStyle = .decimal + currencyFormatter.groupingSize = 3 + currencyFormatter.usesGroupingSeparator = true + let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) + return commaSeperatedNumberString + } + return nil + } + + static func save(user: User?, accessCodeBase64: String? = nil, password: String? = nil, login: Bool? = false) { + func save(value: Any?, forKey: String) { + let defaults = UserDefaults.standard + defaults.set(value, forKey: forKey) + } - static func isVerifiedUser() -> Bool { - let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false - return val - } + save(value: user?.dpUrl ?? "", forKey: UserKeys.dpUrl) + save(value: user?.walletNumber ?? "", forKey: UserKeys.walletNumber) + save(value: user?.primaryBankName ?? "", forKey: UserKeys.primaryBankName) - static func didSubmitKyc() -> Bool { - let val = (UserDefaults.standard.object(forKey: UserKeys.kyc) as? Bool ) ?? false - return val - } + let firstName = user?.firstName ?? "" + let middleName = user?.lastName ?? "" + let lastName = user?.lastName ?? "" + let fullName = firstName + " " + middleName + " " + lastName + save(value: fullName, forKey: UserKeys.fullName) + save(value: firstName, forKey: UserKeys.firstName) + save(value: lastName, forKey: UserKeys.lastName) + if login ?? false { + save(value: accessCodeBase64, forKey: UserKeys.accessCode) + save(value: user?.kftcClientId ?? "", forKey: UserKeys.kftcClientId) + } + save(value: user?.userId ?? "", forKey: UserKeys.userId) + save(value: user?.nickName ?? "", forKey: UserKeys.nickName) + save(value: user?.availableBalance ?? "", forKey: user?.availableBalance ?? "0" ) + save(value: user?.rewardPoint ?? "", forKey: UserKeys.rewardPoint) + save(value: user?.verified ?? false, forKey: UserKeys.verified) + save(value: user?.kyc ?? "", forKey: UserKeys.kyc) + save(value: user?.email ?? "", forKey: UserKeys.email) + save(value: user?.mobileNumber ?? "", forKey: UserKeys.mobileNumber) + save(value: user?.sourceId ?? "", forKey: UserKeys.sourceId) + save(value: "111111", forKey: "com.gmeremit.password") + save(value: user?.isReferred ?? "", forKey: UserKeys.isReferred) + save(value: user?.idType ?? "", forKey: UserKeys.idType) + save(value: user?.idNumber ?? "", forKey: UserKeys.idNumber) + save(value: user?.country ?? "" , forKey: UserKeys.country) + save(value: user?.countryCode, forKey: UserKeys.countryCode) + save(value: user?.primaryAccountNumber, forKey: UserKeys.primaryAccountNumber) + save(value: user?.senderId, forKey: UserKeys.senderId) + save(value: user?.yearlyLimit, forKey: UserKeys.yearlyLimit) + save(value: user?.dateOfBirth, forKey: UserKeys.dateOfBirth) + save(value: user?.pennyTestStatus, forKey: AppConstants.pennyTestStatusCode) + + save(value: user?.accessTokenRegTime, forKey: AppConstants.accessTokenRegTime) + save(value: user?.accessTokenExpTime, forKey: AppConstants.accessTokenExpTime) - static func isCriticalUpdate() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.criticalUpdate) as? String )?.lowercased() == "Y".lowercased() - return val - - } + // save remind day of KFTC Token + let remindDay = calculateDDay(registDate: user?.accessTokenRegTime) + save(value: remindDay, forKey: UserKeys.remindKFTCTokenDay) - static func didPennyTestRequested() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.requested.rawValue // 0 is false and "1" = true 2 = cancelled - return val - } + guard let encryptedPassword = password else { return } - static func pennyTestPresentedOnce() -> Bool { - let val = UserDefaults.standard.bool(forKey: AppConstants.pennyTestPresentedOnce) - return val - } + let email = UserDefaults.standard.string(forKey: UserKeys.email) ?? "" - static func didPennyTestCancelled() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.cancelled.rawValue - return val + if email != KeyChain.shared.get(key: .email) { + KeyChain.shared.remove(key: .biometricAuth) } - static func didPennyTestNotInitiated() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue - return val - } + KeyChain.shared.save(data: email, key: .email) + KeyChain.shared.save(data: encryptedPassword, key: .password) + KeyChain.shared.save(data: "1", key: .login) + } + + static func calculateDDay(registDate: String?) -> String? { + let dateFormatter = DateFormatter() - static func pennyTestVerified() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue - return val - } + dateFormatter.dateFormat = "M/d/yyyy h:mm:ss a" + dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone? - static func shouldShowPennyTestError() -> Bool { - let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue - return val - } + var dateComponent = DateComponents() + dateComponent.year = 1 - static func shouldShowPennyTestScreen() -> Bool { - let completed = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue - let cancelled = Utility.didPennyTestCancelled() - let requested = Utility.didPennyTestRequested() - return !cancelled && !completed && !requested - } + guard + let resigstDate = registDate, + let date = dateFormatter.date(from: resigstDate), + let expireDate = Calendar.current.date(byAdding: dateComponent, to: date) else {return nil} + + let now = Date() + + let interval = expireDate.timeIntervalSince(now) + + return "\(Int(interval / 86400))" + } + + static func numberWithoutprecedingZero(str: String) -> String { + let formatter = NumberFormatter() + let number = formatter.number(from: str) + return "\(number ?? 0)" + } + + + static func getAppVersion () -> String? { + let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String + return version + } + + static func getOsVersion() -> String { + let version = UIDevice.current.systemVersion + return version + } + + static func getPhoneBrand() -> String { + let phoneName = UIDevice.current.model + return phoneName + } + + static func getPhoneOs() -> String { + let os = UIDevice.current.systemName + return os + } + + static func getUUid() -> String? { + let uuid = UIDevice.current.identifierForVendor?.uuidString + return uuid + } + + static func getCliendId() -> String { + return "172017F9EC11222E8107142733" + } +} - static func getMyUserName() -> String { - let defaults = UserDefaults.standard - let myUsername = defaults.string(forKey: UserKeys.userId) ?? "" - return myUsername - } +extension Utility { + static func getLanguages() -> [SendMoneyCountryViewModel] { + let english = SendMoneyCountryViewModel() + english.name = "english_language_text".localized() + english.id = "english_language_text" + english.title = "English" + english.code = "en" - static func getMyId() -> String { - let defaults = UserDefaults.standard - let myId = defaults.string(forKey: UserKeys.senderId) ?? "" - return myId - } + let korean = SendMoneyCountryViewModel() + korean.name = "korean_language_text".localized() + korean.id = "korean_language_text" + korean.title = "한국" + korean.code = "kr" - static func getMyKftcClientId() -> String { - let defaults = UserDefaults.standard - let myId = defaults.string(forKey: UserKeys.kftcClientId) ?? "" - return myId - } + let cambodia = SendMoneyCountryViewModel() + cambodia.name = "cambodia_lanugage_text".localized() + cambodia.id = "cambodia_lanugage_text" + cambodia.title = "ភាសាខ្មែរ" + cambodia.code = "kh" - static func getMyIdNumber() -> String { - let defaults = UserDefaults.standard - let myId = defaults.string(forKey: UserKeys.idNumber) ?? "" - return myId - } - static func getMyPrimaryAccountNumber() -> String { - let defaults = UserDefaults.standard - let val = defaults.string(forKey: UserKeys.primaryAccountNumber) ?? "" - print(val) - return val - } + let srilanka = SendMoneyCountryViewModel() + srilanka.name = "srilanka_lanugage_text".localized() + srilanka.id = "srilanka_lanugage_text" + srilanka.title = "සිංහල" + srilanka.code = "lk" - static func isValidEmail(email: String) -> Bool { - let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" - let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex) - return emailTest.evaluate(with: email) - } + let myanmar = SendMoneyCountryViewModel() + myanmar.name = "myanmar_language_text".localized() + myanmar.id = "myanmar_language_text" + myanmar.title = "Myanmar" + myanmar.code = "mm" - static func getCommaSeperatedString(numberString: String) -> String? { - let text = numberString.filter({ $0 != "," }) - if let number = Double(text) { - let nsNumber = NSNumber.init(value: number) - let currencyFormatter = NumberFormatter() - currencyFormatter.numberStyle = .decimal - let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) - let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",") - return text - } - return nil - } - static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? { - let text = numberString.filter({ $0 != "," }) - if let number = Double(text) { - let nsNumber = NSNumber.init(value: number) - let currencyFormatter = NumberFormatter() - currencyFormatter.numberStyle = .decimal - currencyFormatter.groupingSize = 3 - currencyFormatter.usesGroupingSeparator = true - let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) - return commaSeperatedNumberString - } - return nil - } + let russian = SendMoneyCountryViewModel() + russian.name = "russian_langugae_text".localized() + russian.id = "русский" + russian.title = "русский" + russian.code = "ru" - static func save(user: User?, accessCodeBase64: String? = nil, password: String? = nil, login: Bool? = false) { - func save(value: Any?, forKey: String) { - let defaults = UserDefaults.standard - defaults.set(value, forKey: forKey) - - } - - save(value: user?.dpUrl ?? "", forKey: UserKeys.dpUrl) - save(value: user?.walletNumber ?? "", forKey: UserKeys.walletNumber) - save(value: user?.primaryBankName ?? "", forKey: UserKeys.primaryBankName) - - let firstName = user?.firstName ?? "" - let middleName = user?.lastName ?? "" - let lastName = user?.lastName ?? "" - let fullName = firstName + " " + middleName + " " + lastName - save(value: fullName, forKey: UserKeys.fullName) - save(value: firstName, forKey: UserKeys.firstName) - save(value: lastName, forKey: UserKeys.lastName) - if login ?? false { - save(value: accessCodeBase64, forKey: UserKeys.accessCode) - save(value: user?.kftcClientId ?? "", forKey: UserKeys.kftcClientId) - } - save(value: user?.userId ?? "", forKey: UserKeys.userId) - save(value: user?.nickName ?? "", forKey: UserKeys.nickName) - save(value: user?.availableBalance ?? "", forKey: user?.availableBalance ?? "0" ) - save(value: user?.rewardPoint ?? "", forKey: UserKeys.rewardPoint) - save(value: user?.verified ?? false, forKey: UserKeys.verified) - save(value: user?.kyc ?? "", forKey: UserKeys.kyc) - save(value: user?.email ?? "", forKey: UserKeys.email) - save(value: user?.mobileNumber ?? "", forKey: UserKeys.mobileNumber) - save(value: user?.sourceId ?? "", forKey: UserKeys.sourceId) - save(value: "111111", forKey: "com.gmeremit.password") - save(value: user?.isReferred ?? "", forKey: UserKeys.isReferred) - save(value: user?.idType ?? "", forKey: UserKeys.idType) - save(value: user?.idNumber ?? "", forKey: UserKeys.idNumber) - save(value: user?.country ?? "" , forKey: UserKeys.country) - save(value: user?.countryCode, forKey: UserKeys.countryCode) - save(value: user?.primaryAccountNumber, forKey: UserKeys.primaryAccountNumber) - save(value: user?.senderId, forKey: UserKeys.senderId) - save(value: user?.yearlyLimit, forKey: UserKeys.yearlyLimit) - save(value: user?.dateOfBirth, forKey: UserKeys.dateOfBirth) - save(value: user?.pennyTestStatus, forKey: AppConstants.pennyTestStatusCode) - - guard let encryptedPassword = password else { return } - - let email = UserDefaults.standard.string(forKey: UserKeys.email) ?? "" - - if email != KeyChain.shared.get(key: .email) { - KeyChain.shared.remove(key: .biometricAuth) - } - - KeyChain.shared.save(data: email, key: .email) - KeyChain.shared.save(data: encryptedPassword, key: .password) - KeyChain.shared.save(data: "1", key: .login) - } + let vietnam = SendMoneyCountryViewModel() + vietnam.name = "vietnam_language_text".localized() + vietnam.id = "vietnam_language_text" + vietnam.title = "Tiếng Việt" + vietnam.code = "vn" - static func numberWithoutprecedingZero(str: String) -> String { - let formatter = NumberFormatter() - let number = formatter.number(from: str) - return "\(number ?? 0)" ?? "" - } - + let thailand = SendMoneyCountryViewModel() + thailand.name = "thailand_language_text".localized() + thailand.id = "thailand_language_text" + thailand.title = "ไทย" + thailand.code = "th" - static func getAppVersion () -> String? { - let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String - print(version) - return version - } + let indonesia = SendMoneyCountryViewModel() + indonesia.name = "indonesia_language_text".localized() + indonesia.id = "indonesia_language_text" + indonesia.title = "Bahasa Indonesia" + indonesia.code = "id" - static func getOsVersion() -> String { - let version = UIDevice.current.systemVersion - return version - } + let mongolia = SendMoneyCountryViewModel() + mongolia.name = "mongolia_language_text".localized() + mongolia.id = "mongolia_language_text" + mongolia.title = "Монгол" + mongolia.code = "mn" - static func getPhoneBrand() -> String { - let phoneName = UIDevice.current.model - return phoneName - } + let nepal = SendMoneyCountryViewModel() + nepal.name = "nepali_language_text".localized() + nepal.id = "nepali_language_text" + nepal.title = "नेपाली" + nepal.code = "np" - static func getPhoneOs() -> String { - let os = UIDevice.current.systemName - return os - } + let bangladesh = SendMoneyCountryViewModel() + bangladesh.name = "bengali_language_text".localized() + bangladesh.id = "bengali_language_text" + bangladesh.title = "বাংলা" + bangladesh.code = "bd" - static func getUUid() -> String? { - let uuid = UIDevice.current.identifierForVendor?.uuidString - return uuid - } + let uzbek = SendMoneyCountryViewModel() + uzbek.name = "uzbek_language_text".localized() + uzbek.id = "uzbek_language_text" + uzbek.title = "O'zbek" + uzbek.code = "uz" - static func getCliendId() -> String { - return "172017F9EC11222E8107142733" - } -} - - -extension Utility { - static func getLanguages() -> [SendMoneyCountryViewModel] { - let english = SendMoneyCountryViewModel() - english.name = "english_language_text".localized() - english.id = "english_language_text" - english.title = "English" - english.code = "en" - - let korean = SendMoneyCountryViewModel() - korean.name = "korean_language_text".localized() - korean.id = "korean_language_text" - korean.title = "한국" - korean.code = "kr" - - let cambodia = SendMoneyCountryViewModel() - cambodia.name = "cambodia_lanugage_text".localized() - cambodia.id = "cambodia_lanugage_text" - cambodia.title = "ភាសាខ្មែរ" - cambodia.code = "kh" - - - let srilanka = SendMoneyCountryViewModel() - srilanka.name = "srilanka_lanugage_text".localized() - srilanka.id = "srilanka_lanugage_text" - srilanka.title = "සිංහල" - srilanka.code = "lk" - - let myanmar = SendMoneyCountryViewModel() - myanmar.name = "myanmar_language_text".localized() - myanmar.id = "myanmar_language_text" - myanmar.title = "Myanmar" - myanmar.code = "mm" - - - let russian = SendMoneyCountryViewModel() - russian.name = "russian_langugae_text".localized() - russian.id = "русский" - russian.title = "русский" - russian.code = "ru" - - let vietnam = SendMoneyCountryViewModel() - vietnam.name = "vietnam_language_text".localized() - vietnam.id = "vietnam_language_text" - vietnam.title = "Tiếng Việt" - vietnam.code = "vn" - - let thailand = SendMoneyCountryViewModel() - thailand.name = "thailand_language_text".localized() - thailand.id = "thailand_language_text" - thailand.title = "ไทย" - thailand.code = "th" - - let indonesia = SendMoneyCountryViewModel() - indonesia.name = "indonesia_language_text".localized() - indonesia.id = "indonesia_language_text" - indonesia.title = "Bahasa Indonesia" - indonesia.code = "id" - - let mongolia = SendMoneyCountryViewModel() - mongolia.name = "mongolia_language_text".localized() - mongolia.id = "mongolia_language_text" - mongolia.title = "Монгол" - mongolia.code = "mn" - - let nepal = SendMoneyCountryViewModel() - nepal.name = "nepali_language_text".localized() - nepal.id = "nepali_language_text" - nepal.title = "नेपाली" - nepal.code = "np" - - let bangladesh = SendMoneyCountryViewModel() - bangladesh.name = "bengali_language_text".localized() - bangladesh.id = "bengali_language_text" - bangladesh.title = "বাংলা" - bangladesh.code = "bd" - - let uzbek = SendMoneyCountryViewModel() - uzbek.name = "uzbek_language_text".localized() - uzbek.id = "uzbek_language_text" - uzbek.title = "O'zbek" - uzbek.code = "uz" - let languages = [english, korean, cambodia, srilanka, thailand, indonesia, mongolia, myanmar, nepal, bangladesh, russian, uzbek, vietnam ] -// let languages = [english, korean, cambodia, srilanka, myanmar, russian, vietnam, thailand, indonesia, mongolia] - return languages - } + // let languages = [english, korean, cambodia, srilanka, myanmar, russian, vietnam, thailand, indonesia, mongolia] + return languages + } } diff --git a/GMERemittance/Utility/GMEAlert/GMEAlertViewController.xib b/GMERemittance/Utility/GMEAlert/GMEAlertViewController.xib index 1c19efc3..395fd917 100644 --- a/GMERemittance/Utility/GMEAlert/GMEAlertViewController.xib +++ b/GMERemittance/Utility/GMEAlert/GMEAlertViewController.xib @@ -38,26 +38,28 @@ - + - + - + - + - - +