react-native-nitro-background-geolocation 0.1.0

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 (306) hide show
  1. package/NitroBackgroundGeolocation.podspec +29 -0
  2. package/android/CMakeLists.txt +24 -0
  3. package/android/build.gradle +133 -0
  4. package/android/src/main/AndroidManifest.xml +65 -0
  5. package/android/src/main/cpp/cpp-adapter.cpp +11 -0
  6. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ConfigMapper.kt +332 -0
  7. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskRegistry.kt +23 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskService.kt +66 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocation.kt +538 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocationPackage.kt +22 -0
  11. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ReactNativeHeadlessTaskRunner.kt +62 -0
  12. package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +542 -0
  13. package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
  14. package/android/src/main/java/com/marianhello/bgloc/Config.java +652 -0
  15. package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
  16. package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +168 -0
  17. package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
  18. package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
  19. package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
  20. package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +186 -0
  21. package/android/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
  22. package/android/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
  23. package/android/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
  24. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
  25. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
  26. package/android/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
  27. package/android/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
  28. package/android/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
  29. package/android/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
  30. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
  31. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
  32. package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
  33. package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
  34. package/android/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
  35. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
  36. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
  37. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
  38. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
  39. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
  40. package/android/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
  41. package/android/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
  42. package/android/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
  43. package/android/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +61 -0
  44. package/android/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
  45. package/android/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
  46. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
  47. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
  48. package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
  49. package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +280 -0
  50. package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +586 -0
  51. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
  52. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
  53. package/android/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
  54. package/android/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +142 -0
  55. package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +17 -0
  56. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +760 -0
  57. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
  58. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
  59. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
  60. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +140 -0
  61. package/android/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
  62. package/android/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
  63. package/android/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
  64. package/android/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +246 -0
  65. package/android/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
  66. package/android/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +233 -0
  67. package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
  68. package/android/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
  69. package/android/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
  70. package/android/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
  71. package/android/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
  72. package/android/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
  73. package/android/src/main/java/com/marianhello/utils/Convert.java +56 -0
  74. package/android/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
  75. package/android/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
  76. package/android/src/main/java/org/apache/commons/io/Charsets.java +153 -0
  77. package/android/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
  78. package/android/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
  79. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
  80. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
  81. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
  82. package/android/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
  83. package/android/src/main/res/values/strings.xml +6 -0
  84. package/android/src/main/res/xml/authenticator.xml +7 -0
  85. package/android/src/main/res/xml/syncadapter.xml +9 -0
  86. package/app.plugin.js +64 -0
  87. package/ios/NitroBackgroundGeolocation.swift +719 -0
  88. package/ios/NitroBackgroundGeolocationBootstrap.m +98 -0
  89. package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
  90. package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
  91. package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
  92. package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
  93. package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
  94. package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
  95. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
  96. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
  97. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
  98. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
  99. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
  100. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
  101. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
  102. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
  103. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
  104. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
  105. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
  106. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
  107. package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
  108. package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
  109. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
  110. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +202 -0
  111. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +62 -0
  112. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +650 -0
  113. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
  114. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +184 -0
  115. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
  116. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
  117. package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
  118. package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
  119. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
  120. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
  121. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
  122. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +523 -0
  123. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
  124. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
  125. package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
  126. package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
  127. package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
  128. package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
  129. package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
  130. package/ios/common/BackgroundGeolocation/MAURLocationManager.m +308 -0
  131. package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
  132. package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
  133. package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
  134. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +40 -0
  135. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +218 -0
  136. package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
  137. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
  138. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
  139. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
  140. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
  141. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
  142. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
  143. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
  144. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
  145. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
  146. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
  147. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
  148. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
  149. package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
  150. package/ios/common/BackgroundGeolocation/Reachability.m +474 -0
  151. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
  152. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
  153. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
  154. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
  155. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
  156. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
  157. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
  158. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -0
  159. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
  160. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
  161. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
  162. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
  163. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
  164. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
  165. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
  166. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
  167. package/lib/module/NitroBackgroundGeolocation.nitro.js +172 -0
  168. package/lib/module/NitroBackgroundGeolocation.nitro.js.map +1 -0
  169. package/lib/module/headless.js +72 -0
  170. package/lib/module/headless.js.map +1 -0
  171. package/lib/module/index.js +60 -0
  172. package/lib/module/index.js.map +1 -0
  173. package/lib/module/package.json +1 -0
  174. package/lib/typescript/package.json +1 -0
  175. package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts +616 -0
  176. package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts.map +1 -0
  177. package/lib/typescript/src/headless.d.ts +40 -0
  178. package/lib/typescript/src/headless.d.ts.map +1 -0
  179. package/lib/typescript/src/index.d.ts +8 -0
  180. package/lib/typescript/src/index.d.ts.map +1 -0
  181. package/nitro.json +23 -0
  182. package/nitrogen/generated/android/c++/JActivity.hpp +61 -0
  183. package/nitrogen/generated/android/c++/JAuthorizationStatus.hpp +61 -0
  184. package/nitrogen/generated/android/c++/JBackgroundGeolocationError.hpp +61 -0
  185. package/nitrogen/generated/android/c++/JConfigureOptions.hpp +179 -0
  186. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  187. package/nitrogen/generated/android/c++/JFunc_void_Activity.hpp +78 -0
  188. package/nitrogen/generated/android/c++/JFunc_void_AuthorizationStatus.hpp +77 -0
  189. package/nitrogen/generated/android/c++/JFunc_void_BackgroundGeolocationError.hpp +78 -0
  190. package/nitrogen/generated/android/c++/JFunc_void_Location.hpp +78 -0
  191. package/nitrogen/generated/android/c++/JFunc_void_StationaryLocation.hpp +78 -0
  192. package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.cpp +530 -0
  193. package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.hpp +90 -0
  194. package/nitrogen/generated/android/c++/JLocation.hpp +105 -0
  195. package/nitrogen/generated/android/c++/JLocationAccuracy.hpp +64 -0
  196. package/nitrogen/generated/android/c++/JLocationOptions.hpp +65 -0
  197. package/nitrogen/generated/android/c++/JLocationProvider.hpp +61 -0
  198. package/nitrogen/generated/android/c++/JLogEntry.hpp +73 -0
  199. package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +67 -0
  200. package/nitrogen/generated/android/c++/JServiceStatus.hpp +66 -0
  201. package/nitrogen/generated/android/c++/JStationaryLocation.hpp +109 -0
  202. package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.cpp +26 -0
  203. package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.hpp +71 -0
  204. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.cpp +26 -0
  205. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +69 -0
  206. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
  207. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
  208. package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.cpp +26 -0
  209. package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.hpp +71 -0
  210. package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.cpp +26 -0
  211. package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.hpp +71 -0
  212. package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.cpp +33 -0
  213. package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +77 -0
  214. package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +26 -0
  215. package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +70 -0
  216. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Activity.kt +56 -0
  217. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/AuthorizationStatus.kt +24 -0
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/BackgroundGeolocationError.kt +56 -0
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ConfigureOptions.kt +182 -0
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void.kt +80 -0
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Activity.kt +80 -0
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_AuthorizationStatus.kt +80 -0
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_BackgroundGeolocationError.kt +80 -0
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Location.kt +80 -0
  225. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_StationaryLocation.kt +80 -0
  226. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/HybridNitroBackgroundGeolocationSpec.kt +218 -0
  227. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Location.kt +111 -0
  228. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationAccuracy.kt +25 -0
  229. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationOptions.kt +61 -0
  230. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationProvider.kt +24 -0
  231. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LogEntry.kt +71 -0
  232. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/NativeLogLevel.kt +26 -0
  233. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ServiceStatus.kt +61 -0
  234. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/StationaryLocation.kt +116 -0
  235. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_AnyMap.kt +63 -0
  236. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Boolean.kt +62 -0
  237. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Double.kt +62 -0
  238. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationAccuracy.kt +62 -0
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationProvider.kt +62 -0
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Map_String__String_.kt +62 -0
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_String.kt +62 -0
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/nitrobackgroundgeolocationOnLoad.kt +35 -0
  243. package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.cmake +88 -0
  244. package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.gradle +27 -0
  245. package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.cpp +66 -0
  246. package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.hpp +34 -0
  247. package/nitrogen/generated/ios/NitroBackgroundGeolocation+autolinking.rb +62 -0
  248. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.cpp +129 -0
  249. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.hpp +911 -0
  250. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Umbrella.hpp +88 -0
  251. package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.mm +33 -0
  252. package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.swift +26 -0
  253. package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.cpp +11 -0
  254. package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.hpp +335 -0
  255. package/nitrogen/generated/ios/swift/Activity.swift +34 -0
  256. package/nitrogen/generated/ios/swift/AuthorizationStatus.swift +44 -0
  257. package/nitrogen/generated/ios/swift/BackgroundGeolocationError.swift +34 -0
  258. package/nitrogen/generated/ios/swift/ConfigureOptions.swift +1037 -0
  259. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  260. package/nitrogen/generated/ios/swift/Func_void_Activity.swift +46 -0
  261. package/nitrogen/generated/ios/swift/Func_void_AuthorizationStatus.swift +46 -0
  262. package/nitrogen/generated/ios/swift/Func_void_BackgroundGeolocationError.swift +46 -0
  263. package/nitrogen/generated/ios/swift/Func_void_ConfigureOptions.swift +46 -0
  264. package/nitrogen/generated/ios/swift/Func_void_Location.swift +46 -0
  265. package/nitrogen/generated/ios/swift/Func_void_ServiceStatus.swift +46 -0
  266. package/nitrogen/generated/ios/swift/Func_void_StationaryLocation.swift +46 -0
  267. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  268. package/nitrogen/generated/ios/swift/Func_void_std__optional_StationaryLocation_.swift +46 -0
  269. package/nitrogen/generated/ios/swift/Func_void_std__vector_Location_.swift +46 -0
  270. package/nitrogen/generated/ios/swift/Func_void_std__vector_LogEntry_.swift +46 -0
  271. package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec.swift +82 -0
  272. package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec_cxx.swift +675 -0
  273. package/nitrogen/generated/ios/swift/Location.swift +89 -0
  274. package/nitrogen/generated/ios/swift/LocationAccuracy.swift +48 -0
  275. package/nitrogen/generated/ios/swift/LocationOptions.swift +78 -0
  276. package/nitrogen/generated/ios/swift/LocationProvider.swift +44 -0
  277. package/nitrogen/generated/ios/swift/LogEntry.swift +49 -0
  278. package/nitrogen/generated/ios/swift/NativeLogLevel.swift +52 -0
  279. package/nitrogen/generated/ios/swift/ServiceStatus.swift +39 -0
  280. package/nitrogen/generated/ios/swift/StationaryLocation.swift +94 -0
  281. package/nitrogen/generated/ios/swift/Variant_NullType_AnyMap.swift +30 -0
  282. package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +30 -0
  283. package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +30 -0
  284. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +30 -0
  285. package/nitrogen/generated/ios/swift/Variant_NullType_LocationAccuracy.swift +30 -0
  286. package/nitrogen/generated/ios/swift/Variant_NullType_LocationProvider.swift +30 -0
  287. package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +30 -0
  288. package/nitrogen/generated/shared/c++/Activity.hpp +87 -0
  289. package/nitrogen/generated/shared/c++/AuthorizationStatus.hpp +63 -0
  290. package/nitrogen/generated/shared/c++/BackgroundGeolocationError.hpp +87 -0
  291. package/nitrogen/generated/shared/c++/ConfigureOptions.hpp +197 -0
  292. package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.cpp +48 -0
  293. package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.hpp +121 -0
  294. package/nitrogen/generated/shared/c++/Location.hpp +131 -0
  295. package/nitrogen/generated/shared/c++/LocationAccuracy.hpp +69 -0
  296. package/nitrogen/generated/shared/c++/LocationOptions.hpp +91 -0
  297. package/nitrogen/generated/shared/c++/LocationProvider.hpp +63 -0
  298. package/nitrogen/generated/shared/c++/LogEntry.hpp +99 -0
  299. package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +65 -0
  300. package/nitrogen/generated/shared/c++/ServiceStatus.hpp +92 -0
  301. package/nitrogen/generated/shared/c++/StationaryLocation.hpp +135 -0
  302. package/package.json +112 -0
  303. package/react-native.config.js +10 -0
  304. package/src/NitroBackgroundGeolocation.nitro.ts +656 -0
  305. package/src/headless.ts +91 -0
  306. package/src/index.tsx +100 -0
@@ -0,0 +1,523 @@
1
+ //
2
+ // MAURDistanceFilterLocationProvider.m
3
+ // BackgroundGeolocation
4
+ //
5
+ // Created by Marian Hello on 14/09/2016.
6
+ // Copyright © 2016 mauron85. All rights reserved.
7
+ //
8
+
9
+ #import "MAURDistanceFilterLocationProvider.h"
10
+ #import "MAURLogging.h"
11
+
12
+ #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
13
+ #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
14
+ #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
15
+ #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
16
+ #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
17
+
18
+ #define LOCATION_DENIED "User denied use of location services."
19
+ #define LOCATION_RESTRICTED "Application's use of location services is restricted."
20
+ #define LOCATION_NOT_DETERMINED "User undecided on application's use of location services."
21
+
22
+ static NSString * const TAG = @"DistanceFilterLocationProvider";
23
+ static NSString * const Domain = @"com.marianhello";
24
+
25
+ static BOOL MAURShouldIgnoreLocationManagerError(NSError *error)
26
+ {
27
+ switch (error.code) {
28
+ case kCLErrorLocationUnknown:
29
+ case kCLErrorNetwork:
30
+ case kCLErrorRegionMonitoringDenied:
31
+ case kCLErrorRegionMonitoringSetupDelayed:
32
+ case kCLErrorRegionMonitoringResponseDelayed:
33
+ case kCLErrorGeocodeFoundNoResult:
34
+ case kCLErrorGeocodeFoundPartialResult:
35
+ case kCLErrorGeocodeCanceled:
36
+ return YES;
37
+ default:
38
+ return NO;
39
+ }
40
+ }
41
+
42
+
43
+ enum {
44
+ maxLocationWaitTimeInSeconds = 15,
45
+ maxLocationAgeInSeconds = 30
46
+ };
47
+
48
+ @interface MAURDistanceFilterLocationProvider () <CLLocationManagerDelegate>
49
+ @end
50
+
51
+ @implementation MAURDistanceFilterLocationProvider {
52
+ BOOL isUpdatingLocation;
53
+ BOOL isAcquiringStationaryLocation;
54
+ BOOL isAcquiringSpeed;
55
+ BOOL isStarted;
56
+
57
+ CLCircularRegion *stationaryRegion;
58
+ NSDate *stationarySince;
59
+
60
+ MAUROperationalMode operationMode;
61
+ NSDate *aquireStartTime;
62
+
63
+ CLLocationManager *locationManager;
64
+
65
+ // configurable options
66
+ MAURConfig *_config;
67
+ }
68
+
69
+
70
+ - (instancetype) init
71
+ {
72
+ self = [super init];
73
+
74
+ if (self) {
75
+ isUpdatingLocation = NO;
76
+ isAcquiringStationaryLocation = NO;
77
+ isAcquiringSpeed = NO;
78
+ stationaryRegion = nil;
79
+ isStarted = NO;
80
+ }
81
+
82
+ return self;
83
+ }
84
+
85
+ - (void) onCreate {
86
+ locationManager = [[CLLocationManager alloc] init];
87
+
88
+ if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
89
+ DDLogDebug(@"%@ iOS9 detected", TAG);
90
+ locationManager.allowsBackgroundLocationUpdates = YES;
91
+ }
92
+
93
+ locationManager.delegate = self;
94
+ }
95
+
96
+ /**
97
+ * configure provider
98
+ * @param {Config} configuration
99
+ * @param {NSError} optional error
100
+ */
101
+ - (BOOL) onConfigure:(MAURConfig*)config error:(NSError * __autoreleasing *)outError
102
+ {
103
+ DDLogVerbose(@"%@ configure", TAG);
104
+ _config = config;
105
+
106
+ locationManager.pausesLocationUpdatesAutomatically = [_config pauseLocationUpdates];
107
+ locationManager.activityType = [_config decodeActivityType];
108
+ locationManager.distanceFilter = _config.distanceFilter.integerValue; // meters
109
+ locationManager.desiredAccuracy = [_config decodeDesiredAccuracy];
110
+
111
+ return YES;
112
+ }
113
+
114
+ /**
115
+ * Turn on background geolocation
116
+ */
117
+ - (BOOL) onStart:(NSError * __autoreleasing *)outError
118
+ {
119
+ DDLogInfo(@"%@ will start", TAG);
120
+
121
+ NSUInteger authStatus;
122
+
123
+ if ([CLLocationManager respondsToSelector:@selector(authorizationStatus)]) { // iOS 4.2+
124
+ authStatus = [CLLocationManager authorizationStatus];
125
+
126
+ if (authStatus == kCLAuthorizationStatusDenied) {
127
+ if (outError != NULL) {
128
+ NSDictionary *errorDictionary = @{
129
+ NSLocalizedDescriptionKey: NSLocalizedString(@LOCATION_DENIED, nil)
130
+ };
131
+
132
+ *outError = [NSError errorWithDomain:Domain code:MAURBGPermissionDenied userInfo:errorDictionary];
133
+ }
134
+
135
+ return NO;
136
+ }
137
+
138
+ if (authStatus == kCLAuthorizationStatusRestricted) {
139
+ if (outError != NULL) {
140
+ NSDictionary *errorDictionary = @{
141
+ NSLocalizedDescriptionKey: NSLocalizedString(@LOCATION_RESTRICTED, nil)
142
+ };
143
+ *outError = [NSError errorWithDomain:Domain code:MAURBGPermissionDenied userInfo:errorDictionary];
144
+ }
145
+
146
+ return NO;
147
+ }
148
+
149
+ #ifdef __IPHONE_8_0
150
+ // we do startUpdatingLocation even though we might not get permissions granted
151
+ // we can stop later on when recieved callback on user denial
152
+ // it's neccessary to start call startUpdatingLocation in iOS < 8.0 to show user prompt!
153
+
154
+ if (authStatus == kCLAuthorizationStatusNotDetermined) {
155
+ if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { //iOS 8.0+
156
+ DDLogVerbose(@"%@ requestAlwaysAuthorization", TAG);
157
+ [locationManager requestAlwaysAuthorization];
158
+ }
159
+ }
160
+ #endif
161
+ }
162
+
163
+ [self switchMode:MAURForegroundMode];
164
+
165
+ isStarted = YES;
166
+
167
+ return YES;
168
+ }
169
+
170
+ /**
171
+ * Turn it off
172
+ */
173
+ - (BOOL) onStop:(NSError * __autoreleasing *)outError
174
+ {
175
+ DDLogInfo(@"%@ stop", TAG);
176
+
177
+ [self stopUpdatingLocation];
178
+ [self stopMonitoringSignificantLocationChanges];
179
+ [self stopMonitoringForRegion];
180
+
181
+ isStarted = NO;
182
+
183
+ return YES;
184
+ }
185
+
186
+ - (void) onSwitchMode:(MAUROperationalMode)mode
187
+ {
188
+ [self switchMode:mode];
189
+ }
190
+
191
+ /**
192
+ * toggle between foreground and background operation mode
193
+ */
194
+ - (void) switchMode:(MAUROperationalMode)mode
195
+ {
196
+ DDLogInfo(@"%@ switchMode %lu", TAG, (unsigned long)mode);
197
+
198
+ operationMode = mode;
199
+
200
+ if (operationMode == MAURForegroundMode || !_config.saveBatteryOnBackground) {
201
+ isAcquiringSpeed = YES;
202
+ isAcquiringStationaryLocation = NO;
203
+ [self stopMonitoringForRegion];
204
+ [self stopMonitoringSignificantLocationChanges];
205
+ } else if (operationMode == MAURBackgroundMode) {
206
+ isAcquiringSpeed = NO;
207
+ isAcquiringStationaryLocation = YES;
208
+ [self startMonitoringSignificantLocationChanges];
209
+ }
210
+
211
+ aquireStartTime = [NSDate date];
212
+
213
+ // Crank up the GPS power temporarily to get a good fix on our current location
214
+ [self stopUpdatingLocation];
215
+ locationManager.distanceFilter = kCLDistanceFilterNone;
216
+ locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
217
+ [self startUpdatingLocation];
218
+ }
219
+
220
+ - (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
221
+ {
222
+ DDLogDebug(@"%@ didUpdateLocations (operationMode: %lu)", TAG, (unsigned long)operationMode);
223
+
224
+ MAUROperationalMode actAsInMode = operationMode;
225
+
226
+ if (actAsInMode == MAURBackgroundMode) {
227
+ if ([_config saveBatteryOnBackground] == NO) actAsInMode = MAURForegroundMode;
228
+ }
229
+
230
+ if (actAsInMode == MAURForegroundMode) {
231
+ if (!isUpdatingLocation) [self startUpdatingLocation];
232
+ }
233
+
234
+ if (actAsInMode == MAURBackgroundMode) {
235
+ if (!isAcquiringStationaryLocation && !stationaryRegion) {
236
+ // Perhaps our GPS signal was interupted, re-acquire a stationaryLocation now.
237
+ [self switchMode:operationMode];
238
+ }
239
+ }
240
+
241
+
242
+ MAURLocation *bestLocation = nil;
243
+ for (CLLocation *location in locations) {
244
+ MAURLocation *bgloc = [MAURLocation fromCLLocation:location];
245
+
246
+ // test the age of the location measurement to determine if the measurement is cached
247
+ // in most cases you will not want to rely on cached measurements
248
+ DDLogDebug(@"Location age %f", [bgloc locationAge]);
249
+ if ([bgloc locationAge] > maxLocationAgeInSeconds || ![bgloc hasAccuracy] || ![bgloc hasTime]) {
250
+ continue;
251
+ }
252
+
253
+ if (bestLocation == nil) {
254
+ bestLocation = bgloc;
255
+ continue;
256
+ }
257
+
258
+ if ([bgloc isBetterLocation:bestLocation]) {
259
+ DDLogInfo(@"Better location found: %@", bgloc);
260
+ bestLocation = bgloc;
261
+ }
262
+ }
263
+
264
+ if (bestLocation == nil) {
265
+ return;
266
+ }
267
+
268
+ // test the measurement to see if it is more accurate than the previous measurement
269
+ if (isAcquiringStationaryLocation) {
270
+ DDLogDebug(@"%@ acquiring stationary location, accuracy: %@", TAG, bestLocation.accuracy);
271
+ if ([_config isDebugging]) {
272
+ AudioServicesPlaySystemSound (acquiringLocationSound);
273
+ }
274
+
275
+ if ([bestLocation.accuracy doubleValue] <= [_config.desiredAccuracy doubleValue]) {
276
+ DDLogDebug(@"%@ found most accurate stationary before timeout", TAG);
277
+ } else if (-[aquireStartTime timeIntervalSinceNow] < maxLocationWaitTimeInSeconds) {
278
+ // we still have time to aquire better location
279
+ return;
280
+ }
281
+
282
+ isAcquiringStationaryLocation = NO;
283
+ [self stopUpdatingLocation]; //saving power while monitoring region
284
+
285
+ MAURLocation *stationaryLocation = [bestLocation copy];
286
+ stationaryLocation.radius = _config.stationaryRadius;
287
+ stationaryLocation.time = stationarySince;
288
+ [self startMonitoringStationaryRegion:stationaryLocation];
289
+ // fire onStationary @event for Javascript.
290
+ [super.delegate onStationaryChanged:stationaryLocation];
291
+ } else if (isAcquiringSpeed) {
292
+ if ([_config isDebugging]) {
293
+ AudioServicesPlaySystemSound (acquiringLocationSound);
294
+ }
295
+
296
+ if ([bestLocation.accuracy doubleValue] <= [_config.desiredAccuracy doubleValue]) {
297
+ DDLogDebug(@"%@ found most accurate location before timeout", TAG);
298
+ } else if (-[aquireStartTime timeIntervalSinceNow] < maxLocationWaitTimeInSeconds) {
299
+ // we still have time to aquire better location
300
+ return;
301
+ }
302
+
303
+ if ([_config isDebugging]) {
304
+ [self notify:@"Aggressive monitoring engaged"];
305
+ }
306
+
307
+ // We should have a good sample for speed now, power down our GPS as configured by user.
308
+ isAcquiringSpeed = NO;
309
+ locationManager.desiredAccuracy = _config.desiredAccuracy.integerValue;
310
+ locationManager.distanceFilter = [self calculateDistanceFilter:[bestLocation.speed floatValue]];
311
+ [self startUpdatingLocation];
312
+
313
+ } else if (actAsInMode == MAURForegroundMode) {
314
+ // Adjust distanceFilter incrementally based upon current speed
315
+ float newDistanceFilter = [self calculateDistanceFilter:[bestLocation.speed floatValue]];
316
+ if (newDistanceFilter != locationManager.distanceFilter) {
317
+ DDLogInfo(@"%@ updated distanceFilter, new: %f, old: %f", TAG, newDistanceFilter, locationManager.distanceFilter);
318
+ locationManager.distanceFilter = newDistanceFilter;
319
+ [self startUpdatingLocation];
320
+ }
321
+ } else if ([self locationIsBeyondStationaryRegion:bestLocation]) {
322
+ if ([_config isDebugging]) {
323
+ [self notify:@"Manual stationary exit-detection"];
324
+ }
325
+ [self switchMode:operationMode];
326
+ }
327
+
328
+ [super.delegate onLocationChanged:bestLocation];
329
+ }
330
+
331
+ /**
332
+ * Called when user exits their stationary radius (ie: they walked ~50m away from their last recorded location.
333
+ *
334
+ */
335
+ - (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLCircularRegion *)region
336
+ {
337
+ CLLocationDistance radius = [region radius];
338
+ CLLocationCoordinate2D coordinate = [region center];
339
+
340
+ DDLogDebug(@"%@ didExitRegion {%f,%f,%f}", TAG, coordinate.latitude, coordinate.longitude, radius);
341
+ if ([_config isDebugging]) {
342
+ AudioServicesPlaySystemSound (exitRegionSound);
343
+ [self notify:@"Exit stationary region"];
344
+ }
345
+ [self switchMode:operationMode];
346
+ }
347
+
348
+ - (void) locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager
349
+ {
350
+ DDLogDebug(@"%@ location updates paused", TAG);
351
+ if ([_config isDebugging]) {
352
+ [self notify:@"Location updates paused"];
353
+ }
354
+ }
355
+
356
+ - (void) locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager
357
+ {
358
+ DDLogDebug(@"%@ location updates resumed", TAG);
359
+ if ([_config isDebugging]) {
360
+ [self notify:@"Location updates resumed b"];
361
+ }
362
+ }
363
+
364
+ - (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
365
+ {
366
+ DDLogError(@"%@ didFailWithError: %@", TAG, error);
367
+
368
+ if (MAURShouldIgnoreLocationManagerError(error)) {
369
+ DDLogWarn(@"%@ ignoring transient location error: %@", TAG, error);
370
+ return;
371
+ }
372
+
373
+ if ([_config isDebugging]) {
374
+ AudioServicesPlaySystemSound (locationErrorSound);
375
+ [self notify:[NSString stringWithFormat:@"Location error: %@", error.localizedDescription]];
376
+ }
377
+
378
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onError:)]) {
379
+ NSDictionary *errorDictionary = @{
380
+ NSUnderlyingErrorKey : error
381
+ };
382
+ NSError *outError = [NSError errorWithDomain:Domain code:MAURBGServiceError userInfo:errorDictionary];
383
+
384
+ [self.delegate onError:outError];
385
+ }
386
+ }
387
+
388
+ - (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
389
+ {
390
+ DDLogInfo(@"LocationManager didChangeAuthorizationStatus %u", status);
391
+ if ([_config isDebugging]) {
392
+ [self notify:[NSString stringWithFormat:@"Authorization status changed %u", status]];
393
+ }
394
+
395
+ switch(status) {
396
+ case kCLAuthorizationStatusRestricted:
397
+ case kCLAuthorizationStatusDenied:
398
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onAuthorizationChanged:)]) {
399
+ [self.delegate onAuthorizationChanged:MAURLocationAuthorizationDenied];
400
+ }
401
+ break;
402
+ case kCLAuthorizationStatusAuthorizedAlways:
403
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onAuthorizationChanged:)]) {
404
+ [self.delegate onAuthorizationChanged:MAURLocationAuthorizationAlways];
405
+ }
406
+ break;
407
+ case kCLAuthorizationStatusAuthorizedWhenInUse:
408
+ if (self.delegate && [self.delegate respondsToSelector:@selector(onAuthorizationChanged:)]) {
409
+ [self.delegate onAuthorizationChanged:MAURLocationAuthorizationForeground];
410
+ }
411
+ break;
412
+ default:
413
+ break;
414
+ }
415
+ }
416
+
417
+ - (void) stopUpdatingLocation
418
+ {
419
+ if (isUpdatingLocation) {
420
+ [locationManager stopUpdatingLocation];
421
+ isUpdatingLocation = NO;
422
+ }
423
+ }
424
+
425
+ - (void) startUpdatingLocation
426
+ {
427
+ if (!isUpdatingLocation) {
428
+ [locationManager startUpdatingLocation];
429
+ isUpdatingLocation = YES;
430
+ }
431
+ }
432
+
433
+ - (void) onTerminate
434
+ {
435
+ if (isStarted && !_config.stopOnTerminate) {
436
+ [locationManager startMonitoringSignificantLocationChanges];
437
+ }
438
+ }
439
+
440
+ - (void) startMonitoringSignificantLocationChanges
441
+ {
442
+ [locationManager startMonitoringSignificantLocationChanges];
443
+ }
444
+
445
+ - (void) stopMonitoringSignificantLocationChanges
446
+ {
447
+ [locationManager stopMonitoringSignificantLocationChanges];
448
+ }
449
+
450
+ /**
451
+ * Creates a new circle around user and region-monitors it for exit
452
+ */
453
+ - (void) startMonitoringStationaryRegion:(MAURLocation*)location {
454
+ CLLocationCoordinate2D coord = [location coordinate];
455
+ DDLogDebug(@"%@ startMonitoringStationaryRegion {%f,%f,%@}", TAG, coord.latitude, coord.longitude, _config.stationaryRadius);
456
+
457
+ if ([_config isDebugging]) {
458
+ AudioServicesPlaySystemSound (acquiredLocationSound);
459
+ [self notify:[NSString stringWithFormat:@"Monitoring region {%f,%f,%@}", location.coordinate.latitude, location.coordinate.longitude, _config.stationaryRadius]];
460
+ }
461
+
462
+ [self stopMonitoringForRegion];
463
+ stationaryRegion = [[CLCircularRegion alloc] initWithCenter: coord radius:_config.stationaryRadius.integerValue identifier:@"DistanceFilterProvider stationary region"];
464
+ stationaryRegion.notifyOnExit = YES;
465
+ [locationManager startMonitoringForRegion:stationaryRegion];
466
+ stationarySince = [NSDate date];
467
+ }
468
+
469
+ - (void) stopMonitoringForRegion
470
+ {
471
+ if (stationaryRegion != nil) {
472
+ [locationManager stopMonitoringForRegion:stationaryRegion];
473
+ stationaryRegion = nil;
474
+ stationarySince = nil;
475
+ }
476
+ }
477
+
478
+ /**
479
+ * Calculates distanceFilter by rounding speed to nearest 5 and multiplying by 10. Clamped at 1km max.
480
+ */
481
+ - (float) calculateDistanceFilter:(float)speed
482
+ {
483
+ float newDistanceFilter = _config.distanceFilter.integerValue;
484
+ if (speed < 100) {
485
+ // (rounded-speed-to-nearest-5) / 2)^2
486
+ // eg 5.2 becomes (5/2)^2
487
+ newDistanceFilter = pow((5.0 * floorf(fabsf(speed) / 5.0 + 0.5f)), 2) + _config.distanceFilter.integerValue;
488
+ }
489
+ return (newDistanceFilter < 1000) ? newDistanceFilter : 1000;
490
+ }
491
+
492
+ /**
493
+ * Manual stationary location his-testing. This seems to help stationary-exit detection in some places where the automatic geo-fencing doesn't
494
+ */
495
+ - (BOOL) locationIsBeyondStationaryRegion:(MAURLocation*)location
496
+ {
497
+ CLLocationCoordinate2D regionCenter = [stationaryRegion center];
498
+ BOOL containsCoordinate = [stationaryRegion containsCoordinate:[location coordinate]];
499
+
500
+ DDLogVerbose(@"%@ location {%@,%@} region {%f,%f,%f} contains: %d",
501
+ TAG,
502
+ location.latitude, location.longitude, regionCenter.latitude, regionCenter.longitude,
503
+ [stationaryRegion radius], containsCoordinate);
504
+
505
+ return !containsCoordinate;
506
+ }
507
+
508
+ - (void) notify:(NSString*)message
509
+ {
510
+ [super notify:message];
511
+ }
512
+
513
+ - (void) onDestroy {
514
+ DDLogInfo(@"Destroying %@ ", TAG);
515
+ [self onStop:nil];
516
+ }
517
+
518
+ - (void) dealloc
519
+ {
520
+ // locationController.delegate = nil;
521
+ }
522
+
523
+ @end
@@ -0,0 +1,17 @@
1
+ //
2
+ // MAURGeolocationOpenHelper.h
3
+ // BackgroundGeolocation
4
+ //
5
+ // Created by Marian Hello on 27/06/16.
6
+ // Copyright © 2016 mauron85. All rights reserved.
7
+ //
8
+
9
+ #ifndef MAURGeolocationOpenHelper_h
10
+ #define MAURGeolocationOpenHelper_h
11
+
12
+ #import "MAURSQLiteOpenHelper.h"
13
+
14
+ @interface MAURGeolocationOpenHelper : MAURSQLiteOpenHelper
15
+ @end
16
+
17
+ #endif /* MAURGeolocationOpenHelper_h */
@@ -0,0 +1,97 @@
1
+ //
2
+ // MAURGeolocationOpenHelper.m
3
+ // BackgroundGeolocation
4
+ //
5
+ // Created by Marian Hello on 27/06/16.
6
+ // Copyright © 2016 mauron85. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "MAURGeolocationOpenHelper.h"
11
+ #import "MAURLocationContract.h"
12
+ #import "MAURConfigurationContract.h"
13
+
14
+ @implementation MAURGeolocationOpenHelper
15
+
16
+ static NSString *const kDatabaseName = @"cordova_bg_geolocation.db";
17
+ static NSInteger const kDatabaseVersion = 3;
18
+
19
+ - (instancetype)init
20
+ {
21
+ self = [super init:kDatabaseName version:kDatabaseVersion];
22
+ return self;
23
+ }
24
+
25
+ - (void) drop:(NSString*)table inDatabase:(FMDatabase*)database
26
+ {
27
+ NSString *sql = [NSString stringWithFormat: @"DROP TABLE IF EXISTS %@", table];
28
+ if (![database executeStatements:sql]) {
29
+ NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
30
+ }
31
+ }
32
+
33
+ - (void) onCreate:(FMDatabaseQueue*)queue
34
+ {
35
+ [queue inDatabase:^(FMDatabase *database) {
36
+ // because of some legacy code we have to drop table
37
+ [self drop:@LC_TABLE_NAME inDatabase:database];
38
+
39
+ NSString *sql = [@[
40
+ [MAURLocationContract createTableSQL],
41
+ [MAURConfigurationContract createTableSQL],
42
+ @"CREATE INDEX recorded_at_idx ON " @LC_TABLE_NAME @" (" @LC_COLUMN_NAME_RECORDED_AT @")"
43
+ ] componentsJoinedByString:@";"];
44
+ if (![database executeStatements:sql]) {
45
+ NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
46
+ }
47
+ }];
48
+ }
49
+
50
+ - (void) onDowngrade:(FMDatabaseQueue*)queue fromVersion:(NSInteger)oldVersion toVersion:(NSInteger)newVersion
51
+ {
52
+ NSLog(@"Downgrading geolocation db oldVersion: %ld, newVersion: %ld", oldVersion, newVersion);
53
+
54
+ NSString *sql = [@[
55
+ @"DROP TABLE IF EXISTS " @LC_TABLE_NAME
56
+ ] componentsJoinedByString:@";"];
57
+
58
+ [queue inDatabase:^(FMDatabase *database) {
59
+ if (![database executeStatements:sql]) {
60
+ NSLog(@"Db downgrade failed code: %d: message: %@", [database lastErrorCode], [database lastErrorMessage]);
61
+ } else {
62
+ [self onCreate:queue];
63
+ }
64
+ }];
65
+ }
66
+
67
+ - (void) onUpgrade:(FMDatabaseQueue*)queue fromVersion:(NSInteger)oldVersion toVersion:(NSInteger)newVersion
68
+ {
69
+ NSLog(@"Upgrading geolocation db oldVersion: %ld, newVersion: %ld", oldVersion, newVersion);
70
+ NSMutableArray *sql = [[NSMutableArray alloc] init];
71
+
72
+ switch (oldVersion) {
73
+ case 1:
74
+ [sql addObjectsFromArray: @[
75
+ @"ALTER TABLE " @LC_TABLE_NAME @" ADD COLUMN " @LC_COLUMN_NAME_RECORDED_AT @" INTEGER",
76
+ @"UPDATE " @LC_TABLE_NAME @" SET " @LC_COLUMN_NAME_RECORDED_AT @" =" @LC_COLUMN_NAME_TIME,
77
+ @"CREATE INDEX recorded_at_idx ON " @LC_TABLE_NAME @" (" @LC_COLUMN_NAME_RECORDED_AT @")",
78
+ @"DROP INDEX IF EXISTS time_idx"
79
+ ]];
80
+ case 2:
81
+ [sql addObjectsFromArray: @[
82
+ [MAURConfigurationContract createTableSQL]
83
+ ]];
84
+ break; // break only for previous db version (cascade statements)
85
+ default:
86
+ return;
87
+ }
88
+
89
+ [queue inDatabase:^(FMDatabase *database) {
90
+ NSString *stmt = [sql componentsJoinedByString:@";"];
91
+ if (![database executeStatements:stmt]) {
92
+ NSLog(@"Db upgrade failed code: %d: message: %@", [database lastErrorCode], [database lastErrorMessage]);
93
+ }
94
+ }];
95
+ }
96
+
97
+ @end
@@ -0,0 +1,59 @@
1
+ //
2
+ // MAURLocation.h
3
+ // BackgroundGeolocation
4
+ //
5
+ // Created by Marian Hello on 10/06/16.
6
+ //
7
+
8
+ #ifndef MAURLocation_h
9
+ #define MAURLocation_h
10
+
11
+ #import <Foundation/Foundation.h>
12
+ #import <CoreLocation/CoreLocation.h>
13
+
14
+ @class MAURLocation;
15
+
16
+ typedef MAURLocation * _Nullable (^ MAURLocationTransform)(MAURLocation * _Nonnull location);
17
+
18
+ typedef NS_ENUM(NSInteger, MAURLocationStatus) {
19
+ MAURLocationDeleted = 0,
20
+ MAURLocationPostPending = 1,
21
+ MAURLocationSyncPending = 2,
22
+ };
23
+
24
+ @interface MAURLocation : NSObject <NSCopying>
25
+
26
+ @property (nonatomic, retain) NSNumber *locationId;
27
+ @property (nonatomic, retain) NSDate *time;
28
+ @property (nonatomic, retain) NSNumber *accuracy;
29
+ @property (nonatomic, retain) NSNumber *altitudeAccuracy;
30
+ @property (nonatomic, retain) NSNumber *speed;
31
+ @property (nonatomic, retain) NSNumber *heading;
32
+ @property (nonatomic, retain) NSNumber *altitude;
33
+ @property (nonatomic, retain) NSNumber *latitude;
34
+ @property (nonatomic, retain) NSNumber *longitude;
35
+ @property (nonatomic, retain) NSString *provider;
36
+ @property (nonatomic, retain) NSNumber *locationProvider;
37
+ @property (nonatomic, retain) NSNumber *radius; //only for stationary locations
38
+ @property (nonatomic) BOOL isValid;
39
+ @property (nonatomic, retain) NSDate *recordedAt;
40
+
41
+ + (instancetype) fromCLLocation:(CLLocation*)location;
42
+ + (NSTimeInterval) locationAge:(CLLocation*)location;
43
+ + (NSMutableDictionary*) toDictionary:(CLLocation*)location;
44
+ - (NSTimeInterval) locationAge;
45
+ - (NSDictionary*) toDictionary;
46
+ - (NSDictionary*) toDictionaryWithId;
47
+ - (id) toResultFromTemplate:(id)locationTemplate;
48
+ - (CLLocationCoordinate2D) coordinate;
49
+ - (BOOL) hasAccuracy;
50
+ - (BOOL) hasTime;
51
+ - (double) distanceFromLocation:(MAURLocation*)location;
52
+ - (BOOL) isBetterLocation:(MAURLocation*)location;
53
+ - (BOOL) isBeyond:(MAURLocation*)location radius:(NSInteger)radius;
54
+ - (id) copyWithZone: (NSZone *)zone;
55
+ - (id) getValueForKey:(id)key;
56
+
57
+ @end
58
+
59
+ #endif /* MAURLocation_h */