Manos Chorianopoulos

fix webviewDidFocus for app kill redeisign

...@@ -77,6 +77,9 @@ var timer2: DispatchSourceTimer? ...@@ -77,6 +77,9 @@ var timer2: DispatchSourceTimer?
77 setBackButton() 77 setBackButton()
78 } 78 }
79 79
80 + // Add observers for application state changes
81 + NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
82 + NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
80 } 83 }
81 84
82 public override func viewWillAppear(_ animated: Bool) { 85 public override func viewWillAppear(_ animated: Bool) {
...@@ -90,14 +93,7 @@ var timer2: DispatchSourceTimer? ...@@ -90,14 +93,7 @@ var timer2: DispatchSourceTimer?
90 93
91 if(webViewLoaded) { 94 if(webViewLoaded) {
92 95
93 - let scriptSource2 = "webviewDidFocus(\(self.webViewLoaded));" 96 + sendWebviewDidFocus()
94 -
95 - webView.evaluateJavaScript(scriptSource2, completionHandler: { (object, error) in
96 -// print("==== object viewWillAppear ====")
97 -// print(object)
98 -// print("==== error viewWillAppear ====")
99 -// print(error)
100 - })
101 } 97 }
102 } 98 }
103 99
...@@ -110,27 +106,9 @@ var timer2: DispatchSourceTimer? ...@@ -110,27 +106,9 @@ var timer2: DispatchSourceTimer?
110 106
111 stopTimer() 107 stopTimer()
112 108
113 - let persistedSteps = swiftApi().getSteps() 109 + saveSteps(startTracking: false)
114 - if (persistedSteps > 0) {
115 110
116 - let currentDateTime = Date() 111 + removeApplicationObservers()
117 - let dateFormatter = DateFormatter()
118 - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
119 - let dateString = dateFormatter.string(from: currentDateTime)
120 -
121 - swiftApi().setPacingDetailsAsync(persistedSteps, dateString, setPacingDetailsAsyncCallback, failureCallback: {errorCode in })
122 - }
123 -
124 - func setPacingDetailsAsyncCallback (_ responseData: swiftApi.GenericResponseModel?) -> Void {
125 - if (responseData != nil) {
126 - DispatchQueue.main.async {
127 - if (responseData?.getStatus == 1) {
128 - // print("===== steps sent on back button press ====")
129 - }
130 - }
131 - } else {
132 - }
133 - }
134 } 112 }
135 113
136 // public override func viewDidLoad() { 114 // public override func viewDidLoad() {
...@@ -155,7 +133,76 @@ var timer2: DispatchSourceTimer? ...@@ -155,7 +133,76 @@ var timer2: DispatchSourceTimer?
155 // webview.configuration.userContentController.add(self, name: "Cosmote") 133 // webview.configuration.userContentController.add(self, name: "Cosmote")
156 // } 134 // }
157 135
136 + deinit {
137 + // Remove observers to avoid memory leaks
138 + removeApplicationObservers()
139 + }
140 +
141 + @objc func applicationWillEnterForeground() {
142 + // Handle code when the application is about to enter the foreground
143 +
144 + sendWebviewDidFocus()
145 + }
146 +
147 + @objc func applicationDidEnterBackground() {
148 + // Handle code when the application enters the background
149 +
150 + saveSteps(startTracking: false)
151 + }
152 +
158 // MARK: - Functions 153 // MARK: - Functions
154 + func sendWebviewDidFocus() {
155 + let scriptSource2 = "webviewDidFocus(\(self.webViewLoaded),\(swiftApi().getTrackingStepsEnabled()));"
156 +
157 + webView.evaluateJavaScript(scriptSource2, completionHandler: { (object, error) in
158 + // print("==== webviewDidFocus object ====")
159 + // print(object)
160 + // print("==== webviewDidFocus error ====")
161 + // print(error)
162 + })
163 + }
164 +
165 + func addApplicationObservers() {
166 + NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
167 + NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
168 + }
169 +
170 + func removeApplicationObservers() {
171 + NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
172 + NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
173 + }
174 +
175 + func saveSteps(startTracking: Bool) {
176 + let persistedSteps = swiftApi().getSteps()
177 + if (persistedSteps > 0) {
178 +
179 + let currentDateTime = Date()
180 + let dateFormatter = DateFormatter()
181 + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
182 + let dateString = dateFormatter.string(from: currentDateTime)
183 +
184 + swiftApi().setPacingDetailsAsync(persistedSteps, dateString, setPacingDetailsAsyncCallback, failureCallback: {errorCode in })
185 + }
186 +
187 + func setPacingDetailsAsyncCallback (_ responseData: swiftApi.GenericResponseModel?) -> Void {
188 + if (responseData != nil) {
189 + DispatchQueue.main.async {
190 + if (responseData?.getStatus == 1) {
191 + if (startTracking) {
192 + // TODO: DELETE LOGS
193 + // print("===== startTrackingSteps after save persisted steps ====")
194 +
195 + self.sendWebviewDidFocus()
196 +
197 + swiftApi().startTrackingSteps(self.startTrackingStepsCallback)
198 + }
199 + }
200 + }
201 + } else {
202 + }
203 + }
204 + }
205 +
159 func startTimer() { 206 func startTimer() {
160 // print("========= Webview Timer Started! =========") 207 // print("========= Webview Timer Started! =========")
161 208
...@@ -172,10 +219,10 @@ var timer2: DispatchSourceTimer? ...@@ -172,10 +219,10 @@ var timer2: DispatchSourceTimer?
172 let scriptSource = "passMeters(\(metersParam));" 219 let scriptSource = "passMeters(\(metersParam));"
173 220
174 self?.webView.evaluateJavaScript(scriptSource, completionHandler: { (object, error) in 221 self?.webView.evaluateJavaScript(scriptSource, completionHandler: { (object, error) in
175 - // print("==== object passMeters ====") 222 +// print("==== object passMeters ====")
176 - // print(object) 223 +// print(object)
177 - // print("==== error passMeters ====") 224 +// print("==== error passMeters ====")
178 - // print(error) 225 +// print(error)
179 226
180 swiftApi().setSavedStepsWebview(swiftApi().getSavedStepsWebview() + swiftApi().getStepsWebview()) 227 swiftApi().setSavedStepsWebview(swiftApi().getSavedStepsWebview() + swiftApi().getStepsWebview())
181 swiftApi().setStepsWebview(0) 228 swiftApi().setStepsWebview(0)
...@@ -340,9 +387,16 @@ var timer2: DispatchSourceTimer? ...@@ -340,9 +387,16 @@ var timer2: DispatchSourceTimer?
340 387
341 // MARK: - API Calls 388 // MARK: - API Calls
342 func startTrackingSteps() { 389 func startTrackingSteps() {
390 + let persistedSteps = swiftApi().getSteps()
391 + if (persistedSteps > 0) {
392 + saveSteps(startTracking: true)
393 + } else {
343 swiftApi().startTrackingSteps(startTrackingStepsCallback) 394 swiftApi().startTrackingSteps(startTrackingStepsCallback)
344 } 395 }
345 396
397 +// swiftApi().startTrackingSteps(startTrackingStepsCallback)
398 + }
399 +
346 func startTrackingStepsCallback (_ steps: Int) -> Void { 400 func startTrackingStepsCallback (_ steps: Int) -> Void {
347 DispatchQueue.main.async { 401 DispatchQueue.main.async {
348 } 402 }
...@@ -355,9 +409,9 @@ var timer2: DispatchSourceTimer? ...@@ -355,9 +409,9 @@ var timer2: DispatchSourceTimer?
355 let scriptSource = "passParams(\(params));" 409 let scriptSource = "passParams(\(params));"
356 410
357 webView.evaluateJavaScript(scriptSource, completionHandler: { (object, error) in 411 webView.evaluateJavaScript(scriptSource, completionHandler: { (object, error) in
358 - // print("==== object passParams ====") 412 + // print("==== object ====")
359 // print(object) 413 // print(object)
360 - // print("==== error passParams ====") 414 + // print("==== error ====")
361 // print(error) 415 // print(error)
362 416
363 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { 417 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
...@@ -365,14 +419,14 @@ var timer2: DispatchSourceTimer? ...@@ -365,14 +419,14 @@ var timer2: DispatchSourceTimer?
365 } 419 }
366 }) 420 })
367 421
368 - let scriptSource2 = "webviewDidFocus(\(self.webViewLoaded));" 422 +// let scriptSource2 = "webviewDidFocus(\(self.webViewLoaded),\(swiftApi().getTrackingStepsEnabled()));"
369 - 423 +//
370 - webView.evaluateJavaScript(scriptSource2, completionHandler: { (object, error) in 424 +// webView.evaluateJavaScript(scriptSource2, completionHandler: { (object, error) in
371 -// print("==== object webView ====") 425 +// print("==== webviewDidFocus object didFinish ====")
372 // print(object) 426 // print(object)
373 -// print("==== error webView ====") 427 +// print("==== webviewDidFocus error didFinish ====")
374 // print(error) 428 // print(error)
375 - }) 429 +// })
376 } 430 }
377 431
378 public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 432 public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
......