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,538 @@
1
+ package com.margelo.nitro.nitrobackgroundgeolocation
2
+
3
+ import android.app.Application
4
+ import android.os.Bundle
5
+ import android.os.Handler
6
+ import android.os.Looper
7
+ import android.util.Log
8
+ import androidx.annotation.Keep
9
+ import androidx.lifecycle.DefaultLifecycleObserver
10
+ import androidx.lifecycle.LifecycleOwner
11
+ import androidx.lifecycle.ProcessLifecycleOwner
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import com.margelo.nitro.NitroModules
14
+ import com.margelo.nitro.core.Promise
15
+ import com.marianhello.bgloc.BackgroundGeolocationFacade
16
+ import com.marianhello.bgloc.Config
17
+ import com.marianhello.bgloc.PluginDelegate
18
+ import com.marianhello.bgloc.PluginException
19
+ import com.marianhello.bgloc.data.BackgroundActivity
20
+ import com.marianhello.bgloc.data.BackgroundLocation
21
+ import org.json.JSONObject
22
+ import java.util.concurrent.CopyOnWriteArrayList
23
+
24
+ /**
25
+ * Kotlin HybridObject that bridges Nitro's generated spec to the Java
26
+ * [BackgroundGeolocationFacade].
27
+ *
28
+ * The class implements [PluginDelegate] so the facade can notify it of
29
+ * location / activity / status changes which are then forwarded to the
30
+ * JavaScript layer via the stored callback lists.
31
+ */
32
+ @DoNotStrip
33
+ @Keep
34
+ class NitroBackgroundGeolocation :
35
+ HybridNitroBackgroundGeolocationSpec(),
36
+ PluginDelegate,
37
+ DefaultLifecycleObserver,
38
+ Application.ActivityLifecycleCallbacks {
39
+
40
+ companion object {
41
+ private const val TAG = "NitroBGGeo"
42
+
43
+ /**
44
+ * Library-owned headless task name. Must match `HEADLESS_TASK_NAME`
45
+ * in the TypeScript headless module. Users do not interact with
46
+ * this string — the JS-side `registerHeadlessHandler` API hides it.
47
+ */
48
+ const val LIB_TASK_NAME = "__rn-nitro-bg-geo-headless__"
49
+ }
50
+
51
+ private val context
52
+ get() = NitroModules.applicationContext?.applicationContext
53
+ ?: throw IllegalStateException(
54
+ "NitroBackgroundGeolocation: NitroModules.applicationContext is null. " +
55
+ "Ensure Nitro is installed before using this module."
56
+ )
57
+
58
+ private val application
59
+ get() = context as? Application
60
+ ?: throw IllegalStateException(
61
+ "NitroBackgroundGeolocation: application context is not an Application."
62
+ )
63
+
64
+ private val facade: BackgroundGeolocationFacade by lazy {
65
+ BackgroundGeolocationFacade(context, this)
66
+ }
67
+
68
+ private val mainHandler = Handler(Looper.getMainLooper())
69
+ private val trackedActivities = mutableSetOf<Int>()
70
+ private var lifecycleObserverRegistered = false
71
+ private var activityCallbacksRegistered = false
72
+ private var facadeDestroyed = false
73
+
74
+ // ---- Callback lists ----
75
+
76
+ private val locationCallbacks = CopyOnWriteArrayList<(Location) -> Unit>()
77
+ private val stationaryCallbacks = CopyOnWriteArrayList<(StationaryLocation) -> Unit>()
78
+ private val activityCallbacks = CopyOnWriteArrayList<(Activity) -> Unit>()
79
+ private val startCallbacks = CopyOnWriteArrayList<() -> Unit>()
80
+ private val stopCallbacks = CopyOnWriteArrayList<() -> Unit>()
81
+ private val errorCallbacks = CopyOnWriteArrayList<(BackgroundGeolocationError) -> Unit>()
82
+ private val authorizationCallbacks = CopyOnWriteArrayList<(AuthorizationStatus) -> Unit>()
83
+ private val foregroundCallbacks = CopyOnWriteArrayList<() -> Unit>()
84
+ private val backgroundCallbacks = CopyOnWriteArrayList<() -> Unit>()
85
+ private val abortRequestedCallbacks = CopyOnWriteArrayList<() -> Unit>()
86
+ private val httpAuthorizationCallbacks = CopyOnWriteArrayList<() -> Unit>()
87
+
88
+ init {
89
+ NitroModules.applicationContext?.currentActivity?.let { currentActivity ->
90
+ trackedActivities.add(System.identityHashCode(currentActivity))
91
+ }
92
+
93
+ mainHandler.post {
94
+ if (!lifecycleObserverRegistered) {
95
+ ProcessLifecycleOwner.get().lifecycle.addObserver(this)
96
+ lifecycleObserverRegistered = true
97
+ }
98
+ if (!activityCallbacksRegistered) {
99
+ application.registerActivityLifecycleCallbacks(this)
100
+ activityCallbacksRegistered = true
101
+ }
102
+ }
103
+ }
104
+
105
+ // ================================================================
106
+ // HybridNitroBackgroundGeolocationSpec — Lifecycle
107
+ // ================================================================
108
+
109
+ override fun configure(options: ConfigureOptions): Promise<Unit> {
110
+ return Promise.parallel {
111
+ val resolvedConfig = Config(facade.config)
112
+ ConfigMapper.applyNativeConfig(resolvedConfig, options)
113
+
114
+ // The library always owns the headless task name. The JS side
115
+ // may or may not have a handler registered against it; if no
116
+ // handler is bound, the headless runner is a safe no-op.
117
+ HeadlessTaskRegistry.setTaskName(context, LIB_TASK_NAME)
118
+ facade.reconfigure(resolvedConfig)
119
+ if (facade.isRunning) {
120
+ facade.registerHeadlessTask(ReactNativeHeadlessTaskRunner::class.java.name)
121
+ }
122
+ }
123
+ }
124
+
125
+ override fun start(): Promise<Unit> {
126
+ return Promise.parallel {
127
+ facade.start()
128
+ }
129
+ }
130
+
131
+ override fun stop(): Promise<Unit> {
132
+ return Promise.parallel {
133
+ facade.stop()
134
+ }
135
+ }
136
+
137
+ // ================================================================
138
+ // Location
139
+ // ================================================================
140
+
141
+ override fun getCurrentLocation(options: LocationOptions): Promise<Location> {
142
+ return Promise.parallel {
143
+ val timeout = options.timeout?.toInt() ?: 30000
144
+ val maximumAge = options.maximumAge?.toLong() ?: 0L
145
+ val enableHighAccuracy = options.enableHighAccuracy ?: false
146
+ val bgLocation = facade.getCurrentLocation(timeout, maximumAge, enableHighAccuracy)
147
+ ConfigMapper.toJsLocation(bgLocation)
148
+ }
149
+ }
150
+
151
+ override fun getStationaryLocation(): Promise<StationaryLocation?> {
152
+ return Promise.parallel {
153
+ val bgLocation = facade.stationaryLocation
154
+ bgLocation?.let { ConfigMapper.toJsStationaryLocation(it) }
155
+ }
156
+ }
157
+
158
+ // ================================================================
159
+ // Status
160
+ // ================================================================
161
+
162
+ override fun checkStatus(): Promise<ServiceStatus> {
163
+ return Promise.parallel {
164
+ val isRunning = facade.isRunning
165
+ val locationServicesEnabled = try {
166
+ facade.locationServicesEnabled()
167
+ } catch (e: PluginException) {
168
+ false
169
+ }
170
+ val authStatus = when (facade.authorizationStatus) {
171
+ BackgroundGeolocationFacade.AUTHORIZATION_AUTHORIZED -> AuthorizationStatus.AUTHORIZED
172
+ else -> AuthorizationStatus.NOT_AUTHORIZED
173
+ }
174
+ ServiceStatus(
175
+ isRunning = isRunning,
176
+ locationServicesEnabled = locationServicesEnabled,
177
+ authorization = authStatus
178
+ )
179
+ }
180
+ }
181
+
182
+ override fun getConfig(): Promise<ConfigureOptions> {
183
+ return Promise.parallel {
184
+ val nativeConfig = facade.config
185
+ ConfigMapper.toJsConfig(nativeConfig)
186
+ }
187
+ }
188
+
189
+ override fun showAppSettings() {
190
+ BackgroundGeolocationFacade.showAppSettings(context)
191
+ }
192
+
193
+ override fun showLocationSettings() {
194
+ BackgroundGeolocationFacade.showLocationSettings(context)
195
+ }
196
+
197
+ // ================================================================
198
+ // Storage
199
+ // ================================================================
200
+
201
+ override fun getLocations(): Promise<Array<Location>> {
202
+ return Promise.parallel {
203
+ facade.locations.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
204
+ }
205
+ }
206
+
207
+ override fun getValidLocations(): Promise<Array<Location>> {
208
+ return Promise.parallel {
209
+ facade.validLocations.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
210
+ }
211
+ }
212
+
213
+ override fun getValidLocationsAndDelete(): Promise<Array<Location>> {
214
+ return Promise.parallel {
215
+ facade.validLocationsAndDelete.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
216
+ }
217
+ }
218
+
219
+ override fun deleteLocation(locationId: Double): Promise<Unit> {
220
+ return Promise.parallel {
221
+ facade.deleteLocation(locationId.toLong())
222
+ }
223
+ }
224
+
225
+ override fun deleteAllLocations(): Promise<Unit> {
226
+ return Promise.parallel {
227
+ facade.deleteAllLocations()
228
+ }
229
+ }
230
+
231
+ // ================================================================
232
+ // Sync
233
+ // ================================================================
234
+
235
+ override fun forceSync(): Promise<Unit> {
236
+ return Promise.parallel {
237
+ facade.forceSync()
238
+ }
239
+ }
240
+
241
+ // ================================================================
242
+ // Logging
243
+ // ================================================================
244
+
245
+ override fun getLogEntries(limit: Double, fromId: Double, minLevel: NativeLogLevel): Promise<Array<LogEntry>> {
246
+ return Promise.parallel {
247
+ val levelName = when (minLevel) {
248
+ NativeLogLevel.TRACEVALUE -> "TRACE"
249
+ NativeLogLevel.DEBUGVALUE -> "DEBUG"
250
+ NativeLogLevel.INFOVALUE -> "INFO"
251
+ NativeLogLevel.WARNVALUE -> "WARN"
252
+ NativeLogLevel.ERRORVALUE -> "ERROR"
253
+ }
254
+ val entries = facade.getLogEntries(limit.toInt(), fromId.toInt(), levelName)
255
+ ?: emptyList()
256
+ entries.mapNotNull { it?.let(ConfigMapper::toJsLogEntry) }.toTypedArray()
257
+ }
258
+ }
259
+
260
+ // ================================================================
261
+ // Event Subscriptions
262
+ // ================================================================
263
+
264
+ override fun onLocation(callback: (location: Location) -> Unit): () -> Unit {
265
+ locationCallbacks.add(callback)
266
+ return {
267
+ locationCallbacks.remove(callback)
268
+ }
269
+ }
270
+
271
+ override fun onStationary(callback: (location: StationaryLocation) -> Unit): () -> Unit {
272
+ stationaryCallbacks.add(callback)
273
+ return {
274
+ stationaryCallbacks.remove(callback)
275
+ }
276
+ }
277
+
278
+ override fun onActivity(callback: (activity: Activity) -> Unit): () -> Unit {
279
+ activityCallbacks.add(callback)
280
+ return {
281
+ activityCallbacks.remove(callback)
282
+ }
283
+ }
284
+
285
+ override fun onStart(callback: () -> Unit): () -> Unit {
286
+ startCallbacks.add(callback)
287
+ return {
288
+ startCallbacks.remove(callback)
289
+ }
290
+ }
291
+
292
+ override fun onStop(callback: () -> Unit): () -> Unit {
293
+ stopCallbacks.add(callback)
294
+ return {
295
+ stopCallbacks.remove(callback)
296
+ }
297
+ }
298
+
299
+ override fun onError(callback: (error: BackgroundGeolocationError) -> Unit): () -> Unit {
300
+ errorCallbacks.add(callback)
301
+ return {
302
+ errorCallbacks.remove(callback)
303
+ }
304
+ }
305
+
306
+ override fun onAuthorization(callback: (status: AuthorizationStatus) -> Unit): () -> Unit {
307
+ authorizationCallbacks.add(callback)
308
+ return {
309
+ authorizationCallbacks.remove(callback)
310
+ }
311
+ }
312
+
313
+ override fun onForeground(callback: () -> Unit): () -> Unit {
314
+ foregroundCallbacks.add(callback)
315
+ return {
316
+ foregroundCallbacks.remove(callback)
317
+ }
318
+ }
319
+
320
+ override fun onBackground(callback: () -> Unit): () -> Unit {
321
+ backgroundCallbacks.add(callback)
322
+ return {
323
+ backgroundCallbacks.remove(callback)
324
+ }
325
+ }
326
+
327
+ override fun onAbortRequested(callback: () -> Unit): () -> Unit {
328
+ abortRequestedCallbacks.add(callback)
329
+ return {
330
+ abortRequestedCallbacks.remove(callback)
331
+ }
332
+ }
333
+
334
+ override fun onHttpAuthorization(callback: () -> Unit): () -> Unit {
335
+ httpAuthorizationCallbacks.add(callback)
336
+ return {
337
+ httpAuthorizationCallbacks.remove(callback)
338
+ }
339
+ }
340
+
341
+ override fun removeAllListeners() {
342
+ locationCallbacks.clear()
343
+ stationaryCallbacks.clear()
344
+ activityCallbacks.clear()
345
+ startCallbacks.clear()
346
+ stopCallbacks.clear()
347
+ errorCallbacks.clear()
348
+ authorizationCallbacks.clear()
349
+ foregroundCallbacks.clear()
350
+ backgroundCallbacks.clear()
351
+ abortRequestedCallbacks.clear()
352
+ httpAuthorizationCallbacks.clear()
353
+ }
354
+
355
+ // ================================================================
356
+ // Lifecycle observer (foreground/background/destroy)
357
+ // ================================================================
358
+
359
+ override fun onStart(owner: LifecycleOwner) {
360
+ Log.d(TAG, "App entered foreground")
361
+ facadeDestroyed = false
362
+ facade.resume()
363
+ foregroundCallbacks.forEach { it() }
364
+ }
365
+
366
+ override fun onStop(owner: LifecycleOwner) {
367
+ Log.d(TAG, "App entered background")
368
+ facade.pause()
369
+ backgroundCallbacks.forEach { it() }
370
+ }
371
+
372
+ override fun dispose() {
373
+ try {
374
+ mainHandler.post {
375
+ unregisterObservers()
376
+ destroyFacade()
377
+ }
378
+ } catch (_: Throwable) {
379
+ }
380
+ }
381
+
382
+ // ================================================================
383
+ // PluginDelegate implementation
384
+ // ================================================================
385
+
386
+ override fun onLocationChanged(location: BackgroundLocation) {
387
+ val jsLocation = ConfigMapper.toJsLocation(location)
388
+ locationCallbacks.forEach { it(jsLocation) }
389
+ fireHeadlessTask("location", location)
390
+ }
391
+
392
+ override fun onStationaryChanged(location: BackgroundLocation) {
393
+ val jsLocation = ConfigMapper.toJsStationaryLocation(location)
394
+ stationaryCallbacks.forEach { it(jsLocation) }
395
+ fireHeadlessTask("stationary", location)
396
+ }
397
+
398
+ override fun onActivityChanged(activity: BackgroundActivity) {
399
+ val jsActivity = ConfigMapper.toJsActivity(activity)
400
+ activityCallbacks.forEach { it(jsActivity) }
401
+ fireHeadlessActivityTask(activity)
402
+ }
403
+
404
+ override fun onServiceStatusChanged(status: Int) {
405
+ when (status) {
406
+ BackgroundGeolocationFacade.SERVICE_STARTED -> {
407
+ startCallbacks.forEach { it() }
408
+ }
409
+ BackgroundGeolocationFacade.SERVICE_STOPPED -> {
410
+ stopCallbacks.forEach { it() }
411
+ }
412
+ }
413
+ }
414
+
415
+ override fun onAuthorizationChanged(authStatus: Int) {
416
+ val status = when (authStatus) {
417
+ BackgroundGeolocationFacade.AUTHORIZATION_AUTHORIZED -> AuthorizationStatus.AUTHORIZED
418
+ else -> AuthorizationStatus.NOT_AUTHORIZED
419
+ }
420
+ authorizationCallbacks.forEach { it(status) }
421
+ }
422
+
423
+ override fun onError(error: PluginException) {
424
+ val jsError = BackgroundGeolocationError(
425
+ code = (error.code ?: 0).toDouble(),
426
+ message = error.message ?: "Unknown error"
427
+ )
428
+ errorCallbacks.forEach { it(jsError) }
429
+ }
430
+
431
+ override fun onAbortRequested() {
432
+ abortRequestedCallbacks.forEach { it() }
433
+ }
434
+
435
+ override fun onHttpAuthorization() {
436
+ httpAuthorizationCallbacks.forEach { it() }
437
+ }
438
+
439
+ // ================================================================
440
+ // Headless task helper
441
+ // ================================================================
442
+
443
+ private fun fireHeadlessTask(eventName: String, location: BackgroundLocation) {
444
+ try {
445
+ val params = JSONObject().apply {
446
+ put("id", location.locationId)
447
+ put("provider", location.provider)
448
+ put("locationProvider", location.locationProvider)
449
+ put("time", location.time)
450
+ put("latitude", location.latitude)
451
+ put("longitude", location.longitude)
452
+ put("accuracy", location.accuracy)
453
+ put("speed", location.speed)
454
+ put("altitude", location.altitude)
455
+ if (location.hasVerticalAccuracy()) {
456
+ put("altitudeAccuracy", location.verticalAccuracy)
457
+ }
458
+ put("bearing", location.bearing)
459
+ put("isFromMockProvider", location.isFromMockProvider)
460
+ put("mockLocationsEnabled", location.areMockLocationsEnabled())
461
+ if (eventName == "stationary") {
462
+ put("radius", location.radius)
463
+ }
464
+ }
465
+ val intent = HeadlessTaskService.createIntent(
466
+ context,
467
+ LIB_TASK_NAME,
468
+ eventName,
469
+ params.toString()
470
+ )
471
+ context.startService(intent)
472
+ } catch (e: Exception) {
473
+ Log.e(TAG, "Failed to fire headless task", e)
474
+ }
475
+ }
476
+
477
+ private fun fireHeadlessActivityTask(activity: BackgroundActivity) {
478
+ try {
479
+ val params = JSONObject().apply {
480
+ put("confidence", activity.confidence)
481
+ put("type", BackgroundActivity.getActivityString(activity.type))
482
+ }
483
+ val intent = HeadlessTaskService.createIntent(
484
+ context,
485
+ LIB_TASK_NAME,
486
+ "activity",
487
+ params.toString()
488
+ )
489
+ context.startService(intent)
490
+ } catch (e: Exception) {
491
+ Log.e(TAG, "Failed to fire headless activity task", e)
492
+ }
493
+ }
494
+
495
+ private fun destroyFacade() {
496
+ if (facadeDestroyed) return
497
+ facadeDestroyed = true
498
+ Log.d(TAG, "App activity destroyed")
499
+ facade.destroy()
500
+ }
501
+
502
+ private fun unregisterObservers() {
503
+ if (lifecycleObserverRegistered) {
504
+ ProcessLifecycleOwner.get().lifecycle.removeObserver(this)
505
+ lifecycleObserverRegistered = false
506
+ }
507
+ if (activityCallbacksRegistered) {
508
+ application.unregisterActivityLifecycleCallbacks(this)
509
+ activityCallbacksRegistered = false
510
+ }
511
+ }
512
+
513
+ override fun onActivityCreated(activity: android.app.Activity, savedInstanceState: Bundle?) {
514
+ trackedActivities.add(System.identityHashCode(activity))
515
+ }
516
+
517
+ override fun onActivityStarted(activity: android.app.Activity) {
518
+ trackedActivities.add(System.identityHashCode(activity))
519
+ }
520
+
521
+ override fun onActivityResumed(activity: android.app.Activity) {
522
+ trackedActivities.add(System.identityHashCode(activity))
523
+ }
524
+
525
+ override fun onActivityPaused(activity: android.app.Activity) = Unit
526
+
527
+ override fun onActivityStopped(activity: android.app.Activity) = Unit
528
+
529
+ override fun onActivitySaveInstanceState(activity: android.app.Activity, outState: Bundle) = Unit
530
+
531
+ override fun onActivityDestroyed(activity: android.app.Activity) {
532
+ trackedActivities.remove(System.identityHashCode(activity))
533
+ if (activity.isChangingConfigurations) return
534
+ if (trackedActivities.isEmpty()) {
535
+ destroyFacade()
536
+ }
537
+ }
538
+ }
@@ -0,0 +1,22 @@
1
+ package com.margelo.nitro.nitrobackgroundgeolocation
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfoProvider
7
+
8
+ class NitroBackgroundGeolocationPackage : BaseReactPackage() {
9
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
10
+ return null
11
+ }
12
+
13
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
14
+ return ReactModuleInfoProvider { HashMap() }
15
+ }
16
+
17
+ companion object {
18
+ init {
19
+ System.loadLibrary("nitrobackgroundgeolocation")
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,62 @@
1
+ package com.margelo.nitro.nitrobackgroundgeolocation
2
+
3
+ import android.os.Bundle
4
+ import com.marianhello.bgloc.headless.AbstractTaskRunner
5
+ import com.marianhello.bgloc.headless.Task
6
+ import org.json.JSONArray
7
+ import org.json.JSONObject
8
+
9
+ class ReactNativeHeadlessTaskRunner : AbstractTaskRunner() {
10
+ override fun runTask(task: Task) {
11
+ val context = mContext ?: run {
12
+ task.onError("Cannot run headless task without Android context.")
13
+ return
14
+ }
15
+ val taskName = HeadlessTaskRegistry.getTaskName(context)
16
+ if (taskName.isNullOrBlank()) {
17
+ task.onError("Cannot run headless task because no task name is registered.")
18
+ return
19
+ }
20
+
21
+ try {
22
+ val taskBundle = task.bundle
23
+ val params = bundleToJson(taskBundle.getBundle("params")).toString()
24
+ val intent = HeadlessTaskService.createIntent(
25
+ context,
26
+ taskName,
27
+ task.name,
28
+ params
29
+ )
30
+ context.startService(intent)
31
+ task.onResult(params)
32
+ } catch (e: Exception) {
33
+ task.onError("Failed to run React Native headless task: ${e.message}")
34
+ }
35
+ }
36
+
37
+ private fun bundleToJson(bundle: Bundle?): JSONObject {
38
+ val json = JSONObject()
39
+ if (bundle == null) return json
40
+
41
+ for (key in bundle.keySet()) {
42
+ json.put(key, bundleValueToJson(bundle.get(key)))
43
+ }
44
+
45
+ return json
46
+ }
47
+
48
+ private fun bundleValueToJson(value: Any?): Any? {
49
+ return when (value) {
50
+ null -> JSONObject.NULL
51
+ is Bundle -> bundleToJson(value)
52
+ is Array<*> -> JSONArray(value.map { bundleValueToJson(it) })
53
+ is BooleanArray -> JSONArray(value.map { it })
54
+ is IntArray -> JSONArray(value.map { it })
55
+ is LongArray -> JSONArray(value.map { it })
56
+ is FloatArray -> JSONArray(value.map { it })
57
+ is DoubleArray -> JSONArray(value.map { it })
58
+ is ArrayList<*> -> JSONArray(value.map { bundleValueToJson(it) })
59
+ else -> value
60
+ }
61
+ }
62
+ }