Advertisement
Guest User

Untitled

a guest
Jan 8th, 2018
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.75 KB | None | 0 0
  1. //
  2. // ViewController.swift
  3. // MatchpointGPS
  4. //
  5. // Created by Amrit Singh on 8/10/17.
  6. // Copyright © 2017 foxsolution. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import IQKeyboardManagerSwift
  11. import MapKit
  12. import Alamofire
  13. import SwiftyJSON
  14. import GoogleSignIn
  15. import FBSDKCoreKit
  16. import FBSDKLoginKit
  17. import MIBadgeButton_Swift
  18.  
  19. struct defaultsKeys {
  20.  
  21. static let support_number = "support_number"
  22. static let token = "token"
  23. static let user = "user"
  24. static let is_agreement_shown = "is_agreement_shown"
  25. static let customer_name = "customer_name"
  26. static let profile_pic = "profile_pic"
  27. static let lang_code = "lang_code"
  28. static let saveparameter = "saveparameter"
  29. static let fcm_token_new = "fcm_token_new"
  30. static let fcm_token_old = "fcm_token_old"
  31. static let is_dnd_active = "is_dnd_active"
  32. }
  33.  
  34. struct AlertType {
  35.  
  36. static let SPEED = 1,BOUNDARY = 2,IGNITION = 14,TOWING = 20
  37. }
  38.  
  39. enum ButtonType {
  40. case left
  41. case right
  42. }
  43.  
  44. //STATUS : 1 = Connection Lost , 2 = Moving , 3 = Idling, 4 = Parked,
  45. //VEHICLE_TYPE : 1=car,2 = bike , 3 = bvus, 4 = garbage, 5 = ambulance , 6= fire truck,7=taxi,8=vip"
  46.  
  47. final class Singleton
  48. {
  49. static let sharedInstance = Singleton()
  50. private init() {}
  51. }
  52.  
  53. class BaseViewController: UIViewController, SlideMenuDelegate, UIGestureRecognizerDelegate
  54. {
  55. let modelName = UIDevice.current.modelName
  56.  
  57. var presentWindow : UIWindow!
  58. var btnBack : UIButton!
  59. var backButton : UIBarButtonItem!
  60. var btnShowMenu : UIButton!
  61. var menuButton : UIBarButtonItem!
  62. var btnBell : MIBadgeButton!
  63. var bellButton : UIBarButtonItem!
  64. var btnHome : UIButton!
  65. var homeButton : UIBarButtonItem!
  66. var btnClose : UIButton!
  67. var closeButton : UIBarButtonItem!
  68.  
  69. var btnSharee : UIButton!
  70. var shareButton : UIBarButtonItem!
  71.  
  72. var btnLogo : UIButton!
  73. var logoButton : UIBarButtonItem!
  74.  
  75. var rightsBarButtons : [UIBarButtonItem]!
  76.  
  77. var lang = Language()
  78. var targetLang = UserDefaults.standard.object(forKey: "selectedLanguage") as? String
  79. var notificationdata:String!
  80. var varraybase = [String]()
  81. var snarraybase = [Int]()
  82.  
  83.  
  84. @IBOutlet weak var btn_forgotpassword: UIButton!
  85. @IBOutlet weak var btn_helpline: UIButton!
  86.  
  87. var returnKeyHandler:IQKeyboardReturnKeyHandler!
  88. let defaults = UserDefaults.standard
  89.  
  90.  
  91. var reginTapGesture: UITapGestureRecognizer!
  92.  
  93. deinit{
  94. NotificationCenter.default.removeObserver(self)
  95. }
  96.  
  97.  
  98. override func viewDidLoad()
  99. {
  100. super.viewDidLoad()
  101.  
  102. NotificationCenter.default.addObserver(
  103. self,
  104. selector: #selector(AppDelegate.application(_:didReceiveRemoteNotification:)),
  105. name: NSNotification.Name(rawValue: "LANGUAGE_WILL_CHANGE"),
  106. object: nil)
  107.  
  108. targetLang = (targetLang != nil) ? targetLang : "en"
  109.  
  110. // Do any additional setup after loading the view, typically from a nib.
  111. self.setBackbutton()
  112.  
  113. presentWindow = UIApplication.shared.windows.first
  114.  
  115. // IQKeyboardManager.sharedManager().disabledToolbarClasses.append(BaseViewController.self)
  116.  
  117. IQKeyboardManager.sharedManager().keyboardDistanceFromTextField = 10;
  118. returnKeyHandler = IQKeyboardReturnKeyHandler(controller: self)
  119.  
  120. bellItem()
  121. menuItem()
  122. homeItem()
  123. closeItem()
  124. backItem()
  125. shareItem()
  126. logoItem()
  127.  
  128. NotificationCenter.default.addObserver(self, selector: #selector(BaseViewController.languageDidChangeNotification(_:)), name: NSNotification.Name(rawValue: "LANGUAGE_DID_CHANGE"), object: nil)
  129.  
  130. NotificationCenter.default.addObserver(self, selector: #selector(BaseViewController.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "Notification Recieved"), object: nil)
  131.  
  132. NotificationCenter.default.addObserver(self, selector: #selector(BaseViewController.updateNotifcationCountView), name: NSNotification.Name(rawValue: NOTIFICATION_UPDATE), object: nil)
  133. languageDidChange()
  134.  
  135. //add tapgesture
  136. reginTapGesture = UITapGestureRecognizer(target: self, action: #selector(reginTapView(_:)))
  137. reginTapGesture.numberOfTapsRequired = 1
  138. reginTapGesture.delegate = self
  139. view.addGestureRecognizer(reginTapGesture)
  140. reginTapGesture.cancelsTouchesInView = false
  141.  
  142. }
  143.  
  144. func showSpinningWheel(_ notification: NSNotification) {
  145.  
  146. notificationdata = notification.userInfo!["data"] as? String
  147. let storyBoard = UIStoryboard(name: "AlertModeStoryboard", bundle: nil)
  148. let destVC = storyBoard.instantiateViewController(withIdentifier: "NotificationViewController") as! NotificationViewController
  149. destVC.notiappear = notificationdata
  150. self.navigationController?.pushViewController(destVC, animated: true)
  151.  
  152. }
  153.  
  154. func updateNotifcationCountView(_ notification: NSNotification) {
  155. self.updateNotificationCount()
  156. }
  157.  
  158. override func viewWillAppear(_ animated: Bool) {
  159. if defaults.value(forKey: defaultsKeys.token) != nil{
  160. updateNotificationCount()
  161. }
  162. }
  163.  
  164. func updateNotificationCount(){
  165. var parameters = ["token":defaults.value(forKey:defaultsKeys.token ) ?? ""] as [String : Any]
  166. parameters["user"] = defaults.value(forKey:defaultsKeys.user)
  167. let network = NetworkCall()
  168. network.apicall(api: "track/today_notifications_count/", parameters: parameters, isHud: false, completion: { response in
  169. if network.is_success!
  170. {
  171. let data = JSON(network.data)
  172. self.btnBell.badgeString = String(describing: data["count"].intValue)
  173. }
  174. })
  175. }
  176.  
  177. @objc func reginTapView(_ sender: UITapGestureRecognizer)
  178. {
  179. self.view.endEditing(true)
  180. }
  181.  
  182. func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
  183. {
  184. if ((touch.view as? UITableView) != nil)
  185. {
  186. return false
  187. }
  188. return true
  189. }
  190.  
  191.  
  192. @objc func languageDidChangeNotification(_ notification:Notification){
  193.  
  194. languageDidChange()
  195. }
  196.  
  197. func languageDidChange()
  198. {
  199. if btn_forgotpassword != nil
  200. {
  201. self.btn_forgotpassword.setTitle(lang.txt_forgot_password, for: .normal)
  202. }
  203.  
  204. if btn_helpline != nil
  205. {
  206. btn_helpline.setTitle(lang.txtNeedHelp, for: .normal)
  207. btn_helpline.titleLabel?.numberOfLines = 0
  208. }
  209. }
  210.  
  211. func setWhiteNavigationBar()
  212. {
  213.  
  214. self.navigationController?.navigationBar.setBackgroundImage(UIImage(color: .white), for: .default)
  215. self.navigationController?.navigationBar.shadowImage = UIImage(color: UIColor.lightGray.withAlphaComponent(1.0))
  216. self.navigationController?.navigationBar.isTranslucent = false;
  217.  
  218. self.navigationController?.navigationBar.barTintColor = UIColor.white
  219.  
  220. self.navigationController?.navigationBar.tintColor = UIColor.white
  221. self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black, NSFontAttributeName: UIFont.systemFont(ofSize: 18)]
  222.  
  223. }
  224.  
  225. func setTransperntNavigationBar()
  226. {
  227. self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
  228. self.navigationController?.navigationBar.shadowImage = UIImage()
  229. self.navigationController?.navigationBar.isTranslucent = true;
  230.  
  231. self.navigationController?.navigationBar.barTintColor = UIColor.white
  232. self.navigationController?.navigationBar.tintColor = UIColor.white
  233. self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
  234. }
  235.  
  236. func bellItem()
  237. {
  238.  
  239. btnBell = MIBadgeButton(type: .custom)
  240. //btnBell.frame = CGRect(x: 0, y: 0, width: 35, height: 30)
  241. btnBell.widthAnchor.constraint(equalToConstant: 35.0).isActive = true
  242. btnBell.heightAnchor.constraint(equalToConstant: 30.0).isActive = true
  243. btnBell.setImage(UIImage(named: "icon-bell"), for: .normal)
  244. btnBell.imageView?.contentMode = .scaleAspectFit
  245. btnBell.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  246. btnBell.addTarget(self, action: #selector(BaseViewController.onBellButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  247. bellButton = UIBarButtonItem(customView: btnBell)
  248. bellButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  249. btnBell.badgeString = ""
  250.  
  251. }
  252.  
  253. func homeItem()
  254. {
  255. btnHome = UIButton(type: .custom)
  256. btnHome.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
  257. btnHome.setImage(UIImage(named: "icon-home"), for: .normal)
  258. btnHome.imageView?.contentMode = .scaleAspectFit
  259. btnHome.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  260. btnHome.addTarget(self, action: #selector(BaseViewController.onHomeButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  261. homeButton = UIBarButtonItem(customView: btnHome)
  262. homeButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  263. }
  264.  
  265. func menuItem()
  266. {
  267. btnShowMenu = UIButton(type: .custom)
  268. btnShowMenu.frame = CGRect(x: 0, y: 0, width: 35, height: 18)
  269. //btnShowMenu.setImage(UIImage.defaultMenuImage(), for: .normal)
  270. btnShowMenu.setImage(#imageLiteral(resourceName: "icon-hambuger"), for: .normal)
  271. btnShowMenu.widthAnchor.constraint(equalToConstant: 35.0).isActive = true
  272. btnShowMenu.heightAnchor.constraint(equalToConstant: 18.0).isActive = true
  273. btnShowMenu.imageView?.contentMode = .scaleAspectFit
  274. btnShowMenu.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  275. btnShowMenu.addTarget(self, action: #selector(BaseViewController.onSlideMenuButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  276. menuButton = UIBarButtonItem(customView: btnShowMenu)
  277. menuButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  278. }
  279.  
  280. func closeItem()
  281. {
  282. btnClose = UIButton(type: .custom)
  283. btnClose.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
  284. btnClose.setImage(UIImage.defaultCloseImage(), for: .normal)
  285. btnClose.imageView?.contentMode = .scaleAspectFit
  286. btnClose.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  287. btnClose.addTarget(self, action: #selector(BaseViewController.onCloseButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  288. closeButton = UIBarButtonItem(customView: btnClose)
  289. closeButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  290. }
  291.  
  292. func logoItem()
  293. {
  294. btnLogo = UIButton(type: .custom)
  295. btnLogo.isUserInteractionEnabled = false
  296. btnLogo.frame = CGRect(x: 0, y: 0, width: 180, height: 44)
  297. btnLogo.setImage(UIImage(named: "logo-orange"), for: .normal)
  298. btnLogo.widthAnchor.constraint(equalToConstant: 180.0).isActive = true
  299. btnLogo.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
  300. btnLogo.imageEdgeInsets = UIEdgeInsetsMake(0, -5, 0, 0)
  301. btnLogo.imageView?.contentMode = .scaleAspectFit
  302. btnLogo.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  303. btnLogo.addTarget(self, action: #selector(BaseViewController.onLogoButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  304. logoButton = UIBarButtonItem(customView: btnLogo)
  305. logoButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  306. }
  307.  
  308. func shareItem()
  309. {
  310. btnSharee = UIButton(type: .custom)
  311. btnSharee.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
  312. btnSharee.setImage(UIImage(named: "icon-share"), for: .normal)
  313. btnSharee.imageView?.contentMode = .scaleAspectFit
  314. btnSharee.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  315. btnSharee.addTarget(self, action: #selector(BaseViewController.onShareButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  316. shareButton = UIBarButtonItem(customView: btnSharee)
  317. shareButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  318. }
  319.  
  320. func backItem()
  321. {
  322. btnBack = UIButton(type: .custom)
  323. btnBack.frame = CGRect(x: 0, y: 0, width: 35, height: 30)
  324. btnBack.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10)
  325. btnBack.setImage(UIImage(named: "icon-back"), for: .normal)
  326. btnBack.widthAnchor.constraint(equalToConstant: 35.0).isActive = true
  327. btnBack.heightAnchor.constraint(equalToConstant: 30.0).isActive = true
  328. btnBack.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  329. btnBack.addTarget(self, action: #selector(BaseViewController.onBackButtonPressed(_:)), for: UIControlEvents.touchUpInside);
  330.  
  331. backButton = UIBarButtonItem(customView: btnBack)
  332. backButton.tintColor = #colorLiteral(red: 0.4789211154, green: 0.5131568313, blue: 0.5401799083, alpha: 1)
  333. }
  334.  
  335.  
  336. func addRightBarButtonItems(items:[UIBarButtonItem])
  337. {
  338. self.navigationItem.rightBarButtonItems = items //[menuButton, bellButton]
  339. }
  340.  
  341. func addLeftBarButtonItems(items:[UIBarButtonItem])
  342. {
  343. self.navigationItem.leftBarButtonItems = items //[menuButton, bellButton]
  344. }
  345.  
  346.  
  347. // func addRightBarButtonItemsHomeBellMenu()
  348. // {
  349. // self.navigationItem.rightBarButtonItems = [menuButton, bellButton, homeButton]
  350. // }
  351.  
  352. func addBackbutton()
  353. {
  354. btnBack.setImage(#imageLiteral(resourceName: "icon-back"), for: .normal)
  355. self.navigationItem.leftBarButtonItem = backButton;
  356. }
  357.  
  358. func addWhiteBackbutton()
  359. {
  360. btnBack.setImage(#imageLiteral(resourceName: "icon-back-white"), for: .normal)
  361. self.navigationItem.leftBarButtonItem = backButton;
  362. }
  363.  
  364. func setBackbutton()
  365. {
  366. navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
  367. }
  368.  
  369. func addClosebutton(buttonType:ButtonType)
  370. {
  371. switch buttonType
  372. {
  373. case .left:
  374. self.navigationItem.leftBarButtonItem = closeButton;
  375. break
  376. case .right:
  377. self.navigationItem.rightBarButtonItem = closeButton;
  378. break
  379. }
  380. }
  381.  
  382. @objc func onBackButtonPressed(_ sender : UIButton)
  383. {
  384. // _ = navigationController?.popViewController(animated: true)
  385. }
  386.  
  387. @objc func onCloseButtonPressed(_ sender : UIButton)
  388. {
  389. }
  390.  
  391. @objc func onHomeButtonPressed(_ sender : UIButton)
  392. {
  393. }
  394.  
  395. @objc func onBellButtonPressed(_ sender : UIButton)
  396. {
  397. }
  398.  
  399. @objc func onShareButtonPressed(_ sender : UIButton)
  400. {
  401. }
  402.  
  403. @objc func onLogoButtonPressed(_ sender : UIButton)
  404. {
  405. }
  406.  
  407. @objc func onSlideMenuButtonPressed(_ sender : UIButton)
  408. {
  409. btnShowMenu.alpha = 0.0;
  410. //btnBell.alpha = 0.0;
  411.  
  412. if (sender.tag == 10)
  413. {
  414. // To Hide Menu If it already there
  415. //slideMenuItemSelectedAtIndex(-1);
  416. sender.tag = 0;
  417.  
  418. let viewMenuBack : UIView = view.subviews.last!
  419. // viewMenuBack.backgroundColor = UIColor.clearColor()
  420.  
  421. UIView.animate(withDuration: 1.0, animations: {() -> Void in
  422. var frameMenu : CGRect = viewMenuBack.frame
  423. frameMenu.origin.x = 2 * UIScreen.main.bounds.size.width
  424. viewMenuBack.frame = frameMenu
  425. viewMenuBack.layoutIfNeeded()
  426. viewMenuBack.backgroundColor = UIColor.clear
  427. //self.btnShowMenu.setImage(UIImage.defaultMenuImage(), for: .normal)
  428. self.btnShowMenu.setImage(#imageLiteral(resourceName: "icon-hambuger"), for: .normal)
  429.  
  430. self.btnShowMenu.alpha = 1.0
  431. }, completion: { (finished) -> Void in
  432. viewMenuBack.removeFromSuperview()
  433. })
  434. return
  435. }
  436.  
  437. sender.isEnabled = false
  438. sender.tag = 10
  439.  
  440. let storyboard = UIStoryboard(name: Storyboard.Main, bundle: nil)
  441. let menuVC : SlideMenuViewController = storyboard.instantiateViewController(withIdentifier: "SlideMenuViewController") as! SlideMenuViewController
  442. menuVC.showsShadows = false
  443. menuVC.view.backgroundColor = UIColor.clear;
  444. menuVC.btnMenu = sender
  445. menuVC.delegate = self
  446. self.view.addSubview(menuVC.view)
  447. self.addChildViewController(menuVC)
  448. menuVC.view.layoutIfNeeded()
  449.  
  450. menuVC.view.frame=CGRect(x: 2*UIScreen.main.bounds.size.width, y: 0, width: UIScreen.main.bounds.size.width, height: self.view.bounds.size.height);
  451.  
  452. UIView.animate(withDuration: 1.0, animations: { () -> Void in
  453. menuVC.view.frame=CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: self.view.bounds.size.height);
  454. sender.isEnabled = true
  455.  
  456. self.btnShowMenu.setImage(UIImage.defaultCloseImage(), for: .normal)
  457. self.btnShowMenu.alpha = 1.0
  458.  
  459. }, completion: { (finished) -> Void in
  460. menuVC.view.backgroundColor = UIColor.init(white: 0, alpha: 0.5)
  461.  
  462. })
  463.  
  464. }
  465.  
  466. func slideMenuItemSelectedAtIndex(_ index: Int)
  467. {
  468. btnShowMenu.alpha = 0.0;
  469. UIView.animate(withDuration: 1.0, animations: {() -> Void in
  470. //self.btnShowMenu.setImage(UIImage.defaultMenuImage(), for: .normal)
  471. self.btnShowMenu.setImage(#imageLiteral(resourceName: "icon-hambuger"), for: .normal)
  472.  
  473. self.btnShowMenu.alpha = 1.0
  474. }, completion: { (finished) -> Void in
  475. })
  476.  
  477. let topViewController : UIViewController = self.navigationController!.topViewController!
  478. print("View Controller is : \(topViewController) \n", terminator: "")
  479. switch(index)
  480. {
  481. case 0:
  482. openDrawerViewController(storyboard: Storyboard.ProfileStoryboard, identifier: Identifier.ProfilePageViewController)
  483. break
  484. case 1:
  485. openDrawerViewController(storyboard: Storyboard.Main, identifier: Identifier.VehicleListViewController)
  486. break
  487. case 2:
  488. openDrawerViewController(storyboard: Storyboard.Main, identifier: Identifier.DriverListViewController)
  489. break
  490. case 3:
  491. openDrawerViewController(storyboard: Storyboard.Main, identifier: Identifier.TripsViewController)
  492. break
  493. case 4:
  494. getVehicleListData()
  495. //openDrawerViewController(storyboard: Storyboard.ReportsStoryboard, identifier: Identifier.ReportsViewController)
  496. break
  497. case 5:
  498. openDrawerViewController(storyboard: Storyboard.AlertModeStoryboard, identifier: Identifier.SelectAlertModeViewController)
  499. break
  500. case 6:
  501. openDrawerViewController(storyboard: Storyboard.UserProfileStoryboard, identifier: Identifier.UserProfileViewController)
  502. break
  503. case 7:
  504. openDrawerViewController(storyboard: Storyboard.Main, identifier: Identifier.SupportViewController)
  505. break
  506. case 8:
  507. //comment here for tutorials
  508. break
  509. case 9:
  510. print("Logout\n", terminator: "")
  511. logout()
  512.  
  513. break
  514. default:
  515. print("default\n", terminator: "")
  516. }
  517. }
  518.  
  519.  
  520. func openDrawerViewController(storyboard:String, identifier:String){
  521. DispatchQueue.main.async{
  522. // Your code to run on the main queue/thread
  523. let storyboard = UIStoryboard(name: storyboard, bundle: nil)
  524. let destViewController = storyboard.instantiateViewController(withIdentifier: identifier)
  525. let topViewController : UIViewController = self.navigationController!.topViewController!
  526. if (topViewController.restorationIdentifier! == destViewController.restorationIdentifier!){
  527. }
  528. else
  529. {
  530. for vc in (self.navigationController?.viewControllers)!
  531. {
  532.  
  533. if (vc.classForCoder == destViewController.classForCoder)
  534. {
  535. self.navigationController!.popToViewController(vc, animated: true)
  536. }
  537. }
  538. self.navigationController!.pushViewController(destViewController, animated: true)
  539.  
  540. };
  541. }
  542. }
  543.  
  544. func openViewControllerBasedOn(storyboard:String, identifier:String) -> UIViewController
  545. {
  546. let storyboard = UIStoryboard(name: storyboard, bundle: nil)
  547. let destViewController = storyboard.instantiateViewController(withIdentifier: identifier)
  548. let topViewController : UIViewController = self.navigationController!.topViewController!
  549. if (topViewController.restorationIdentifier! == destViewController.restorationIdentifier!){
  550. print("Same VC")
  551. }
  552. else
  553. {
  554. for vc in (self.navigationController?.viewControllers)!
  555. {
  556. if (vc.classForCoder == destViewController.classForCoder)
  557. {
  558. print("Pop To VC")
  559. self.navigationController!.popToViewController(vc, animated: true)
  560. return vc
  561. }
  562. }
  563. if destViewController is AgreementViewController{
  564. (destViewController as! AgreementViewController).isViewMode = true
  565. }
  566.  
  567. self.navigationController!.pushViewController(destViewController, animated: true)
  568. }
  569. return destViewController
  570. }
  571.  
  572. func getPreviousDate(days:Int,includeToday:Bool) -> (String,String){
  573.  
  574. let lastWeekDate = NSCalendar.current.date(byAdding: .day, value: days, to: NSDate() as Date)
  575. let dateFormatter = DateFormatter()
  576. dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  577. dateFormatter.timeZone = TimeZone(identifier: "UTC")
  578.  
  579. let fromDate:String = dateFormatter.string(from: lastWeekDate!)
  580.  
  581. let toDate:String = dateFormatter.string(from: Date())
  582. return(fromDate,toDate)
  583. }
  584.  
  585. func setAppSession(data:[String:Any])
  586. {
  587. setUserDefaults(value: data[defaultsKeys.user] ?? 0, key: defaultsKeys.user)
  588. setUserDefaults(value: data[defaultsKeys.token] ?? "", key: defaultsKeys.token)
  589. setUserDefaults(value: data[defaultsKeys.customer_name] ?? "", key: defaultsKeys.customer_name)
  590. setUserDefaults(value: data[defaultsKeys.profile_pic] ?? "", key: defaultsKeys.profile_pic)
  591. setUserDefaults(value: data[defaultsKeys.lang_code] ?? "en", key: defaultsKeys.lang_code)
  592. setUserDefaults(value: data[defaultsKeys.is_agreement_shown] ?? 0, key: defaultsKeys.is_agreement_shown)
  593. }
  594.  
  595.  
  596. func setUserDefaults(value:Any, key: String)
  597. {
  598. UserDefaults.standard.setValue(value, forKey: key)
  599. UserDefaults.standard.synchronize()
  600. }
  601.  
  602. func getUserDefaults(key: String) -> Any
  603. {
  604. return UserDefaults.standard.object(forKey: key) ?? ""
  605. }
  606.  
  607. func removeAppSession()
  608. {
  609. if GIDSignIn.sharedInstance().hasAuthInKeychain()
  610. {
  611. GIDSignIn.sharedInstance().signOut()
  612. }
  613.  
  614. let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
  615. fbLoginManager.logOut()
  616. let userdefaults = UserDefaults.standard
  617. let userId = defaults.string(forKey:defaultsKeys.token )
  618. var arrSavedSerialNumber = [String]()
  619. if let arr = UserDefaults.standard.stringArray(forKey: userId!)
  620. {
  621. arrSavedSerialNumber = arr
  622. }
  623. if !arrSavedSerialNumber.isEmpty {
  624. for arrSavedSerialNumber in arrSavedSerialNumber {
  625. userdefaults.removeObject(forKey: arrSavedSerialNumber)
  626. }
  627. }
  628. userdefaults.removeObject(forKey: defaultsKeys.user)
  629. userdefaults.removeObject(forKey: defaultsKeys.profile_pic)
  630. userdefaults.removeObject(forKey: defaultsKeys.lang_code)
  631. userdefaults.removeObject(forKey: defaultsKeys.token)
  632. userdefaults.removeObject(forKey: defaultsKeys.customer_name)
  633.  
  634.  
  635. }
  636.  
  637. func removeUserDefaults(key: String)
  638. {
  639. UserDefaults.standard.removeObject(forKey: key)
  640. UserDefaults.standard.synchronize()
  641. }
  642.  
  643. // MARK: - IBAction
  644. @IBAction func button_forgotpassword_pressed(_ sender: UIButton)
  645. {
  646. self.performSegue(withIdentifier: "forgotpass", sender: self)
  647. }
  648.  
  649. @IBAction func button_helpline_pressed(_ sender: UIButton) {
  650.  
  651. let numberstr = String(describing: getUserDefaults(key: defaultsKeys.support_number))
  652. callNumber(phoneNumber: numberstr)
  653.  
  654. }
  655.  
  656. func callNumber(phoneNumber:String) {
  657.  
  658. if let url = URL(string: "tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) {
  659. if #available(iOS 10, *) {
  660. UIApplication.shared.open(url)
  661. } else {
  662. UIApplication.shared.openURL(url)
  663. }
  664. }
  665.  
  666. // if let phoneCallURL = URL(string: "tel://\(phoneNumber)") {
  667. //
  668. // let application:UIApplication = UIApplication.shared
  669. // if (application.canOpenURL(phoneCallURL)) {
  670. // application.open(phoneCallURL, options: [:], completionHandler: nil)
  671. // }
  672. // }
  673. }
  674.  
  675. func getCenterCoordinate(annotations:[CustomPointAnnotation]) -> CLLocationCoordinate2D
  676. {
  677. var minLat: CLLocationDegrees = CLLocationDegrees(MAXFLOAT)
  678. var minLng: CLLocationDegrees = CLLocationDegrees(MAXFLOAT)
  679. var maxLat: CLLocationDegrees = -200
  680. var maxLng:CLLocationDegrees = -200
  681.  
  682. for annotation in annotations
  683. {
  684. minLat = min(minLat, annotation.coordinate.latitude)
  685. minLng = min(minLng, annotation.coordinate.longitude);
  686.  
  687. maxLat = max(maxLat, annotation.coordinate.latitude);
  688. maxLng = max(maxLng, annotation.coordinate.longitude);
  689.  
  690. }
  691.  
  692. let coordinateOrigin:CLLocationCoordinate2D = CLLocationCoordinate2DMake(minLat, minLng);
  693. let coordinateMax: CLLocationCoordinate2D = CLLocationCoordinate2DMake(maxLat, maxLng);
  694.  
  695. let upperLeft: MKMapPoint = MKMapPointForCoordinate(coordinateOrigin);
  696. let lowerRight: MKMapPoint = MKMapPointForCoordinate(coordinateMax);
  697.  
  698. //Create the map rect
  699. let mapRect:MKMapRect = MKMapRectMake(upperLeft.x,
  700. upperLeft.y,
  701. lowerRight.x - upperLeft.x,
  702. lowerRight.y - upperLeft.y);
  703.  
  704. //Create the region
  705. let region:MKCoordinateRegion = MKCoordinateRegionForMapRect(mapRect);
  706.  
  707. //THIS HAS THE CENTER, it should include spread
  708. let centerCoordinate: CLLocationCoordinate2D = region.center;
  709.  
  710. return centerCoordinate
  711. }
  712.  
  713. func createMarker(vehicle: Vehicle) -> CustomPointAnnotation
  714. {
  715. let latitude = Double(vehicle.strLat!)
  716. let longitude = Double(vehicle.strLong!)
  717. let coordinate = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
  718. let customMarker = CustomPointAnnotation(coordinate: coordinate, title: "", subtitle: "")
  719. if (vehicle.strSerial_no != nil)
  720. {
  721. customMarker.serialNo = vehicle.strSerial_no
  722. customMarker.reuseIdentifier = vehicle.strSerial_no
  723. }
  724. else
  725. {
  726. customMarker.serialNo = "0"
  727. customMarker.reuseIdentifier = "-"
  728. }
  729. if (vehicle.status != nil)
  730. {
  731. switch (vehicle.status)!
  732. {
  733. case VehicleStatus.connectionlost:
  734. customMarker.image = UIImage.connectionlost
  735. case VehicleStatus.moving:
  736. customMarker.image = UIImage.moving
  737. case VehicleStatus.idle:
  738. customMarker.image = UIImage.idle
  739. case VehicleStatus.parked:
  740. customMarker.image = UIImage.parked
  741. }
  742. }
  743. else
  744. {
  745. customMarker.image = UIImage.connectionlost
  746. }
  747.  
  748. return customMarker
  749.  
  750. }
  751.  
  752.  
  753. func convertToDictionary(text: String) -> [String: Any]?
  754. {
  755. if let data = text.data(using: .utf8) {
  756. do {
  757. return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
  758. } catch {
  759. print(error.localizedDescription)
  760. apppresentWindow?.makeToast(message: self.lang.something_went_wrong)
  761. }
  762. }
  763. return nil
  764. }
  765.  
  766. func getAddress(latitude:Double, longitude:Double, completion:@escaping (String) -> Void)
  767. {
  768. // let longitude :CLLocationDegrees = Double(longitude)! //-122.0312186
  769. // let latitude :CLLocationDegrees = Double(latitude)! // 37.33233141
  770.  
  771. let location = CLLocation(latitude: latitude, longitude: longitude) //changed!!!
  772. print(location)
  773.  
  774. CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
  775. print(location)
  776.  
  777. if error != nil {
  778. print("Reverse geocoder failed with error" + (error?.localizedDescription)!)
  779. apppresentWindow?.makeToast(message: self.lang.something_went_wrong)
  780. return
  781. }
  782.  
  783. if (placemarks?.count)! > 0 {
  784. let pm = placemarks?[0]
  785. var addressString : String = ""
  786. if pm?.subLocality != nil {
  787. addressString = addressString + (pm?.subLocality!)! + ", "
  788. }
  789. if pm?.thoroughfare != nil {
  790. addressString = addressString + (pm?.thoroughfare!)! + ", "
  791. }
  792. if pm?.locality != nil {
  793. addressString = addressString + (pm?.locality!)! + ", "
  794. }
  795. if pm?.country != nil {
  796. addressString = addressString + (pm?.country!)! + ", "
  797. }
  798. if pm?.postalCode != nil {
  799. addressString = addressString + (pm?.postalCode!)! + " "
  800. }
  801. completion(addressString)
  802. }
  803. else {
  804. print("Problem with the data received from geocoder")
  805. apppresentWindow?.makeToast(message: self.lang.something_went_wrong)
  806. }
  807. })
  808. }
  809.  
  810.  
  811. func invite_authorised_user(list:[String])
  812. {
  813. //{"user":3759,"app_version":2.0,"token":"4ot-d64a39ee1a64648eedcc","mobile_number_list":[]}
  814. //let arr = [7875512881]//,9011877864]
  815. let parameters:Parameters = ["app_version":Miscellaneous.getAppVersion(),"token":defaults.value(forKey:defaultsKeys.token)!,"user":defaults.value(forKey:defaultsKeys.user)!,"mobile_number_list":list]
  816.  
  817. //http://app-beta01.do-sg.mpgps.aspade.in/track/invite_authorised_user/
  818. let network = NetworkCall()
  819. network.apicalljsonencoding(api: "track/invite_authorised_user/", parameters: parameters, isHud: true, completion: { response in
  820.  
  821. let popup : LogoutView = LogoutView(frame: self.navigationController!.view.bounds)
  822. popup.bgView.backgroundColor = UIColor.groupTableViewBackground
  823. popup.msgLable.textColor = .gray
  824. if network.is_success
  825. {
  826. if network.response_code == 200
  827. {
  828. popup.show(view: self.navigationController!.view, image: #imageLiteral(resourceName: "icon-tickgreen"), strMessage: network.response_message, timeInterval: 4.0, hideOntap: true, complete: { () in
  829. self.dismiss(animated: true, completion: nil)
  830. })
  831. }
  832. else
  833. {
  834. apppresentWindow?.makeToast(message: self.lang.something_went_wrong)
  835. }
  836. }
  837. else
  838. {
  839. if network.response_code == 509
  840. {
  841. popup.show(view: self.navigationController!.view, image: #imageLiteral(resourceName: "icon-tickgreen"), strMessage:network.response_message, timeInterval: 4.0, hideOntap: true, complete: { () in
  842. self.dismiss(animated: true, completion: nil)
  843. })
  844. }
  845. else
  846. {
  847. apppresentWindow?.makeToast(message: self.lang.something_went_wrong)
  848. }
  849. }
  850. })
  851. }
  852.  
  853.  
  854. func getVehicleListData()
  855. {
  856. //{"user":3759,"app_version":2.0,"token":"4ot-d64a39ee1a64648eedcc"}
  857. var parameters = ["app_version":Miscellaneous.getAppVersion()] as [String : Any]
  858. parameters["token"] = defaults.value(forKey:defaultsKeys.token )
  859. parameters["user"] = defaults.value(forKey:defaultsKeys.user)
  860.  
  861. let network = NetworkCall()
  862.  
  863. network.apicall(api: "track/vehicle_list/", parameters: parameters, isHud:true, completion: { response in
  864. //print(response)
  865. if network.is_success!
  866. {
  867. let data = network.data as! [[String:Any]]
  868. var arrVehicle = [Vehicle]()
  869. for dict in data {
  870. let vehicle = Vehicle()
  871.  
  872. if let srNo = dict["serial_no"] as? Int{
  873. vehicle.strSerial_no = String(srNo)
  874. }
  875. vehicle.strVehicle_name = dict["vehicle_name"] as? String
  876. vehicle.isAdded = false
  877.  
  878. arrVehicle.append(vehicle)
  879. }
  880. let vc = self.openViewControllerBasedOn(storyboard: Storyboard.ReportsStoryboard, identifier: Identifier.ReportsViewController) as! ReportsViewController
  881. vc.arrVehicle = arrVehicle
  882. }
  883. })
  884.  
  885. }
  886.  
  887. func logout()
  888. {
  889.  
  890. let parameters = ["app_version": Miscellaneous.getAppVersion(),"token": defaults.value(forKey:defaultsKeys.token)!,"user": defaults.value(forKey:defaultsKeys.user)!,"fcm_token": UserDefaults.standard.value(forKey: defaultsKeys.fcm_token_new )!] as [String : Any]
  891. Alamofire.request("http://139.59.94.211/auth/logout/", method: .post, parameters: parameters).responseJSON { response in
  892.  
  893. self.removeAppSession()
  894. let popup : LogoutView = LogoutView(frame: self.navigationController!.view.bounds)
  895. popup.delegate = self
  896. popup.show(view: self.navigationController!.view, image: #imageLiteral(resourceName: "icon-tickorange"),strMessage: "Successfully Logged out", timeInterval: 3.0, hideOntap: true, complete: { () in
  897. _ = setRootViewContoller(storyboardName: Storyboard.SignInStoryboard, identifier: Identifier.SignInNavigation)
  898. })
  899. }
  900. }
  901.  
  902.  
  903. override func didReceiveMemoryWarning() {
  904. super.didReceiveMemoryWarning()
  905. // Dispose of any resources that can be recreated.
  906. }
  907. }
  908. extension BaseViewController: VehicleListDelegate
  909. {
  910. func liveTrack(vehicle: Vehicle)
  911. {
  912. if self is HomeViewController
  913. {
  914. let homeVC = self as! HomeViewController
  915. homeVC.mapview.removeAnnotations(homeVC.mapview.annotations!)
  916. homeVC.slectedVehicle = vehicle
  917. homeVC.openSegment()
  918. }
  919. }
  920. }
  921.  
  922. extension BaseViewController: LogoutViewDelegate
  923. {
  924. func didLogoutViewClick(logoutview: LogoutView)
  925. {
  926. UserDefaults.standard.removeObject(forKey: defaultsKeys.user)
  927. UserDefaults.standard.removeObject(forKey: defaultsKeys.profile_pic)
  928. UserDefaults.standard.removeObject(forKey: defaultsKeys.is_agreement_shown)
  929. UserDefaults.standard.removeObject(forKey: defaultsKeys.lang_code)
  930. UserDefaults.standard.removeObject(forKey: defaultsKeys.token)
  931. UserDefaults.standard.removeObject(forKey: defaultsKeys.customer_name)
  932. _ = setInitialRootViewContoller(storyboardName: Storyboard.SignInStoryboard)
  933. }
  934. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement