Showing
1 changed file
with
95 additions
and
41 deletions
... | @@ -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 | - | ||
116 | - let currentDateTime = Date() | ||
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 | 110 | ||
124 | - func setPacingDetailsAsyncCallback (_ responseData: swiftApi.GenericResponseModel?) -> Void { | 111 | + removeApplicationObservers() |
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() { |
... | @@ -154,8 +132,77 @@ var timer2: DispatchSourceTimer? | ... | @@ -154,8 +132,77 @@ var timer2: DispatchSourceTimer? |
154 | // | 132 | // |
155 | // webview.configuration.userContentController.add(self, name: "Cosmote") | 133 | // webview.configuration.userContentController.add(self, name: "Cosmote") |
156 | // } | 134 | // } |
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 | + } | ||
157 | 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,7 +387,14 @@ var timer2: DispatchSourceTimer? | ... | @@ -340,7 +387,14 @@ var timer2: DispatchSourceTimer? |
340 | 387 | ||
341 | // MARK: - API Calls | 388 | // MARK: - API Calls |
342 | func startTrackingSteps() { | 389 | func startTrackingSteps() { |
343 | - swiftApi().startTrackingSteps(startTrackingStepsCallback) | 390 | + let persistedSteps = swiftApi().getSteps() |
391 | + if (persistedSteps > 0) { | ||
392 | + saveSteps(startTracking: true) | ||
393 | + } else { | ||
394 | + swiftApi().startTrackingSteps(startTrackingStepsCallback) | ||
395 | + } | ||
396 | + | ||
397 | +// swiftApi().startTrackingSteps(startTrackingStepsCallback) | ||
344 | } | 398 | } |
345 | 399 | ||
346 | func startTrackingStepsCallback (_ steps: Int) -> Void { | 400 | func startTrackingStepsCallback (_ steps: Int) -> Void { |
... | @@ -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) { | ... | ... |
-
Please register or login to post a comment