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,760 @@
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.service;
11
+
12
+ import android.accounts.Account;
13
+ import android.app.Notification;
14
+ import android.app.NotificationManager;
15
+ import android.app.Service;
16
+ import android.content.BroadcastReceiver;
17
+ import android.content.ContentResolver;
18
+ import android.content.Context;
19
+ import android.content.Intent;
20
+ import android.content.IntentFilter;
21
+ import android.net.ConnectivityManager;
22
+ import android.net.NetworkInfo;
23
+ import android.os.Binder;
24
+ import android.os.Build;
25
+ import android.os.Bundle;
26
+ import android.os.Handler;
27
+ import android.os.HandlerThread;
28
+ import android.os.IBinder;
29
+ import android.os.Looper;
30
+ import android.os.Message;
31
+ import android.os.Process;
32
+ import androidx.annotation.Nullable;
33
+ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
34
+
35
+ import com.marianhello.bgloc.Config;
36
+ import com.marianhello.bgloc.ConnectivityListener;
37
+ import com.marianhello.bgloc.sync.NotificationHelper;
38
+ import com.marianhello.bgloc.PluginException;
39
+ import com.marianhello.bgloc.PostLocationTask;
40
+ import com.marianhello.bgloc.ResourceResolver;
41
+ import com.marianhello.bgloc.data.BackgroundActivity;
42
+ import com.marianhello.bgloc.data.BackgroundLocation;
43
+ import com.marianhello.bgloc.data.ConfigurationDAO;
44
+ import com.marianhello.bgloc.data.DAOFactory;
45
+ import com.marianhello.bgloc.data.LocationDAO;
46
+ import com.marianhello.bgloc.data.LocationTransform;
47
+ import com.marianhello.bgloc.headless.AbstractTaskRunner;
48
+ import com.marianhello.bgloc.headless.ActivityTask;
49
+ import com.marianhello.bgloc.headless.LocationTask;
50
+ import com.marianhello.bgloc.headless.StationaryTask;
51
+ import com.marianhello.bgloc.headless.Task;
52
+ import com.marianhello.bgloc.headless.TaskRunner;
53
+ import com.marianhello.bgloc.headless.TaskRunnerFactory;
54
+ import com.marianhello.bgloc.provider.LocationProvider;
55
+ import com.marianhello.bgloc.provider.LocationProviderFactory;
56
+ import com.marianhello.bgloc.provider.ProviderDelegate;
57
+ import com.marianhello.bgloc.sync.AccountHelper;
58
+ import com.marianhello.bgloc.sync.SyncService;
59
+ import com.marianhello.logging.LoggerManager;
60
+ import com.marianhello.logging.UncaughtExceptionLogger;
61
+
62
+ import org.chromium.content.browser.ThreadUtils;
63
+ import org.json.JSONException;
64
+
65
+ import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.containsCommand;
66
+ import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.containsMessage;
67
+ import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.getCommand;
68
+ import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.getMessage;
69
+
70
+ public class LocationServiceImpl extends Service implements ProviderDelegate, LocationService {
71
+
72
+ public static final String ACTION_BROADCAST = ".broadcast";
73
+
74
+ /**
75
+ * CommandId sent by the service to
76
+ * any registered clients with error.
77
+ */
78
+ public static final int MSG_ON_ERROR = 100;
79
+
80
+ /**
81
+ * CommandId sent by the service to
82
+ * any registered clients with the new position.
83
+ */
84
+ public static final int MSG_ON_LOCATION = 101;
85
+
86
+ /**
87
+ * CommandId sent by the service to
88
+ * any registered clients whenever the devices enters "stationary-mode"
89
+ */
90
+ public static final int MSG_ON_STATIONARY = 102;
91
+
92
+ /**
93
+ * CommandId sent by the service to
94
+ * any registered clients with new detected activity.
95
+ */
96
+ public static final int MSG_ON_ACTIVITY = 103;
97
+
98
+ public static final int MSG_ON_SERVICE_STARTED = 104;
99
+
100
+ public static final int MSG_ON_SERVICE_STOPPED = 105;
101
+
102
+ public static final int MSG_ON_ABORT_REQUESTED = 106;
103
+
104
+ public static final int MSG_ON_HTTP_AUTHORIZATION = 107;
105
+
106
+ /** notification id */
107
+ private static int NOTIFICATION_ID = 1;
108
+
109
+ private ResourceResolver mResolver;
110
+ private Config mConfig;
111
+ private LocationProvider mProvider;
112
+ private Account mSyncAccount;
113
+
114
+ private org.slf4j.Logger logger;
115
+
116
+ private final IBinder mBinder = new LocalBinder();
117
+ private HandlerThread mHandlerThread;
118
+ private ServiceHandler mServiceHandler;
119
+ private LocationDAO mLocationDAO;
120
+ private PostLocationTask mPostLocationTask;
121
+ private String mHeadlessTaskRunnerClass;
122
+ private TaskRunner mHeadlessTaskRunner;
123
+
124
+ private long mServiceId = -1;
125
+ private static boolean sIsRunning = false;
126
+ private boolean mIsInForeground = false;
127
+
128
+ private static LocationTransform sLocationTransform;
129
+ private static LocationProviderFactory sLocationProviderFactory;
130
+
131
+ private class ServiceHandler extends Handler {
132
+ public ServiceHandler(Looper looper) {
133
+ super(looper);
134
+ }
135
+
136
+ @Override
137
+ public void handleMessage(Message msg) {
138
+ super.handleMessage(msg);
139
+ }
140
+ }
141
+
142
+ /**
143
+ * When binding to the service, we return an interface to our messenger
144
+ * for sending messages to the service.
145
+ */
146
+ @Override
147
+ public IBinder onBind(Intent intent) {
148
+ logger.debug("Client binds to service");
149
+ return mBinder;
150
+ }
151
+
152
+ @Override
153
+ public void onRebind(Intent intent) {
154
+ logger.debug("Client rebinds to service");
155
+ super.onRebind(intent);
156
+ }
157
+
158
+ @Override
159
+ public boolean onUnbind(Intent intent) {
160
+ // All clients have unbound with unbindService()
161
+ logger.debug("All clients have been unbound from service");
162
+
163
+ return true; // Ensures onRebind() is called when a client re-binds.
164
+ }
165
+
166
+ @Override
167
+ public void onCreate() {
168
+ super.onCreate();
169
+
170
+ sIsRunning = false;
171
+
172
+ UncaughtExceptionLogger.register(this);
173
+
174
+ logger = LoggerManager.getLogger(LocationServiceImpl.class);
175
+ logger.info("Creating LocationServiceImpl");
176
+
177
+ mServiceId = System.currentTimeMillis();
178
+
179
+ // Start up the thread running the service. Note that we create a
180
+ // separate thread because the service normally runs in the process's
181
+ // main thread, which we don't want to block. We also make it
182
+ // background priority so CPU-intensive work will not disrupt our UI.
183
+ if (mHandlerThread == null) {
184
+ mHandlerThread = new HandlerThread("LocationServiceImpl.Thread", Process.THREAD_PRIORITY_BACKGROUND);
185
+ }
186
+ mHandlerThread.start();
187
+ // An Android service handler is a handler running on a specific background thread.
188
+ mServiceHandler = new ServiceHandler(mHandlerThread.getLooper());
189
+
190
+ mResolver = ResourceResolver.newInstance(this);
191
+
192
+ mSyncAccount = AccountHelper.CreateSyncAccount(this, mResolver.getAccountName(),
193
+ mResolver.getAccountType());
194
+
195
+ String authority = mResolver.getAuthority();
196
+ ContentResolver.setIsSyncable(mSyncAccount, authority, 1);
197
+ ContentResolver.setSyncAutomatically(mSyncAccount, authority, true);
198
+
199
+ mLocationDAO = DAOFactory.createLocationDAO(this);
200
+
201
+ mPostLocationTask = new PostLocationTask(mLocationDAO,
202
+ new PostLocationTask.PostLocationTaskListener() {
203
+ @Override
204
+ public void onRequestedAbortUpdates() {
205
+ handleRequestedAbortUpdates();
206
+ }
207
+
208
+ @Override
209
+ public void onHttpAuthorizationUpdates() {
210
+ handleHttpAuthorizationUpdates();
211
+ }
212
+
213
+ @Override
214
+ public void onSyncRequested() {
215
+ SyncService.sync(mSyncAccount, mResolver.getAuthority(), false);
216
+ }
217
+ }, new ConnectivityListener() {
218
+ @Override
219
+ public boolean hasConnectivity() {
220
+ return isNetworkAvailable();
221
+ }
222
+ });
223
+
224
+ registerReceiver(connectivityChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
225
+ NotificationHelper.registerServiceChannel(this);
226
+ }
227
+
228
+ @Override
229
+ public void onDestroy() {
230
+ logger.info("Destroying LocationServiceImpl");
231
+
232
+ // workaround for issue #276
233
+ if (mProvider != null) {
234
+ mProvider.onDestroy();
235
+ }
236
+
237
+ if (mHandlerThread != null) {
238
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
239
+ mHandlerThread.quitSafely();
240
+ } else {
241
+ mHandlerThread.quit(); //sorry
242
+ }
243
+ }
244
+
245
+ if (mPostLocationTask != null) {
246
+ mPostLocationTask.shutdown();
247
+ }
248
+
249
+
250
+ unregisterReceiver(connectivityChangeReceiver);
251
+
252
+ sIsRunning = false;
253
+ super.onDestroy();
254
+ }
255
+
256
+ @Override
257
+ public void onTaskRemoved(Intent rootIntent) {
258
+ logger.debug("Task has been removed");
259
+ // workaround for issue #276
260
+ Config config = getConfig();
261
+ if (config.getStopOnTerminate()) {
262
+ logger.info("Stopping self");
263
+ stopSelf();
264
+ } else {
265
+ logger.info("Continue running in background");
266
+ }
267
+ super.onTaskRemoved(rootIntent);
268
+ }
269
+
270
+ @Override
271
+ public int onStartCommand(Intent intent, int flags, int startId) {
272
+ if (intent == null) {
273
+ // when service was killed and restarted we will restart service
274
+ start();
275
+ return START_STICKY;
276
+ }
277
+
278
+ boolean containsCommand = containsCommand(intent);
279
+ logger.debug(
280
+ String.format("Service in [%s] state. cmdId: [%s]. startId: [%d]",
281
+ sIsRunning ? "STARTED" : "NOT STARTED",
282
+ containsCommand ? getCommand(intent).getId() : "N/A",
283
+ startId)
284
+ );
285
+
286
+ if (containsCommand) {
287
+ LocationServiceIntentBuilder.Command cmd = getCommand(intent);
288
+ processCommand(cmd.getId(), cmd.getArgument());
289
+ } else {
290
+ // Could be a BOOT-event, or the OS just randomly restarted the service...
291
+ startForegroundService();
292
+ }
293
+
294
+ if (containsMessage(intent)) {
295
+ processMessage(getMessage(intent));
296
+ }
297
+
298
+ return START_STICKY;
299
+ }
300
+
301
+ private void processMessage(String message) {
302
+ // currently we do not process any message
303
+ }
304
+
305
+ private void processCommand(int command, Object arg) {
306
+ try {
307
+ switch (command) {
308
+ case CommandId.START:
309
+ start();
310
+ break;
311
+ case CommandId.START_FOREGROUND_SERVICE:
312
+ startForegroundService();
313
+ break;
314
+ case CommandId.STOP:
315
+ stop();
316
+ break;
317
+ case CommandId.CONFIGURE:
318
+ configure((Config) arg);
319
+ break;
320
+ case CommandId.STOP_FOREGROUND:
321
+ stopForeground();
322
+ break;
323
+ case CommandId.START_FOREGROUND:
324
+ startForeground();
325
+ break;
326
+ case CommandId.REGISTER_HEADLESS_TASK:
327
+ registerHeadlessTask((String) arg);
328
+ break;
329
+ case CommandId.START_HEADLESS_TASK:
330
+ startHeadlessTask();
331
+ break;
332
+ case CommandId.STOP_HEADLESS_TASK:
333
+ stopHeadlessTask();
334
+ break;
335
+ }
336
+ } catch (Exception e) {
337
+ logger.error("processCommand: exception", e);
338
+ }
339
+ }
340
+
341
+ @Override
342
+ public synchronized void start() {
343
+ if (sIsRunning) {
344
+ return;
345
+ }
346
+
347
+ if (mConfig == null) {
348
+ logger.warn("Attempt to start unconfigured service. Will use stored or default.");
349
+ mConfig = getConfig();
350
+ // TODO: throw JSONException if config cannot be obtained from db
351
+ }
352
+
353
+ logger.debug("Will start service with: {}", mConfig.toString());
354
+
355
+ mPostLocationTask.setConfig(mConfig);
356
+ mPostLocationTask.clearQueue();
357
+
358
+ LocationProviderFactory spf = sLocationProviderFactory != null
359
+ ? sLocationProviderFactory : new LocationProviderFactory(this);
360
+ mProvider = spf.getInstance(mConfig.getLocationProvider());
361
+ mProvider.setDelegate(this);
362
+ mProvider.onCreate();
363
+ mProvider.onConfigure(mConfig);
364
+
365
+ sIsRunning = true;
366
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
367
+ @Override
368
+ public void run() {
369
+ mProvider.onStart();
370
+ if (mConfig.getStartForeground()) {
371
+ startForeground();
372
+ }
373
+ }
374
+ });
375
+
376
+ Bundle bundle = new Bundle();
377
+ bundle.putInt("action", MSG_ON_SERVICE_STARTED);
378
+ bundle.putLong("serviceId", mServiceId);
379
+ broadcastMessage(bundle);
380
+ }
381
+
382
+ @Override
383
+ public synchronized void startForegroundService() {
384
+ start();
385
+ startForeground();
386
+ }
387
+
388
+ @Override
389
+ public synchronized void stop() {
390
+ if (!sIsRunning) {
391
+ return;
392
+ }
393
+
394
+ if (mProvider != null) {
395
+ mProvider.onStop();
396
+ }
397
+
398
+ stopForeground(true);
399
+ stopSelf();
400
+
401
+ broadcastMessage(MSG_ON_SERVICE_STOPPED);
402
+ sIsRunning = false;
403
+ }
404
+
405
+ @Override
406
+ public void startForeground() {
407
+ if (sIsRunning && !mIsInForeground) {
408
+ Config config = getConfig();
409
+ Notification notification = new NotificationHelper.NotificationFactory(this).getNotification(
410
+ config.getNotificationTitle(),
411
+ config.getNotificationText(),
412
+ config.getLargeNotificationIcon(),
413
+ config.getSmallNotificationIcon(),
414
+ config.getNotificationIconColor());
415
+
416
+ if (mProvider != null) {
417
+ mProvider.onCommand(LocationProvider.CMD_SWITCH_MODE,
418
+ LocationProvider.FOREGROUND_MODE);
419
+ }
420
+ super.startForeground(NOTIFICATION_ID, notification);
421
+ mIsInForeground = true;
422
+ }
423
+ }
424
+
425
+ @Override
426
+ public synchronized void stopForeground() {
427
+ if (sIsRunning && mIsInForeground) {
428
+ stopForeground(true);
429
+ if (mProvider != null) {
430
+ mProvider.onCommand(LocationProvider.CMD_SWITCH_MODE,
431
+ LocationProvider.BACKGROUND_MODE);
432
+ }
433
+ mIsInForeground = false;
434
+ }
435
+ }
436
+
437
+ @Override
438
+ public synchronized void configure(Config config) {
439
+ if (mConfig == null) {
440
+ mConfig = config;
441
+ return;
442
+ }
443
+
444
+ final Config currentConfig = mConfig;
445
+ mConfig = config;
446
+
447
+ mPostLocationTask.setConfig(mConfig);
448
+
449
+ ThreadUtils.runOnUiThread(new Runnable() {
450
+ @Override
451
+ public void run() {
452
+ if (sIsRunning) {
453
+ if (currentConfig.getStartForeground() == true && mConfig.getStartForeground() == false) {
454
+ stopForeground(true);
455
+ }
456
+
457
+ if (mConfig.getStartForeground() == true) {
458
+ if (currentConfig.getStartForeground() == false) {
459
+ // was not running in foreground, so start in foreground
460
+ startForeground();
461
+ } else {
462
+ // was running in foreground, so just update existing notification
463
+ Notification notification = new NotificationHelper.NotificationFactory(LocationServiceImpl.this).getNotification(
464
+ mConfig.getNotificationTitle(),
465
+ mConfig.getNotificationText(),
466
+ mConfig.getLargeNotificationIcon(),
467
+ mConfig.getSmallNotificationIcon(),
468
+ mConfig.getNotificationIconColor());
469
+
470
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
471
+ notificationManager.notify(NOTIFICATION_ID, notification);
472
+ }
473
+ }
474
+ }
475
+
476
+ if (currentConfig.getLocationProvider() != mConfig.getLocationProvider()) {
477
+ boolean shouldStart = mProvider.isStarted();
478
+ mProvider.onDestroy();
479
+ LocationProviderFactory spf = new LocationProviderFactory(LocationServiceImpl.this);
480
+ mProvider = spf.getInstance(mConfig.getLocationProvider());
481
+ mProvider.setDelegate(LocationServiceImpl.this);
482
+ mProvider.onCreate();
483
+ mProvider.onConfigure(mConfig);
484
+ if (shouldStart) {
485
+ mProvider.onStart();
486
+ }
487
+ } else {
488
+ mProvider.onConfigure(mConfig);
489
+ }
490
+ }
491
+ });
492
+ }
493
+
494
+ @Override
495
+ public synchronized void registerHeadlessTask(String taskRunnerClass) {
496
+ logger.debug("Registering headless task");
497
+ mHeadlessTaskRunnerClass = taskRunnerClass;
498
+ }
499
+
500
+ @Override
501
+ public synchronized void clearHeadlessTask() {
502
+ logger.debug("Clearing headless task");
503
+ mHeadlessTaskRunnerClass = null;
504
+ mHeadlessTaskRunner = null;
505
+ }
506
+
507
+ @Override
508
+ public synchronized void startHeadlessTask() {
509
+ if (mHeadlessTaskRunnerClass == null &&
510
+ com.margelo.nitro.nitrobackgroundgeolocation.HeadlessTaskRegistry.getTaskName(this) != null) {
511
+ mHeadlessTaskRunnerClass = "com.margelo.nitro.nitrobackgroundgeolocation.ReactNativeHeadlessTaskRunner";
512
+ }
513
+ if (mHeadlessTaskRunnerClass != null) {
514
+ TaskRunnerFactory trf = new TaskRunnerFactory();
515
+ try {
516
+ mHeadlessTaskRunner = trf.getTaskRunner(mHeadlessTaskRunnerClass);
517
+ ((AbstractTaskRunner) mHeadlessTaskRunner).setContext(this);
518
+ } catch (Exception e) {
519
+ logger.error("Headless task start failed: {}", e.getMessage());
520
+ }
521
+ }
522
+ }
523
+
524
+ @Override
525
+ public synchronized void stopHeadlessTask() {
526
+ mHeadlessTaskRunner = null;
527
+ }
528
+
529
+ @Override
530
+ public synchronized void executeProviderCommand(final int command, final int arg1) {
531
+ if (mProvider == null) {
532
+ return;
533
+ }
534
+
535
+ ThreadUtils.runOnUiThread(new Runnable() {
536
+ @Override
537
+ public void run() {
538
+ mProvider.onCommand(command, arg1);
539
+ }
540
+ });
541
+ }
542
+
543
+ @Override
544
+ public void onLocation(BackgroundLocation location) {
545
+ logger.debug("New location {}", location.toString());
546
+
547
+ location = transformLocation(location);
548
+ if (location == null) {
549
+ logger.debug("Skipping location as requested by the locationTransform");
550
+ return;
551
+ }
552
+
553
+ Bundle bundle = new Bundle();
554
+ bundle.putInt("action", MSG_ON_LOCATION);
555
+ bundle.putParcelable("payload", location);
556
+ broadcastMessage(bundle);
557
+
558
+ runHeadlessTask(new LocationTask(location) {
559
+ @Override
560
+ public void onError(String errorMessage) {
561
+ logger.error("Location task error: {}", errorMessage);
562
+ }
563
+
564
+ @Override
565
+ public void onResult(String value) {
566
+ logger.debug("Location task result: {}", value);
567
+ }
568
+ });
569
+
570
+ postLocation(location);
571
+ }
572
+
573
+ @Override
574
+ public void onStationary(BackgroundLocation location) {
575
+ logger.debug("New stationary {}", location.toString());
576
+
577
+ location = transformLocation(location);
578
+ if (location == null) {
579
+ logger.debug("Skipping location as requested by the locationTransform");
580
+ return;
581
+ }
582
+
583
+ Bundle bundle = new Bundle();
584
+ bundle.putInt("action", MSG_ON_STATIONARY);
585
+ bundle.putParcelable("payload", location);
586
+ broadcastMessage(bundle);
587
+
588
+ runHeadlessTask(new StationaryTask(location){
589
+ @Override
590
+ public void onError(String errorMessage) {
591
+ logger.error("Stationary task error: {}", errorMessage);
592
+ }
593
+
594
+ @Override
595
+ public void onResult(String value) {
596
+ logger.debug("Stationary task result: {}", value);
597
+ }
598
+ });
599
+
600
+ postLocation(location);
601
+ }
602
+
603
+ @Override
604
+ public void onActivity(BackgroundActivity activity) {
605
+ logger.debug("New activity {}", activity.toString());
606
+
607
+ Bundle bundle = new Bundle();
608
+ bundle.putInt("action", MSG_ON_ACTIVITY);
609
+ bundle.putParcelable("payload", activity);
610
+ broadcastMessage(bundle);
611
+
612
+ runHeadlessTask(new ActivityTask(activity){
613
+ @Override
614
+ public void onError(String errorMessage) {
615
+ logger.error("Activity task error: {}", errorMessage);
616
+ }
617
+
618
+ @Override
619
+ public void onResult(String value) {
620
+ logger.debug("Activity task result: {}", value);
621
+ }
622
+ });
623
+ }
624
+
625
+ @Override
626
+ public void onError(PluginException error) {
627
+ Bundle bundle = new Bundle();
628
+ bundle.putInt("action", MSG_ON_ERROR);
629
+ bundle.putBundle("payload", error.toBundle());
630
+ broadcastMessage(bundle);
631
+ }
632
+
633
+ private void broadcastMessage(int msgId) {
634
+ Bundle bundle = new Bundle();
635
+ bundle.putInt("action", msgId);
636
+ broadcastMessage(bundle);
637
+ }
638
+
639
+ private void broadcastMessage(Bundle bundle) {
640
+ Intent intent = new Intent(ACTION_BROADCAST);
641
+ intent.putExtras(bundle);
642
+ LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
643
+ }
644
+
645
+ @Override
646
+ public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
647
+ return super.registerReceiver(receiver, filter, null, mServiceHandler, RECEIVER_NOT_EXPORTED);
648
+ }
649
+
650
+ @Override
651
+ public void unregisterReceiver(BroadcastReceiver receiver) {
652
+ try {
653
+ super.unregisterReceiver(receiver);
654
+ } catch (IllegalArgumentException ex) {
655
+ // if was not registered ignore exception
656
+ }
657
+ }
658
+
659
+ public Config getConfig() {
660
+ Config config = mConfig;
661
+ if (config == null) {
662
+ ConfigurationDAO dao = DAOFactory.createConfigurationDAO(this);
663
+ try {
664
+ config = dao.retrieveConfiguration();
665
+ } catch (JSONException e) {
666
+ logger.error("Config exception: {}", e.getMessage());
667
+ }
668
+ }
669
+
670
+ if (config == null) {
671
+ config = Config.getDefault();
672
+ }
673
+
674
+ mConfig = config;
675
+ return mConfig;
676
+ }
677
+
678
+ public static void setLocationProviderFactory(LocationProviderFactory factory) {
679
+ sLocationProviderFactory = factory;
680
+ }
681
+
682
+ private void runHeadlessTask(Task task) {
683
+ if (mHeadlessTaskRunner == null) {
684
+ return;
685
+ }
686
+
687
+ logger.debug("Running headless task: {}", task);
688
+ mHeadlessTaskRunner.runTask(task);
689
+ }
690
+
691
+ /**
692
+ * Class used for the client Binder. Since this service runs in the same process as its
693
+ * clients, we don't need to deal with IPC.
694
+ */
695
+ public class LocalBinder extends Binder {
696
+ public LocationServiceImpl getService() {
697
+ return LocationServiceImpl.this;
698
+ }
699
+ }
700
+
701
+ private BackgroundLocation transformLocation(BackgroundLocation location) {
702
+ if (sLocationTransform != null) {
703
+ return sLocationTransform.transformLocationBeforeCommit(this, location);
704
+ }
705
+
706
+ return location;
707
+ }
708
+
709
+ private void postLocation(BackgroundLocation location) {
710
+ mPostLocationTask.add(location);
711
+ }
712
+
713
+ public void handleRequestedAbortUpdates() {
714
+ broadcastMessage(MSG_ON_ABORT_REQUESTED);
715
+ }
716
+
717
+ public void handleHttpAuthorizationUpdates() {
718
+ broadcastMessage(MSG_ON_HTTP_AUTHORIZATION);
719
+ }
720
+
721
+ /**
722
+ * Broadcast receiver which detects connectivity change condition
723
+ */
724
+ private BroadcastReceiver connectivityChangeReceiver = new BroadcastReceiver() {
725
+ @Override
726
+ public void onReceive(Context context, Intent intent) {
727
+ boolean hasConnectivity = isNetworkAvailable();
728
+ mPostLocationTask.setHasConnectivity(hasConnectivity);
729
+ logger.info("Network condition changed has connectivity: {}", hasConnectivity);
730
+ }
731
+ };
732
+
733
+ private boolean isNetworkAvailable() {
734
+ ConnectivityManager cm =
735
+ (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
736
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
737
+ return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
738
+ }
739
+
740
+ public long getServiceId() {
741
+ return mServiceId;
742
+ }
743
+
744
+ public boolean isBound() {
745
+ LocationServiceInfo info = new LocationServiceInfoImpl(this);
746
+ return info.isBound();
747
+ }
748
+
749
+ public static boolean isRunning() {
750
+ return sIsRunning;
751
+ }
752
+
753
+ public static void setLocationTransform(@Nullable LocationTransform transform) {
754
+ sLocationTransform = transform;
755
+ }
756
+
757
+ public static @Nullable LocationTransform getLocationTransform() {
758
+ return sLocationTransform;
759
+ }
760
+ }