@josuelmm/cordova-background-geolocation 2.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/.npmignore +23 -0
  2. package/CHANGELOG.md +787 -0
  3. package/CONTRIBUTORS.md +15 -0
  4. package/HISTORY.md +734 -0
  5. package/LICENSE +191 -0
  6. package/README.md +125 -0
  7. package/RELEASE.MD +5 -0
  8. package/android/CDVBackgroundGeolocation/src/main/AndroidManifest.xml +23 -0
  9. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
  10. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
  11. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
  12. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
  13. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
  14. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
  15. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
  16. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
  17. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
  18. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
  19. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +148 -0
  20. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/PluginRegistry.java +25 -0
  21. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/headless/JsEvaluatorTaskRunner.java +53 -0
  22. package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +603 -0
  23. package/android/CDVBackgroundGeolocation/src/main/res/values/strings.xml +4 -0
  24. package/android/CDVBackgroundGeolocation/src/test/java/com/marianhello/ConfigMapperTest.java +208 -0
  25. package/android/common/src/androidTest/java/com/marianhello/bgloc/BackgroundGeolocationFacadeTest.java +45 -0
  26. package/android/common/src/androidTest/java/com/marianhello/bgloc/BatchManagerTest.java +570 -0
  27. package/android/common/src/androidTest/java/com/marianhello/bgloc/ConfigTest.java +76 -0
  28. package/android/common/src/androidTest/java/com/marianhello/bgloc/ContentProviderLocationDAOTest.java +437 -0
  29. package/android/common/src/androidTest/java/com/marianhello/bgloc/DBLogReaderTest.java +95 -0
  30. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationContentProviderTest.java +159 -0
  31. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceProxyTest.java +161 -0
  32. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceTest.java +247 -0
  33. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteConfigurationDAOTest.java +200 -0
  34. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOTest.java +457 -0
  35. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOThreadTest.java +96 -0
  36. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteOpenHelperTest.java +225 -0
  37. package/android/common/src/androidTest/java/com/marianhello/bgloc/TestPluginDelegate.java +46 -0
  38. package/android/common/src/androidTest/java/com/marianhello/bgloc/TestResourceResolver.java +14 -0
  39. package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/MockLocationProvider.java +50 -0
  40. package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/TestLocationProviderFactory.java +17 -0
  41. package/android/common/src/androidTest/java/com/marianhello/bgloc/sqlite/SQLiteOpenHelper10.java +92 -0
  42. package/android/common/src/androidTest/java/com/marianhello/bgloc/test/LocationProviderTestCase.java +107 -0
  43. package/android/common/src/androidTest/java/com/marianhello/bgloc/test/TestConstants.java +5 -0
  44. package/android/common/src/main/AndroidManifest.xml +72 -0
  45. package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +523 -0
  46. package/android/common/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
  47. package/android/common/src/main/java/com/marianhello/bgloc/Config.java +652 -0
  48. package/android/common/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
  49. package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +224 -0
  50. package/android/common/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
  51. package/android/common/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
  52. package/android/common/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
  53. package/android/common/src/main/java/com/marianhello/bgloc/PostLocationTask.java +188 -0
  54. package/android/common/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
  55. package/android/common/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
  56. package/android/common/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
  57. package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
  58. package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
  59. package/android/common/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
  60. package/android/common/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
  61. package/android/common/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
  62. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
  63. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
  64. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
  65. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
  66. package/android/common/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
  67. package/android/common/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
  68. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
  69. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
  70. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
  71. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
  72. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
  73. package/android/common/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
  74. package/android/common/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
  75. package/android/common/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
  76. package/android/common/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +60 -0
  77. package/android/common/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
  78. package/android/common/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
  79. package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
  80. package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
  81. package/android/common/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
  82. package/android/common/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +282 -0
  83. package/android/common/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +610 -0
  84. package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
  85. package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
  86. package/android/common/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
  87. package/android/common/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +145 -0
  88. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
  89. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +749 -0
  90. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
  91. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
  92. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
  93. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +130 -0
  94. package/android/common/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
  95. package/android/common/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
  96. package/android/common/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
  97. package/android/common/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +278 -0
  98. package/android/common/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
  99. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +249 -0
  100. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
  101. package/android/common/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
  102. package/android/common/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
  103. package/android/common/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
  104. package/android/common/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
  105. package/android/common/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
  106. package/android/common/src/main/java/com/marianhello/utils/Convert.java +56 -0
  107. package/android/common/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
  108. package/android/common/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
  109. package/android/common/src/main/java/org/apache/commons/io/Charsets.java +153 -0
  110. package/android/common/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
  111. package/android/common/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
  112. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
  113. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
  114. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
  115. package/android/common/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
  116. package/android/common/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  117. package/android/common/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  118. package/android/common/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  119. package/android/common/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  120. package/android/common/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  121. package/android/common/src/main/res/values/strings.xml +4 -0
  122. package/android/common/src/main/res/xml/authenticator.xml +7 -0
  123. package/android/common/src/main/res/xml/syncadapter.xml +9 -0
  124. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ArrayListLocationTemplateTest.java +82 -0
  125. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/BackgroundLocationTest.java +128 -0
  126. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ConfigTest.java +191 -0
  127. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/DBLogReaderTest.java +37 -0
  128. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HashMapLocationTemplateTest.java +216 -0
  129. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HttpPostServiceTest.java +223 -0
  130. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/LocationTemplateFactoryTest.java +50 -0
  131. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/PostLocationTaskTest.java +180 -0
  132. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/TestHelper.java +16 -0
  133. package/android/dependencies.gradle +13 -0
  134. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.h +41 -0
  135. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +526 -0
  136. package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
  137. package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
  138. package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
  139. package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
  140. package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
  141. package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
  142. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
  143. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
  144. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
  145. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
  146. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
  147. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
  148. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
  149. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
  150. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
  151. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
  152. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
  153. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
  154. package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
  155. package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
  156. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
  157. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +202 -0
  158. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +60 -0
  159. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +638 -0
  160. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
  161. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +185 -0
  162. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
  163. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
  164. package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
  165. package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
  166. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
  167. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
  168. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
  169. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +514 -0
  170. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
  171. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
  172. package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
  173. package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
  174. package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
  175. package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
  176. package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
  177. package/ios/common/BackgroundGeolocation/MAURLocationManager.m +287 -0
  178. package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
  179. package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
  180. package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
  181. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +40 -0
  182. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +250 -0
  183. package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
  184. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
  185. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
  186. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
  187. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
  188. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
  189. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
  190. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
  191. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
  192. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
  193. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
  194. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
  195. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
  196. package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
  197. package/ios/common/BackgroundGeolocation/Reachability.m +475 -0
  198. package/ios/common/BackgroundGeolocation/SOMotionDetector/CHANGELOG.md +2 -0
  199. package/ios/common/BackgroundGeolocation/SOMotionDetector/LICENSE +21 -0
  200. package/ios/common/BackgroundGeolocation/SOMotionDetector/README.md +135 -0
  201. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
  202. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
  203. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
  204. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
  205. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
  206. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
  207. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
  208. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -0
  209. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/README.md +170 -0
  210. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
  211. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
  212. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
  213. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
  214. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
  215. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
  216. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
  217. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
  218. package/ios/common/BackgroundGeolocation.xcodeproj/project.pbxproj +760 -0
  219. package/ios/common/BackgroundGeolocationTests/Info.plist +24 -0
  220. package/ios/common/BackgroundGeolocationTests/MAURBackgroundLocationTest.m +185 -0
  221. package/ios/common/BackgroundGeolocationTests/MAURConfigTest.m +161 -0
  222. package/ios/common/BackgroundGeolocationTests/MAURGeolocationOpenHelperTest.m +102 -0
  223. package/ios/common/BackgroundGeolocationTests/MAURLocationTest.m +216 -0
  224. package/ios/common/BackgroundGeolocationTests/MAURLocationUploaderTest.m +55 -0
  225. package/ios/common/BackgroundGeolocationTests/MAURLogReaderTest.m +43 -0
  226. package/ios/common/BackgroundGeolocationTests/MAURSQLiteConfigurationDAOTest.m +102 -0
  227. package/ios/common/BackgroundGeolocationTests/MAURSQLiteHelperTest.m +41 -0
  228. package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOTests.m +240 -0
  229. package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOThreadTest.m +84 -0
  230. package/ios/common/BackgroundGeolocationTests/MAURSQLiteOpenHelperTest.m +144 -0
  231. package/ios/common/CONTRIBUTORS.md +10 -0
  232. package/ios/common/LICENSE +191 -0
  233. package/ios/common/README.md +7 -0
  234. package/ios/common/scripts/xcode-refactor.js +184 -0
  235. package/package.json +44 -0
  236. package/plugin.xml +355 -0
  237. package/www/BackgroundGeolocation.d.ts +910 -0
  238. package/www/BackgroundGeolocation.js +247 -0
  239. package/www/radio.js +177 -0
@@ -0,0 +1,638 @@
1
+ //
2
+ // MAURBackgroundGeolocationFacade.m
3
+ //
4
+ // Created by Marian Hello on 04/06/16.
5
+ // Version 2.0.0
6
+ //
7
+ // According to apache license
8
+ //
9
+ // This is class is using code from christocracy cordova-plugin-background-geolocation plugin
10
+ // https://github.com/christocracy/cordova-plugin-background-geolocation
11
+ //
12
+
13
+ #import <UIKit/UIKit.h>
14
+ #import <CoreLocation/CoreLocation.h>
15
+ #import <AudioToolbox/AudioToolbox.h>
16
+ #import "MAURBackgroundGeolocationFacade.h"
17
+ #import "MAURPostLocationTask.h"
18
+ #import "MAURSQLiteConfigurationDAO.h"
19
+ #import "MAURSQLiteLocationDAO.h"
20
+ #import "MAURBackgroundTaskManager.h"
21
+ #import "MAURLogging.h"
22
+ #import "FMDBLogger.h"
23
+ #import "MAURLogReader.h"
24
+ #import "MAURLocationManager.h"
25
+ #import "MAURActivityLocationProvider.h"
26
+ #import "MAURDistanceFilterLocationProvider.h"
27
+ #import "MAURRawLocationProvider.h"
28
+ #import "MAURUncaughtExceptionLogger.h"
29
+ #import "MAURPostLocationTask.h"
30
+ #import "INTULocationManager.h"
31
+
32
+ // error messages
33
+ #define CONFIGURE_ERROR_MSG "Configuration error."
34
+ #define SERVICE_ERROR_MSG "Cannot start service error."
35
+ #define UNKNOWN_LOCATION_PROVIDER_MSG "Unknown location provider."
36
+
37
+ // Position errors
38
+ // https://developer.mozilla.org/en-US/docs/Web/API/PositionError
39
+ #define PERMISSION_DENIED 1
40
+ #define POSITION_UNAVAILABLE 2
41
+ #define TIMEOUT 3
42
+
43
+ static NSString * const BGGeolocationDomain = @"com.marianhello";
44
+ static NSString * const TAG = @"BgGeo";
45
+
46
+ FMDBLogger *sqliteLogger;
47
+
48
+ @interface MAURBackgroundGeolocationFacade () <MAURProviderDelegate, MAURPostLocationTaskDelegate>
49
+ @end
50
+
51
+ @implementation MAURBackgroundGeolocationFacade {
52
+ BOOL isStarted;
53
+ MAUROperationalMode operationMode;
54
+
55
+ UILocalNotification *localNotification;
56
+
57
+ // configurable options
58
+ MAURConfig *_config;
59
+
60
+ MAURLocation *stationaryLocation;
61
+ MAURAbstractLocationProvider<MAURLocationProvider> *locationProvider;
62
+ MAURPostLocationTask *postLocationTask;
63
+ }
64
+
65
+
66
+ - (instancetype) init
67
+ {
68
+ self = [super init];
69
+
70
+ if (self == nil) {
71
+ return self;
72
+ }
73
+
74
+ [DDLog addLogger:[DDASLLogger sharedInstance] withLevel:DDLogLevelInfo];
75
+ [DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelDebug];
76
+
77
+ sqliteLogger = [[FMDBLogger alloc] initWithLogDirectory:[self loggerDirectory]];
78
+ sqliteLogger.saveThreshold = 1;
79
+ sqliteLogger.saveInterval = 0;
80
+ sqliteLogger.maxAge = 60 * 60 * 24 * 7; // 7 days
81
+ sqliteLogger.deleteInterval = 60 * 60 * 24; // 1 day
82
+ sqliteLogger.deleteOnEverySave = NO;
83
+
84
+ [DDLog addLogger:sqliteLogger withLevel:DDLogLevelDebug];
85
+
86
+ MAHUncaughtExceptionLogger *logger = mah_get_uncaught_exception_logger();
87
+ logger->setEnabled(YES);
88
+
89
+ postLocationTask = [[MAURPostLocationTask alloc] init];
90
+ postLocationTask.delegate = self;
91
+
92
+ localNotification = [[UILocalNotification alloc] init];
93
+ localNotification.timeZone = [NSTimeZone defaultTimeZone];
94
+
95
+ isStarted = NO;
96
+
97
+ return self;
98
+ }
99
+
100
+ /**
101
+ * configure manager
102
+ * @param {Config} configuration
103
+ * @param {NSError} optional error
104
+ */
105
+ - (BOOL) configure:(MAURConfig*)config error:(NSError * __autoreleasing *)outError
106
+ {
107
+ __block NSError *error = nil;
108
+
109
+ MAURConfig *currentConfig = [self getConfig];
110
+ _config = [MAURConfig merge:currentConfig withConfig:config];
111
+
112
+ DDLogInfo(@"%@ #configure: %@", TAG, _config);
113
+
114
+ postLocationTask.config = _config;
115
+
116
+ MAURSQLiteConfigurationDAO* configDAO = [MAURSQLiteConfigurationDAO sharedInstance];
117
+ [configDAO persistConfiguration:_config];
118
+
119
+ // ios 8 requires permissions to send local-notifications
120
+ if ([_config isDebugging]) {
121
+ [self runOnMainThread:^{
122
+ UIApplication *app = [UIApplication sharedApplication];
123
+ if ([[UIApplication sharedApplication]respondsToSelector:@selector(currentUserNotificationSettings)]) {
124
+ UIUserNotificationType wantedTypes = UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert;
125
+ UIUserNotificationSettings *currentSettings = [app currentUserNotificationSettings];
126
+ if (!currentSettings || (currentSettings.types != wantedTypes)) {
127
+ if ([app respondsToSelector:@selector(registerUserNotificationSettings:)]) {
128
+ [app registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:wantedTypes categories:nil]];
129
+ }
130
+ }
131
+ }
132
+ }];
133
+ }
134
+
135
+ if (isStarted) {
136
+ // Note: CLLocationManager must be created on a thread with an active run loop (main thread)
137
+ [self runOnMainThread:^{
138
+
139
+ // requesting new provider
140
+ if (![currentConfig.locationProvider isEqual:_config.locationProvider]) {
141
+ [locationProvider onDestroy]; // destroy current provider
142
+ locationProvider = [self getProvider:_config.locationProvider.intValue error:&error];
143
+ }
144
+
145
+ if (locationProvider == nil) {
146
+ return;
147
+ }
148
+
149
+ // trap configuration errors
150
+ if (![locationProvider onConfigure:_config error:&error]) {
151
+ return;
152
+ }
153
+
154
+ isStarted = [locationProvider onStart:&error];
155
+ locationProvider.delegate = self;
156
+ }];
157
+ }
158
+
159
+ if (error != nil) {
160
+ if (outError != nil) {
161
+ NSDictionary *userInfo = @{
162
+ NSLocalizedDescriptionKey: NSLocalizedString(@CONFIGURE_ERROR_MSG, nil),
163
+ NSUnderlyingErrorKey : error
164
+ };
165
+ *outError = [NSError errorWithDomain:BGGeolocationDomain code:MAURBGConfigureError userInfo:userInfo];
166
+ }
167
+
168
+ return NO;
169
+ }
170
+
171
+ return YES;
172
+ }
173
+
174
+ /**
175
+ * Turn on background geolocation
176
+ * in case of failure it calls error callback from configure method
177
+ * may fire two callback when location services are disabled and when authorization failed
178
+ */
179
+ - (BOOL) start:(NSError * __autoreleasing *)outError
180
+ {
181
+ DDLogInfo(@"%@ #start: %d", TAG, isStarted);
182
+
183
+ if (isStarted) {
184
+ return NO;
185
+ }
186
+
187
+ __block NSError *error = nil;
188
+ MAURConfig *config = [self getConfig];
189
+
190
+ postLocationTask.config = config;
191
+ [postLocationTask start];
192
+
193
+ // Note: CLLocationManager must be created on a thread with an active run loop (main thread)
194
+ [self runOnMainThread:^{
195
+ locationProvider = [self getProvider:config.locationProvider.intValue error:&error];
196
+
197
+ if (locationProvider == nil) {
198
+ return;
199
+ }
200
+
201
+ // trap configuration errors
202
+ if (![locationProvider onConfigure:config error:&error]) {
203
+ return;
204
+ }
205
+
206
+ isStarted = [locationProvider onStart:&error];
207
+ locationProvider.delegate = self;
208
+ }];
209
+
210
+
211
+ if (!isStarted) {
212
+ if (outError != nil) {
213
+ *outError = error;
214
+ }
215
+
216
+ return NO;
217
+ }
218
+
219
+ return isStarted;
220
+ }
221
+
222
+ /**
223
+ * Turn off background geolocation
224
+ */
225
+ - (BOOL) stop:(NSError * __autoreleasing *)outError
226
+ {
227
+ DDLogInfo(@"%@ #stop", TAG);
228
+
229
+ if (!isStarted) {
230
+ return YES;
231
+ }
232
+
233
+ [postLocationTask stop];
234
+
235
+ [self runOnMainThread:^{
236
+ isStarted = ![locationProvider onStop:outError];
237
+ }];
238
+
239
+ return isStarted;
240
+ }
241
+
242
+ /**
243
+ * toggle between foreground and background operation mode
244
+ */
245
+ - (void) switchMode:(MAUROperationalMode)mode
246
+ {
247
+ DDLogInfo(@"%@ #switchMode %lu", TAG, (unsigned long)mode);
248
+
249
+ operationMode = mode;
250
+
251
+ if (!isStarted) return;
252
+
253
+ if ([self getConfig].isDebugging) {
254
+ AudioServicesPlaySystemSound (operationMode == MAURForegroundMode ? paceChangeYesSound : paceChangeNoSound);
255
+ }
256
+
257
+ [self runOnMainThread:^{
258
+ [locationProvider onSwitchMode:mode];
259
+ }];
260
+ }
261
+
262
+ - (BOOL) locationServicesEnabled
263
+ {
264
+ if ([CLLocationManager respondsToSelector:@selector(locationServicesEnabled)]) { // iOS 4.x
265
+ return [CLLocationManager locationServicesEnabled];
266
+ }
267
+
268
+ return NO;
269
+ }
270
+
271
+ - (MAURLocationAuthorizationStatus) authorizationStatus
272
+ {
273
+ CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
274
+ switch (authStatus) {
275
+ case kCLAuthorizationStatusNotDetermined:
276
+ return MAURLocationAuthorizationNotDetermined;
277
+ case kCLAuthorizationStatusRestricted:
278
+ case kCLAuthorizationStatusDenied:
279
+ return MAURLocationAuthorizationDenied;
280
+ case kCLAuthorizationStatusAuthorizedAlways:
281
+ return MAURLocationAuthorizationAlways;
282
+ case kCLAuthorizationStatusAuthorizedWhenInUse:
283
+ return MAURLocationAuthorizationForeground;
284
+ }
285
+ }
286
+
287
+ - (BOOL) isStarted
288
+ {
289
+ return isStarted;
290
+ }
291
+
292
+ - (MAURAbstractLocationProvider<MAURLocationProvider>*) getProvider:(int)providerId error:(NSError * __autoreleasing *)outError
293
+ {
294
+ NSDictionary *errorDictionary;
295
+ MAURAbstractLocationProvider<MAURLocationProvider> *locationProvider = nil;
296
+ switch (providerId) {
297
+ case DISTANCE_FILTER_PROVIDER:
298
+ locationProvider = [[MAURDistanceFilterLocationProvider alloc] init];
299
+ break;
300
+ case ACTIVITY_PROVIDER:
301
+ locationProvider = [[MAURActivityLocationProvider alloc] init];
302
+ break;
303
+ case RAW_PROVIDER:
304
+ locationProvider = [[MAURRawLocationProvider alloc] init];
305
+ break;
306
+ default:
307
+ if (outError != nil) {
308
+ errorDictionary = @{
309
+ NSLocalizedDescriptionKey: NSLocalizedString(@UNKNOWN_LOCATION_PROVIDER_MSG, nil),
310
+ };
311
+ *outError = [NSError errorWithDomain:BGGeolocationDomain code:MAURBGConfigureError userInfo:errorDictionary];
312
+ }
313
+ return nil;
314
+ }
315
+ [locationProvider onCreate];
316
+ return locationProvider;
317
+ }
318
+
319
+ - (void) showAppSettings
320
+ {
321
+ [self runOnMainThread:^{
322
+ BOOL canGoToSettings = (UIApplicationOpenSettingsURLString != NULL);
323
+ if (canGoToSettings) {
324
+ NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
325
+ [[UIApplication sharedApplication] openURL:settingsURL
326
+ options:@{}
327
+ completionHandler:nil];
328
+ }
329
+ }];
330
+ }
331
+
332
+ - (void) showLocationSettings
333
+ {
334
+ // NOOP - Since Apple started rejecting apps using non public url schemes
335
+ // https://github.com/mauron85/cordova-plugin-background-geolocation/issues/394
336
+ }
337
+
338
+ - (MAURLocation*) getStationaryLocation
339
+ {
340
+ return stationaryLocation;
341
+ }
342
+
343
+ - (NSArray<MAURLocation*>*) getLocations
344
+ {
345
+ MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
346
+ return [locationDAO getAllLocations];
347
+ }
348
+
349
+ - (NSArray<MAURLocation*>*) getValidLocations
350
+ {
351
+ MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
352
+ return [locationDAO getValidLocations];
353
+ }
354
+
355
+ - (NSArray<MAURLocation*>*) getValidLocationsAndDelete
356
+ {
357
+ MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
358
+ return [locationDAO getLocationsForSync];
359
+ }
360
+
361
+ - (BOOL) deleteLocation:(NSNumber*)locationId error:(NSError * __autoreleasing *)outError
362
+ {
363
+ MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
364
+ return [locationDAO deleteLocation:locationId error:outError];
365
+ }
366
+
367
+ - (BOOL) deleteAllLocations:(NSError * __autoreleasing *)outError
368
+ {
369
+ MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
370
+ return [locationDAO deleteAllLocations:outError];
371
+ }
372
+
373
+ - (MAURLocation*)getCurrentLocation:(int)timeout maximumAge:(long)maximumAge
374
+ enableHighAccuracy:(BOOL)enableHighAccuracy
375
+ error:(NSError * __autoreleasing *)outError
376
+ {
377
+ __block NSError *error = nil;
378
+ __block CLLocation *location = nil;
379
+
380
+ dispatch_semaphore_t sema = dispatch_semaphore_create(0);
381
+ [self runOnMainThread:^{
382
+ CLLocation *currentLocation = [MAURLocationManager sharedInstance].locationManager.location;
383
+ if (currentLocation != nil) {
384
+ long locationAge = ceil(fabs([currentLocation.timestamp timeIntervalSinceNow]) * 1000);
385
+ if (locationAge <= maximumAge) {
386
+ location = currentLocation;
387
+ dispatch_semaphore_signal(sema);
388
+ return;
389
+ }
390
+ }
391
+
392
+ INTULocationManager *locationManager = [INTULocationManager sharedInstance];
393
+ float timeoutInSeconds = ceil((float)timeout/1000);
394
+ [locationManager requestLocationWithDesiredAccuracy:enableHighAccuracy ? INTULocationAccuracyRoom : INTULocationAccuracyCity
395
+ timeout:timeoutInSeconds
396
+ delayUntilAuthorized:YES // This parameter is optional, defaults to NO if omitted
397
+ block:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
398
+ if (status == INTULocationStatusSuccess) {
399
+ // Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and
400
+ // currentLocation contains the device's current location.
401
+ location = currentLocation;
402
+ }
403
+ else if (status == INTULocationStatusTimedOut) {
404
+ // Wasn't able to locate the user with the requested accuracy within the timeout interval.
405
+ // However, currentLocation contains the best location available (if any) as of right now,
406
+ // and achievedAccuracy has info on the accuracy/recency of the location in currentLocation.
407
+ error = [NSError errorWithDomain:BGGeolocationDomain code:TIMEOUT userInfo:nil];
408
+ }
409
+ else {
410
+ // An error occurred, more info is available by looking at the specific status returned.
411
+ error = [NSError errorWithDomain:BGGeolocationDomain code:POSITION_UNAVAILABLE userInfo:nil];
412
+ }
413
+ dispatch_semaphore_signal(sema);
414
+ }];
415
+ }];
416
+ dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
417
+
418
+ if (location != nil) {
419
+ return [MAURLocation fromCLLocation:location];
420
+ }
421
+
422
+ if (outError != nil) {
423
+ *outError = error;
424
+ }
425
+
426
+ return nil;
427
+ }
428
+
429
+ - (MAURConfig*) getConfig
430
+ {
431
+ if (_config == nil) {
432
+ MAURSQLiteConfigurationDAO* configDAO = [MAURSQLiteConfigurationDAO sharedInstance];
433
+ _config = [configDAO retrieveConfiguration];
434
+ if (_config == nil) {
435
+ _config = [[MAURConfig alloc] initWithDefaults];
436
+ }
437
+ }
438
+
439
+ return _config;
440
+ }
441
+
442
+ - (NSArray*) getLogEntries:(NSInteger)limit
443
+ {
444
+ MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
445
+ return [logReader getEntries:limit fromLogEntryId:0 minLogLevel:DDLogFlagDebug];
446
+ }
447
+
448
+ - (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevelFromString:(NSString *)minLogLevel
449
+ {
450
+ MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
451
+ return [logReader getLogEntries:limit fromLogEntryId:entryId minLogLevelAsString:minLogLevel];
452
+ }
453
+
454
+ - (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevel:(DDLogFlag)minLogLevel
455
+ {
456
+ MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
457
+ NSArray *logs = [logReader getEntries:limit fromLogEntryId:entryId minLogLevel:minLogLevel];
458
+ return logs;
459
+ }
460
+
461
+ - (void) forceSync
462
+ {
463
+ [postLocationTask sync];
464
+ }
465
+
466
+ - (void) notify:(NSString*)message
467
+ {
468
+ localNotification.fireDate = [NSDate date];
469
+ localNotification.alertBody = message;
470
+ [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
471
+ }
472
+
473
+ -(void) runOnMainThread:(dispatch_block_t)completionHandle {
474
+ BOOL alreadyOnMainThread = [NSThread isMainThread];
475
+ // this check avoids possible deadlock resulting from
476
+ // calling dispatch_sync() on the same queue as current one
477
+ if (alreadyOnMainThread) {
478
+ // execute code in place
479
+ completionHandle();
480
+ } else {
481
+ // dispatch to main queue
482
+ dispatch_sync(dispatch_get_main_queue(), completionHandle);
483
+ }
484
+ }
485
+
486
+ - (NSString *)loggerDirectory
487
+ {
488
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
489
+ NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
490
+
491
+ return [basePath stringByAppendingPathComponent:@"SQLiteLogger"];
492
+ }
493
+
494
+ - (void) onStationaryChanged:(MAURLocation *)location
495
+ {
496
+ DDLogDebug(@"%@ #onStationaryChanged", TAG);
497
+ stationaryLocation = location;
498
+
499
+ [postLocationTask add:location];
500
+
501
+ MAURConfig *config = [self getConfig];
502
+ if ([config isDebugging]) {
503
+ double distanceFilter = [MAURLocationManager sharedInstance].distanceFilter;
504
+ [self notify:[NSString stringWithFormat:@"Stationary update: %s\nSPD: %0.0f | DF: %f | ACY: %0.0f | RAD: %0.0f",
505
+ ((operationMode == MAURForegroundMode) ? "FG" : "BG"),
506
+ [location.speed doubleValue],
507
+ distanceFilter,
508
+ [location.accuracy doubleValue],
509
+ [location.radius doubleValue]
510
+ ]];
511
+
512
+ AudioServicesPlaySystemSound (locationSyncSound);
513
+ }
514
+
515
+ // Any javascript stationaryRegion event-listeners?
516
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onStationaryChanged:)]) {
517
+ [self.delegate onStationaryChanged:location];
518
+ }
519
+ }
520
+
521
+ - (void) onLocationChanged:(MAURLocation *)location
522
+ {
523
+ DDLogDebug(@"%@ #onLocationChanged %@", TAG, location);
524
+ stationaryLocation = nil;
525
+
526
+ [postLocationTask add:location];
527
+
528
+ MAURConfig *config = [self getConfig];
529
+ if ([config isDebugging]) {
530
+ double distanceFilter = [MAURLocationManager sharedInstance].distanceFilter;
531
+ [self notify:[NSString stringWithFormat:@"Location update: %s\nSPD: %0.0f | DF: %f | ACY: %0.0f",
532
+ ((operationMode == MAURForegroundMode) ? "FG" : "BG"),
533
+ [location.speed doubleValue],
534
+ distanceFilter,
535
+ [location.accuracy doubleValue]
536
+ ]];
537
+
538
+ AudioServicesPlaySystemSound (locationSyncSound);
539
+ }
540
+
541
+ // Delegate to main module
542
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onLocationChanged:)]) {
543
+ [self.delegate onLocationChanged:location];
544
+ }
545
+ }
546
+
547
+ - (void) onAuthorizationChanged:(MAURLocationAuthorizationStatus)authStatus
548
+ {
549
+ [self.delegate onAuthorizationChanged:authStatus];
550
+ }
551
+
552
+ - (void) onError:(NSError*)error
553
+ {
554
+ [self.delegate onError:error];
555
+ }
556
+
557
+ - (void) onLocationPause
558
+ {
559
+ [self.delegate onLocationPause];
560
+ }
561
+
562
+ - (void) onLocationResume
563
+ {
564
+ [self.delegate onLocationResume];
565
+ }
566
+
567
+ - (void) onActivityChanged:(MAURActivity *)activity
568
+ {
569
+ DDLogDebug(@"%@ #onActivityChanged %@", TAG, activity);
570
+
571
+ if ([self getConfig].isDebugging) {
572
+ [self notify:[NSString stringWithFormat:@"%@ activity detected: %@ activity, confidence: %@", TAG, activity.type, activity.confidence]];
573
+ }
574
+
575
+ [self.delegate onActivityChanged:activity];
576
+ }
577
+
578
+ /**@
579
+ * If you don't stopMonitoring when application terminates, the app will be awoken still when a
580
+ * new location arrives, essentially monitoring the user's location even when they've killed the app.
581
+ * Might be desirable in certain apps.
582
+ */
583
+ - (void) onAppTerminate
584
+ {
585
+ MAURConfig *config = [self getConfig];
586
+ if ([config stopOnTerminate]) {
587
+ DDLogInfo(@"%@ #onAppTerminate.", TAG);
588
+ [self stop:nil];
589
+ } else {
590
+ [locationProvider onTerminate];
591
+ }
592
+ }
593
+
594
+ - (void) dealloc
595
+ {
596
+ DDLogDebug(@"%@ #dealloc", TAG);
597
+ // currently noop
598
+ }
599
+
600
+ #pragma mark - Location transform
601
+
602
+ + (void) setLocationTransform:(MAURLocationTransform _Nullable)transform
603
+ {
604
+ [MAURPostLocationTask setLocationTransform:transform];
605
+ }
606
+
607
+ + (MAURLocationTransform _Nullable) locationTransform
608
+ {
609
+ return [MAURPostLocationTask locationTransform];
610
+ }
611
+
612
+ #pragma mark - MAURPostLocationTaskDelegate
613
+
614
+ - (void) postLocationTaskRequestedAbortUpdates:(MAURPostLocationTask *)task
615
+ {
616
+ if (_delegate && [_delegate respondsToSelector:@selector(onAbortRequested)])
617
+ {
618
+ // We have a delegate, tell it that there's a request.
619
+ // It will decide whether to stop or not.
620
+ [_delegate onAbortRequested];
621
+ }
622
+ else
623
+ {
624
+ // No delegate, we may be running in the background.
625
+ // Let's just stop.
626
+ [self stop:nil];
627
+ }
628
+ }
629
+
630
+ - (void) postLocationTaskHttpAuthorizationUpdates:(MAURPostLocationTask *)task
631
+ {
632
+ if (_delegate && [_delegate respondsToSelector:@selector(onHttpAuthorization)])
633
+ {
634
+ [_delegate onHttpAuthorization];
635
+ }
636
+ }
637
+
638
+ @end
@@ -0,0 +1,34 @@
1
+ //
2
+ // MAURBackgroundSync.h
3
+ //
4
+ // Created by Marian Hello on 07/07/16.
5
+ // Copyright © 2016 mauron85. All rights reserved.
6
+ //
7
+
8
+ #ifndef MAURBackgroundSync_h
9
+ #define MAURBackgroundSync_h
10
+
11
+ #import <Foundation/Foundation.h>
12
+
13
+ @class MAURBackgroundSync;
14
+
15
+ @protocol MAURBackgroundSyncDelegate <NSObject>
16
+
17
+ @optional
18
+ - (void)backgroundSyncRequestedAbortUpdates:(MAURBackgroundSync * _Nonnull)task;
19
+ - (void)backgroundSyncHttpAuthorizationUpdates:(MAURBackgroundSync * _Nonnull)task;
20
+
21
+ @end
22
+
23
+ @interface MAURBackgroundSync : NSObject
24
+
25
+ @property (nonatomic, weak) id<MAURBackgroundSyncDelegate> _Nullable delegate;
26
+
27
+ - (instancetype) init;
28
+ - (NSString*) status;
29
+ - (void) sync:(NSString * _Nonnull)url withTemplate:(id)locationTemplate withHttpHeaders:(NSMutableDictionary * _Nullable)httpHeaders;
30
+ - (void) cancel;
31
+
32
+ @end
33
+
34
+ #endif /* MAURBackgroundSync_h */