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,586 @@
1
+ /*
2
+ According to apache license
3
+
4
+ This is fork of christocracy cordova-plugin-background-geolocation plugin
5
+ https://github.com/christocracy/cordova-plugin-background-geolocation
6
+
7
+ Differences to original version:
8
+
9
+ 1. location is not persisted to db anymore, but broadcasted using intents instead
10
+ */
11
+
12
+ package com.marianhello.bgloc.provider;
13
+
14
+ import android.app.AlarmManager;
15
+ import android.app.PendingIntent;
16
+ import android.content.BroadcastReceiver;
17
+ import android.content.Context;
18
+ import android.content.Intent;
19
+ import android.content.IntentFilter;
20
+ import android.location.Criteria;
21
+ import android.location.Location;
22
+ import android.location.LocationListener;
23
+ import android.location.LocationManager;
24
+ import android.os.Build;
25
+ import android.os.Bundle;
26
+
27
+ import com.marianhello.bgloc.Config;
28
+ import com.marianhello.bgloc.provider.AbstractLocationProvider;
29
+ import com.marianhello.utils.ToneGenerator.Tone;
30
+
31
+ import java.util.List;
32
+
33
+ import static java.lang.Math.abs;
34
+ import static java.lang.Math.pow;
35
+ import static java.lang.Math.round;
36
+
37
+
38
+ public class DistanceFilterLocationProvider extends AbstractLocationProvider implements LocationListener {
39
+
40
+ private static final String TAG = DistanceFilterLocationProvider.class.getSimpleName();
41
+ private static final String P_NAME = "com.tenforwardconsulting.cordova.bgloc";
42
+
43
+ private static final String STATIONARY_REGION_ACTION = P_NAME + ".STATIONARY_REGION_ACTION";
44
+ private static final String STATIONARY_ALARM_ACTION = P_NAME + ".STATIONARY_ALARM_ACTION";
45
+ private static final String SINGLE_LOCATION_UPDATE_ACTION = P_NAME + ".SINGLE_LOCATION_UPDATE_ACTION";
46
+ private static final String STATIONARY_LOCATION_MONITOR_ACTION = P_NAME + ".STATIONARY_LOCATION_MONITOR_ACTION";
47
+
48
+ private static final long STATIONARY_TIMEOUT = 5 * 1000 * 60; // 5 minutes.
49
+ private static final long STATIONARY_LOCATION_POLLING_INTERVAL_LAZY = 3 * 1000 * 60; // 3 minutes.
50
+ private static final long STATIONARY_LOCATION_POLLING_INTERVAL_AGGRESSIVE = 1 * 1000 * 60; // 1 minute.
51
+ private static final int MAX_STATIONARY_ACQUISITION_ATTEMPTS = 5;
52
+ private static final int MAX_SPEED_ACQUISITION_ATTEMPTS = 3;
53
+
54
+ private Boolean isMoving = false;
55
+ private Boolean isAcquiringStationaryLocation = false;
56
+ private Boolean isAcquiringSpeed = false;
57
+ private Integer locationAcquisitionAttempts = 0;
58
+
59
+ private Location lastLocation;
60
+ private Location stationaryLocation;
61
+ private float stationaryRadius;
62
+ private PendingIntent stationaryAlarmPI;
63
+ private PendingIntent stationaryLocationPollingPI;
64
+ private long stationaryLocationPollingInterval;
65
+ private PendingIntent stationaryRegionPI;
66
+ private PendingIntent singleUpdatePI;
67
+ private Integer scaledDistanceFilter;
68
+
69
+ private Criteria criteria;
70
+
71
+ private LocationManager locationManager;
72
+ private AlarmManager alarmManager;
73
+
74
+ private boolean isStarted = false;
75
+
76
+ public DistanceFilterLocationProvider(Context context) {
77
+ super(context);
78
+ PROVIDER_ID = Config.DISTANCE_FILTER_PROVIDER;
79
+ }
80
+
81
+ @Override
82
+ public void onCreate() {
83
+ super.onCreate();
84
+
85
+ locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
86
+ alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
87
+
88
+ int zeroFlag = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
89
+ ? 0 | PendingIntent.FLAG_MUTABLE
90
+ : 0;
91
+
92
+ int cancelCurrentFlag = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
93
+ ? PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_MUTABLE
94
+ : PendingIntent.FLAG_CANCEL_CURRENT;
95
+
96
+ Intent stationaryAlarmIntent = new Intent(mContext, StationaryAlarmReceiver.class);
97
+ stationaryAlarmIntent.setAction(STATIONARY_ALARM_ACTION);
98
+
99
+ // Stop-detection PI
100
+ stationaryAlarmPI = PendingIntent.getBroadcast(mContext, 0, stationaryAlarmIntent, zeroFlag);
101
+ registerReceiver(stationaryAlarmReceiver, new IntentFilter(STATIONARY_ALARM_ACTION));
102
+
103
+ Intent stationaryRegionIntent = new Intent(mContext, StationaryRegionReceiver.class);
104
+ stationaryRegionIntent.setAction(STATIONARY_REGION_ACTION);
105
+
106
+ // Stationary region PI
107
+ stationaryRegionPI = PendingIntent.getBroadcast(mContext, 0, stationaryRegionIntent, cancelCurrentFlag);
108
+ registerReceiver(stationaryRegionReceiver, new IntentFilter(STATIONARY_REGION_ACTION));
109
+
110
+ Intent stationaryLocationMonitorIntent = new Intent(mContext, StationaryLocationMonitorReceiver.class);
111
+ stationaryLocationMonitorIntent.setAction(STATIONARY_LOCATION_MONITOR_ACTION);
112
+
113
+ // Stationary location monitor PI
114
+ stationaryLocationPollingPI = PendingIntent.getBroadcast(mContext, 0, stationaryLocationMonitorIntent, zeroFlag);
115
+ registerReceiver(stationaryLocationMonitorReceiver, new IntentFilter(STATIONARY_LOCATION_MONITOR_ACTION));
116
+
117
+ Intent singleLocationUpdateIntent = new Intent(mContext, SingleUpdateReceiver.class);
118
+ singleLocationUpdateIntent.setAction(SINGLE_LOCATION_UPDATE_ACTION);
119
+
120
+ // One-shot PI (TODO currently unused)
121
+ singleUpdatePI = PendingIntent.getBroadcast(mContext, 0, singleLocationUpdateIntent, cancelCurrentFlag);
122
+ registerReceiver(singleUpdateReceiver, new IntentFilter(SINGLE_LOCATION_UPDATE_ACTION));
123
+
124
+ // Location criteria
125
+ criteria = new Criteria();
126
+ criteria.setAltitudeRequired(false);
127
+ criteria.setBearingRequired(false);
128
+ criteria.setSpeedRequired(true);
129
+ criteria.setCostAllowed(true);
130
+ }
131
+
132
+ @Override
133
+ public void onStart() {
134
+ if (isStarted) {
135
+ return;
136
+ }
137
+
138
+ logger.info("Start recording");
139
+ scaledDistanceFilter = mConfig.getDistanceFilter();
140
+ isStarted = true;
141
+ setPace(false);
142
+ }
143
+
144
+ @Override
145
+ public void onStop() {
146
+ if (!isStarted) {
147
+ return;
148
+ }
149
+
150
+ try {
151
+ locationManager.removeUpdates(this);
152
+ locationManager.removeProximityAlert(stationaryRegionPI);
153
+ } catch (SecurityException e) {
154
+ //noop
155
+ } finally {
156
+ isStarted = false;
157
+ }
158
+ }
159
+
160
+ @Override
161
+ public void onCommand(int commandId, int arg1) {
162
+ switch(commandId) {
163
+ case CMD_SWITCH_MODE:
164
+ setPace(arg1 == BACKGROUND_MODE ? false : true);
165
+ return;
166
+ }
167
+ }
168
+
169
+ @Override
170
+ public void onConfigure(Config config) {
171
+ super.onConfigure(config);
172
+ if (isStarted) {
173
+ onStop();
174
+ onStart();
175
+ }
176
+ }
177
+
178
+ @Override
179
+ public boolean isStarted() {
180
+ return isStarted;
181
+ }
182
+
183
+ /**
184
+ *
185
+ * @param value set true to engage "aggressive", battery-consuming tracking, false for stationary-region tracking
186
+ */
187
+ private void setPace(Boolean value) {
188
+ if (!isStarted) {
189
+ return;
190
+ }
191
+
192
+ logger.info("Setting pace: {}", value);
193
+
194
+ Boolean wasMoving = isMoving;
195
+ isMoving = value;
196
+ isAcquiringStationaryLocation = false;
197
+ isAcquiringSpeed = false;
198
+ stationaryLocation = null;
199
+
200
+ try {
201
+ locationManager.removeUpdates(this);
202
+ criteria.setAccuracy(Criteria.ACCURACY_FINE);
203
+ criteria.setHorizontalAccuracy(translateDesiredAccuracy(mConfig.getDesiredAccuracy()));
204
+ criteria.setPowerRequirement(Criteria.POWER_HIGH);
205
+
206
+ if (isMoving) {
207
+ // setPace can be called while moving, after distanceFilter has been recalculated. We don't want to re-acquire velocity in this case.
208
+ if (!wasMoving) {
209
+ isAcquiringSpeed = true;
210
+ }
211
+ } else {
212
+ isAcquiringStationaryLocation = true;
213
+ }
214
+
215
+ // Temporarily turn on super-aggressive geolocation on all providers when acquiring velocity or stationary location.
216
+ if (isAcquiringSpeed || isAcquiringStationaryLocation) {
217
+ locationAcquisitionAttempts = 0;
218
+ // Turn on each provider aggressively for a short period of time
219
+ List<String> matchingProviders = locationManager.getAllProviders();
220
+ for (String provider: matchingProviders) {
221
+ if (provider != LocationManager.PASSIVE_PROVIDER) {
222
+ logger.info("Requesting location updates from provider {}", provider);
223
+ locationManager.requestLocationUpdates(provider, 0, 0, this);
224
+ }
225
+ }
226
+ } else {
227
+ String provider = locationManager.getBestProvider(criteria, true);
228
+ if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER) &&
229
+ Build.VERSION.SDK_INT > 30) {
230
+ provider = LocationManager.GPS_PROVIDER;
231
+ }
232
+ logger.info("Requesting location updates from provider {}", provider);
233
+ locationManager.requestLocationUpdates(provider, mConfig.getInterval(), scaledDistanceFilter, this);
234
+ }
235
+ } catch (SecurityException e) {
236
+ logger.error("Security exception: {}", e.getMessage());
237
+ this.handleSecurityException(e);
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Translates a number representing desired accuracy of Geolocation system from set [0, 10, 100, 1000].
243
+ * 0: most aggressive, most accurate, worst battery drain
244
+ * 1000: least aggressive, least accurate, best for battery.
245
+ */
246
+ private Integer translateDesiredAccuracy(Integer accuracy) {
247
+ if (accuracy >= 1000) {
248
+ return Criteria.ACCURACY_LOW;
249
+ }
250
+ if (accuracy >= 100) {
251
+ return Criteria.ACCURACY_MEDIUM;
252
+ }
253
+ if (accuracy >= 10) {
254
+ return Criteria.ACCURACY_HIGH;
255
+ }
256
+ if (accuracy >= 0) {
257
+ return Criteria.ACCURACY_HIGH;
258
+ }
259
+
260
+ return Criteria.ACCURACY_MEDIUM;
261
+ }
262
+
263
+ /**
264
+ * Returns the most accurate and timely previously detected location.
265
+ * Where the last result is beyond the specified maximum distance or
266
+ * latency a one-off location update is returned via the {@link LocationListener}
267
+ * specified in {@link setChangedLocationListener}.
268
+ * @param minTime Minimum time required between location updates.
269
+ * @return The most accurate and / or timely previously detected location.
270
+ */
271
+ public Location getLastBestLocation() {
272
+ Location bestResult = null;
273
+ String bestProvider = null;
274
+ float bestAccuracy = Float.MAX_VALUE;
275
+ long bestTime = Long.MIN_VALUE;
276
+ long minTime = System.currentTimeMillis() - mConfig.getInterval();
277
+
278
+ logger.info("Fetching last best location: radius={} minTime={}", mConfig.getStationaryRadius(), minTime);
279
+
280
+ try {
281
+ // Iterate through all the providers on the system, keeping
282
+ // note of the most accurate result within the acceptable time limit.
283
+ // If no result is found within maxTime, return the newest Location.
284
+ List<String> matchingProviders = locationManager.getAllProviders();
285
+ for (String provider: matchingProviders) {
286
+ Location location = locationManager.getLastKnownLocation(provider);
287
+ if (location != null) {
288
+ logger.debug("Test provider={} lat={} lon={} acy={} v={}m/s time={}", provider, location.getLatitude(), location.getLongitude(), location.getAccuracy(), location.getSpeed(), location.getTime());
289
+ float accuracy = location.getAccuracy();
290
+ long time = location.getTime();
291
+ if ((time > minTime && accuracy < bestAccuracy)) {
292
+ bestProvider = provider;
293
+ bestResult = location;
294
+ bestAccuracy = accuracy;
295
+ bestTime = time;
296
+ }
297
+ }
298
+ }
299
+
300
+ if (bestResult != null) {
301
+ logger.debug("Best result found provider={} lat={} lon={} acy={} v={}m/s time={}", bestProvider, bestResult.getLatitude(), bestResult.getLongitude(), bestResult.getAccuracy(), bestResult.getSpeed(), bestResult.getTime());
302
+ }
303
+ } catch (SecurityException e) {
304
+ logger.error("Security exception: {}", e.getMessage());
305
+ this.handleSecurityException(e);
306
+ }
307
+
308
+ return bestResult;
309
+ }
310
+
311
+ public void onLocationChanged(Location location) {
312
+ logger.debug("Location change: {} isMoving={}", location.toString(), isMoving);
313
+
314
+ if (!isMoving && !isAcquiringStationaryLocation && stationaryLocation==null) {
315
+ // Perhaps our GPS signal was interupted, re-acquire a stationaryLocation now.
316
+ setPace(false);
317
+ }
318
+
319
+ showDebugToast( "mv:" + isMoving + ",acy:" + location.getAccuracy() + ",v:" + location.getSpeed() + ",df:" + scaledDistanceFilter);
320
+
321
+ if (isAcquiringStationaryLocation) {
322
+ if (stationaryLocation == null || stationaryLocation.getAccuracy() > location.getAccuracy()) {
323
+ stationaryLocation = location;
324
+ }
325
+ if (++locationAcquisitionAttempts == MAX_STATIONARY_ACQUISITION_ATTEMPTS) {
326
+ isAcquiringStationaryLocation = false;
327
+ startMonitoringStationaryRegion(stationaryLocation);
328
+ handleStationary(stationaryLocation, stationaryRadius);
329
+ return;
330
+ } else {
331
+ // Unacceptable stationary-location: bail-out and wait for another.
332
+ playDebugTone(Tone.BEEP);
333
+ return;
334
+ }
335
+ } else if (isAcquiringSpeed) {
336
+ if (++locationAcquisitionAttempts == MAX_SPEED_ACQUISITION_ATTEMPTS) {
337
+ // Got enough samples, assume we're confident in reported speed now. Play "woohoo" sound.
338
+ playDebugTone(Tone.DOODLY_DOO);
339
+ isAcquiringSpeed = false;
340
+ scaledDistanceFilter = calculateDistanceFilter(location.getSpeed());
341
+ setPace(true);
342
+ } else {
343
+ playDebugTone(Tone.BEEP);
344
+ return;
345
+ }
346
+ } else if (isMoving) {
347
+ playDebugTone(Tone.BEEP);
348
+
349
+ // Only reset stationaryAlarm when accurate speed is detected, prevents spurious locations from resetting when stopped.
350
+ if ( (location.getSpeed() >= 1) && (location.getAccuracy() <= mConfig.getStationaryRadius()) ) {
351
+ resetStationaryAlarm();
352
+ }
353
+ // Calculate latest distanceFilter, if it changed by 5 m/s, we'll reconfigure our pace.
354
+ Integer newDistanceFilter = calculateDistanceFilter(location.getSpeed());
355
+ if (newDistanceFilter != scaledDistanceFilter.intValue()) {
356
+ logger.info("Updating distanceFilter: new={} old={}", newDistanceFilter, scaledDistanceFilter);
357
+ scaledDistanceFilter = newDistanceFilter;
358
+ setPace(true);
359
+ }
360
+ if (lastLocation != null && location.distanceTo(lastLocation) < mConfig.getDistanceFilter()) {
361
+ return;
362
+ }
363
+ } else if (stationaryLocation != null) {
364
+ return;
365
+ }
366
+ // Go ahead and cache, push to server
367
+ lastLocation = location;
368
+ handleLocation(location);
369
+ }
370
+
371
+ public void resetStationaryAlarm() {
372
+ alarmManager.cancel(stationaryAlarmPI);
373
+ alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + STATIONARY_TIMEOUT, stationaryAlarmPI); // Millisec * Second * Minute
374
+ }
375
+
376
+ private Integer calculateDistanceFilter(Float speed) {
377
+ Double newDistanceFilter = (double) mConfig.getDistanceFilter();
378
+ if (speed < 100) {
379
+ float roundedDistanceFilter = (round(speed / 5) * 5);
380
+ newDistanceFilter = pow(roundedDistanceFilter, 2) + (double) mConfig.getDistanceFilter();
381
+ }
382
+ return (newDistanceFilter.intValue() < 1000) ? newDistanceFilter.intValue() : 1000;
383
+ }
384
+
385
+ private void startMonitoringStationaryRegion(Location location) {
386
+ try {
387
+ locationManager.removeUpdates(this);
388
+
389
+ float stationaryRadius = mConfig.getStationaryRadius();
390
+ float proximityRadius = (location.getAccuracy() < stationaryRadius) ? stationaryRadius : location.getAccuracy();
391
+ stationaryLocation = location;
392
+
393
+ logger.info("startMonitoringStationaryRegion: lat={} lon={} acy={}", location.getLatitude(), location.getLongitude(), proximityRadius);
394
+
395
+ // Here be the execution of the stationary region monitor
396
+ locationManager.addProximityAlert(
397
+ location.getLatitude(),
398
+ location.getLongitude(),
399
+ proximityRadius,
400
+ (long)-1,
401
+ stationaryRegionPI
402
+ );
403
+
404
+ this.stationaryRadius = proximityRadius;
405
+
406
+ startPollingStationaryLocation(STATIONARY_LOCATION_POLLING_INTERVAL_LAZY);
407
+ } catch (SecurityException e) {
408
+ logger.error("Security exception: {}", e.getMessage());
409
+ this.handleSecurityException(e);
410
+ }
411
+ }
412
+
413
+ /**
414
+ * User has exit his stationary region! Initiate aggressive geolocation!
415
+ */
416
+ public void onExitStationaryRegion(Location location) {
417
+ // Filter-out spurious region-exits: must have at least a little speed to move out of stationary-region
418
+ playDebugTone(Tone.BEEP_BEEP_BEEP);
419
+
420
+ logger.info("Exited stationary: lat={} long={} acy={}}'",
421
+ location.getLatitude(), location.getLongitude(), location.getAccuracy());
422
+
423
+ try {
424
+ // Cancel the periodic stationary location monitor alarm.
425
+ alarmManager.cancel(stationaryLocationPollingPI);
426
+ // Kill the current region-monitor we just walked out of.
427
+ locationManager.removeProximityAlert(stationaryRegionPI);
428
+ // Engage aggressive tracking.
429
+ this.setPace(true);
430
+ } catch (SecurityException e) {
431
+ logger.error("Security exception: {}", e.getMessage());
432
+ this.handleSecurityException(e);
433
+ }
434
+ }
435
+
436
+ public void startPollingStationaryLocation(long interval) {
437
+ // proximity-alerts don't seem to work while suspended in latest Android 4.42 (works in 4.03). Have to use AlarmManager to sample
438
+ // location at regular intervals with a one-shot.
439
+ stationaryLocationPollingInterval = interval;
440
+ alarmManager.cancel(stationaryLocationPollingPI);
441
+ long start = System.currentTimeMillis() + (60 * 1000);
442
+ alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, start, interval, stationaryLocationPollingPI);
443
+ }
444
+
445
+ public void onPollStationaryLocation(Location location) {
446
+ float stationaryRadius = mConfig.getStationaryRadius();
447
+ if (isMoving) {
448
+ return;
449
+ }
450
+ playDebugTone(Tone.BEEP);
451
+
452
+ float distance = 0.0f;
453
+ if (stationaryLocation != null) {
454
+ distance = abs(location.distanceTo(stationaryLocation) - stationaryLocation.getAccuracy() - location.getAccuracy());
455
+ }
456
+
457
+ showDebugToast("Stationary exit in " + (stationaryRadius-distance) + "m");
458
+
459
+ // TODO http://www.cse.buffalo.edu/~demirbas/publications/proximity.pdf
460
+ // determine if we're almost out of stationary-distance and increase monitoring-rate.
461
+ logger.info("Distance from stationary location: {}", distance);
462
+ if (distance > stationaryRadius) {
463
+ onExitStationaryRegion(location);
464
+ } else if (distance > 0) {
465
+ startPollingStationaryLocation(STATIONARY_LOCATION_POLLING_INTERVAL_AGGRESSIVE);
466
+ } else if (stationaryLocationPollingInterval != STATIONARY_LOCATION_POLLING_INTERVAL_LAZY) {
467
+ startPollingStationaryLocation(STATIONARY_LOCATION_POLLING_INTERVAL_LAZY);
468
+ }
469
+ }
470
+
471
+ /**
472
+ * Broadcast receiver for receiving a single-update from LocationManager.
473
+ */
474
+ private class SingleUpdateReceiver extends BroadcastReceiver {
475
+ @Override
476
+ public void onReceive(Context context, Intent intent) {
477
+ String key = LocationManager.KEY_LOCATION_CHANGED;
478
+ Location location = (Location)intent.getExtras().get(key);
479
+ if (location != null) {
480
+ logger.debug("Single location update: " + location.toString());
481
+ onPollStationaryLocation(location);
482
+ }
483
+ }
484
+ }
485
+
486
+ private BroadcastReceiver singleUpdateReceiver = new SingleUpdateReceiver();
487
+
488
+ /**
489
+ * Broadcast receiver which detects a user has stopped for a long enough time to be determined as STOPPED
490
+ */
491
+ private class StationaryAlarmReceiver extends BroadcastReceiver {
492
+ @Override
493
+ public void onReceive(Context context, Intent intent)
494
+ {
495
+ logger.info("stationaryAlarm fired");
496
+ setPace(false);
497
+ }
498
+ }
499
+
500
+ private BroadcastReceiver stationaryAlarmReceiver = new StationaryAlarmReceiver();
501
+
502
+ /**
503
+ * Broadcast receiver to handle stationaryMonitor alarm, fired at low frequency while monitoring stationary-region.
504
+ * This is required because latest Android proximity-alerts don't seem to operate while suspended. Regularly polling
505
+ * the location seems to trigger the proximity-alerts while suspended.
506
+ */
507
+ private class StationaryLocationMonitorReceiver extends BroadcastReceiver {
508
+ @Override
509
+ public void onReceive(Context context, Intent intent)
510
+ {
511
+ logger.info("Stationary location monitor fired");
512
+ playDebugTone(Tone.DIALTONE);
513
+
514
+ criteria.setAccuracy(Criteria.ACCURACY_FINE);
515
+ criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
516
+ criteria.setPowerRequirement(Criteria.POWER_HIGH);
517
+
518
+ try {
519
+ locationManager.requestSingleUpdate(criteria, singleUpdatePI);
520
+ } catch (SecurityException e) {
521
+ logger.error("Security exception: {}", e.getMessage());
522
+ }
523
+ }
524
+ }
525
+
526
+ private BroadcastReceiver stationaryLocationMonitorReceiver = new StationaryLocationMonitorReceiver();
527
+
528
+ /**
529
+ * Broadcast receiver which detects a user has exit his circular stationary-region determined by the greater of stationaryLocation.getAccuracy() OR stationaryRadius
530
+ */
531
+ private class StationaryRegionReceiver extends BroadcastReceiver {
532
+ @Override
533
+ public void onReceive(Context context, Intent intent) {
534
+ String key = LocationManager.KEY_PROXIMITY_ENTERING;
535
+ Boolean entering = intent.getBooleanExtra(key, false);
536
+
537
+ if (entering) {
538
+ logger.debug("Entering stationary region");
539
+ if (isMoving) {
540
+ setPace(false);
541
+ }
542
+ }
543
+ else {
544
+ logger.debug("Exiting stationary region");
545
+ // There MUST be a valid, recent location if this event-handler was called.
546
+ Location location = getLastBestLocation();
547
+ if (location != null) {
548
+ onExitStationaryRegion(location);
549
+ }
550
+ }
551
+ }
552
+ }
553
+
554
+ private BroadcastReceiver stationaryRegionReceiver = new StationaryRegionReceiver();
555
+
556
+ public void onProviderDisabled(String provider) {
557
+ // TODO Auto-generated method stub
558
+ logger.debug("Provider {} was disabled", provider);
559
+ }
560
+
561
+ public void onProviderEnabled(String provider) {
562
+ // TODO Auto-generated method stub
563
+ logger.debug("Provider {} was enabled", provider);
564
+ }
565
+
566
+ public void onStatusChanged(String provider, int status, Bundle extras) {
567
+ // TODO Auto-generated method stub
568
+ logger.debug("Provider {} status changed: {}", provider, status);
569
+ }
570
+
571
+ @Override
572
+ public void onDestroy() {
573
+ logger.info("Destroying DistanceFilterLocationProvider");
574
+
575
+ this.onStop();
576
+ alarmManager.cancel(stationaryAlarmPI);
577
+ alarmManager.cancel(stationaryLocationPollingPI);
578
+
579
+ unregisterReceiver(stationaryAlarmReceiver);
580
+ unregisterReceiver(singleUpdateReceiver);
581
+ unregisterReceiver(stationaryRegionReceiver);
582
+ unregisterReceiver(stationaryLocationMonitorReceiver);
583
+
584
+ super.onDestroy();
585
+ }
586
+ }
@@ -0,0 +1,32 @@
1
+ /*
2
+ According to apache license
3
+
4
+ This is fork of christocracy cordova-plugin-background-geolocation plugin
5
+ https://github.com/christocracy/cordova-plugin-background-geolocation
6
+
7
+ This is a new class
8
+ */
9
+
10
+ package com.marianhello.bgloc.provider;
11
+
12
+ import com.marianhello.bgloc.Config;
13
+
14
+ /**
15
+ * LocationProvider interface
16
+ */
17
+ public interface LocationProvider {
18
+
19
+ int CMD_SWITCH_MODE = 1;
20
+
21
+ int BACKGROUND_MODE = 0;
22
+ int FOREGROUND_MODE = 1;
23
+
24
+ void onCreate();
25
+ void onDestroy();
26
+ void onStart();
27
+ void onStop();
28
+ void onCommand(int commandId, int arg1);
29
+ void onConfigure(Config config);
30
+ void setDelegate(ProviderDelegate delegate);
31
+ boolean isStarted();
32
+ }
@@ -0,0 +1,47 @@
1
+ /*
2
+ According to apache license
3
+
4
+ This is fork of christocracy cordova-plugin-background-geolocation plugin
5
+ https://github.com/christocracy/cordova-plugin-background-geolocation
6
+
7
+ This is a new class
8
+ */
9
+
10
+ package com.marianhello.bgloc.provider;
11
+
12
+ import android.content.Context;
13
+
14
+ import com.marianhello.bgloc.Config;
15
+
16
+ import java.lang.IllegalArgumentException;
17
+
18
+ /**
19
+ * LocationProviderFactory
20
+ */
21
+ public class LocationProviderFactory {
22
+
23
+ private Context mContext;
24
+
25
+ public LocationProviderFactory(Context context) {
26
+ this.mContext = context;
27
+ };
28
+
29
+ public LocationProvider getInstance (Integer locationProvider) {
30
+ LocationProvider provider;
31
+ switch (locationProvider) {
32
+ case Config.DISTANCE_FILTER_PROVIDER:
33
+ provider = new DistanceFilterLocationProvider(mContext);
34
+ break;
35
+ case Config.ACTIVITY_PROVIDER:
36
+ provider = new ActivityRecognitionLocationProvider(mContext);
37
+ break;
38
+ case Config.RAW_PROVIDER:
39
+ provider = new RawLocationProvider(mContext);
40
+ break;
41
+ default:
42
+ throw new IllegalArgumentException("Provider not found");
43
+ }
44
+
45
+ return provider;
46
+ }
47
+ }
@@ -0,0 +1,12 @@
1
+ package com.marianhello.bgloc.provider;
2
+
3
+ import com.marianhello.bgloc.PluginException;
4
+ import com.marianhello.bgloc.data.BackgroundActivity;
5
+ import com.marianhello.bgloc.data.BackgroundLocation;
6
+
7
+ public interface ProviderDelegate {
8
+ void onLocation(BackgroundLocation location);
9
+ void onStationary(BackgroundLocation location);
10
+ void onActivity(BackgroundActivity activity);
11
+ void onError(PluginException error);
12
+ }