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,48 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ import android.os.Bundle;
4
+
5
+ import com.marianhello.bgloc.data.BackgroundActivity;
6
+
7
+ import org.json.JSONException;
8
+
9
+ public abstract class ActivityTask extends Task {
10
+ private BackgroundActivity mActivity;
11
+
12
+ public ActivityTask(BackgroundActivity activity) {
13
+ mActivity = activity;
14
+ }
15
+
16
+ @Override
17
+ public String getName() {
18
+ return "activity";
19
+ }
20
+
21
+ @Override
22
+ public Bundle getBundle() {
23
+ Bundle bundle = new Bundle();
24
+ Bundle params = new Bundle();
25
+
26
+ params.putInt("confidence", mActivity.getConfidence());
27
+ params.putString("type", BackgroundActivity.getActivityString(mActivity.getType()));
28
+
29
+ bundle.putString("name", getName());
30
+ bundle.putBundle("params", params);
31
+ return bundle;
32
+ }
33
+
34
+ @Override
35
+ public String toString() {
36
+ if (mActivity == null) {
37
+ return null;
38
+ }
39
+
40
+ try {
41
+ return mActivity.toJSONObject().toString();
42
+ } catch (JSONException e) {
43
+ onError("Error processing params: " + e.getMessage());
44
+ }
45
+
46
+ return null;
47
+ }
48
+ }
@@ -0,0 +1,10 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ /**
4
+ * Interface for passing code that will be executed after the JS has finished
5
+ */
6
+
7
+ public interface JsCallback {
8
+ void onResult(String value);
9
+ void onError(String errorMessage);
10
+ }
@@ -0,0 +1,61 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ import android.os.Bundle;
4
+
5
+ import com.marianhello.bgloc.data.BackgroundLocation;
6
+
7
+ import org.json.JSONException;
8
+
9
+ public abstract class LocationTask extends Task {
10
+ protected BackgroundLocation mLocation;
11
+
12
+ public LocationTask(BackgroundLocation location) {
13
+ mLocation = location;
14
+ }
15
+
16
+ @Override
17
+ public String getName() {
18
+ return "location";
19
+ }
20
+
21
+ @Override
22
+ public Bundle getBundle() {
23
+ Bundle bundle = new Bundle();
24
+ Bundle params = new Bundle();
25
+
26
+ if (mLocation.getLocationId() != null) params.putLong("id", mLocation.getLocationId());
27
+ params.putString("provider", mLocation.getProvider());
28
+ params.putInt("locationProvider", mLocation.getLocationProvider());
29
+ params.putLong("time", mLocation.getTime());
30
+ params.putDouble("latitude", mLocation.getLatitude());
31
+ params.putDouble("longitude", mLocation.getLongitude());
32
+ if (mLocation.hasAccuracy()) params.putFloat("accuracy", mLocation.getAccuracy());
33
+ if (mLocation.hasVerticalAccuracy()) params.putFloat("altitudeAccuracy", mLocation.getVerticalAccuracy());
34
+ if (mLocation.hasSpeed()) params.putFloat("speed", mLocation.getSpeed());
35
+ if (mLocation.hasAltitude()) params.putDouble("altitude", mLocation.getAltitude());
36
+ if (mLocation.hasBearing()) params.putFloat("bearing", mLocation.getBearing());
37
+ if (mLocation.hasRadius()) params.putFloat("radius", mLocation.getRadius());
38
+ if (mLocation.hasIsFromMockProvider()) params.putBoolean("isFromMockProvider", mLocation.isFromMockProvider());
39
+ if (mLocation.hasMockLocationsEnabled()) params.putBoolean("mockLocationsEnabled", mLocation.areMockLocationsEnabled());
40
+
41
+ bundle.putString("name", getName());
42
+ bundle.putBundle("params", params);
43
+
44
+ return bundle;
45
+ }
46
+
47
+ @Override
48
+ public String toString() {
49
+ if (mLocation == null) {
50
+ return null;
51
+ }
52
+
53
+ try {
54
+ return mLocation.toJSONObject().toString();
55
+ } catch (JSONException e) {
56
+ onError("Error processing params: " + e.getMessage());
57
+ }
58
+
59
+ return null;
60
+ }
61
+ }
@@ -0,0 +1,25 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ import android.os.Bundle;
4
+
5
+ import com.marianhello.bgloc.data.BackgroundLocation;
6
+
7
+ import org.json.JSONException;
8
+
9
+ public abstract class StationaryTask extends LocationTask {
10
+ public StationaryTask(BackgroundLocation location) {
11
+ super(location);
12
+ }
13
+
14
+ @Override
15
+ public String getName() {
16
+ return "stationary";
17
+ }
18
+
19
+ @Override
20
+ public Bundle getBundle() {
21
+ Bundle bundle = super.getBundle();
22
+
23
+ return bundle;
24
+ }
25
+ }
@@ -0,0 +1,8 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ import android.os.Bundle;
4
+
5
+ public abstract class Task implements JsCallback {
6
+ public abstract String getName();
7
+ public abstract Bundle getBundle();
8
+ }
@@ -0,0 +1,5 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ public interface TaskRunner {
4
+ void runTask(Task task);
5
+ }
@@ -0,0 +1,8 @@
1
+ package com.marianhello.bgloc.headless;
2
+
3
+ public class TaskRunnerFactory {
4
+
5
+ public TaskRunner getTaskRunner(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
6
+ return (TaskRunner) Class.forName(className).newInstance();
7
+ }
8
+ }
@@ -0,0 +1,171 @@
1
+ /*
2
+ According to apache license
3
+
4
+ This is fork of christocracy cordova-plugin-background-geolocation plugin
5
+ https://github.com/christocracy/cordova-plugin-background-geolocation
6
+
7
+ This is a new class
8
+ */
9
+
10
+ package com.marianhello.bgloc.provider;
11
+
12
+ import android.content.BroadcastReceiver;
13
+ import android.content.Context;
14
+ import android.content.Intent;
15
+ import android.content.IntentFilter;
16
+ import android.location.Location;
17
+ import android.media.AudioManager;
18
+ import android.provider.Settings;
19
+ import android.widget.Toast;
20
+
21
+ import com.google.android.gms.location.DetectedActivity;
22
+ import com.marianhello.bgloc.Config;
23
+ import com.marianhello.bgloc.PluginException;
24
+ import com.marianhello.bgloc.data.BackgroundActivity;
25
+ import com.marianhello.bgloc.data.BackgroundLocation;
26
+ import com.marianhello.logging.LoggerManager;
27
+ import com.marianhello.utils.ToneGenerator;
28
+ import com.marianhello.utils.ToneGenerator.Tone;
29
+
30
+ /**
31
+ * AbstractLocationProvider
32
+ */
33
+ public abstract class AbstractLocationProvider implements LocationProvider {
34
+
35
+ protected Integer PROVIDER_ID;
36
+ protected Config mConfig;
37
+ protected Context mContext;
38
+
39
+ protected ToneGenerator toneGenerator;
40
+ protected org.slf4j.Logger logger;
41
+
42
+ private ProviderDelegate mDelegate;
43
+
44
+ protected AbstractLocationProvider(Context context) {
45
+ mContext = context;
46
+ logger = LoggerManager.getLogger(getClass());
47
+ logger.info("Creating {}", getClass().getSimpleName());
48
+ }
49
+
50
+ @Override
51
+ public void onCreate() {
52
+ toneGenerator = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
53
+ }
54
+
55
+ @Override
56
+ public void onDestroy() {
57
+ toneGenerator.release();
58
+ toneGenerator = null;
59
+ }
60
+
61
+ @Override
62
+ public void onConfigure(Config config) {
63
+ mConfig = config;
64
+ }
65
+
66
+ @Override
67
+ public void onCommand(int commandId, int arg1) {
68
+ // override in child class
69
+ }
70
+
71
+ public void setDelegate(ProviderDelegate delegate) {
72
+ mDelegate = delegate;
73
+ }
74
+
75
+ /**
76
+ * Register broadcast reciever
77
+ * @param receiver
78
+ */
79
+ protected Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter) {
80
+ return mContext.registerReceiver(receiver, filter);
81
+ }
82
+
83
+ /**
84
+ * Unregister broadcast reciever
85
+ * @param receiver
86
+ */
87
+ protected void unregisterReceiver (BroadcastReceiver receiver) {
88
+ mContext.unregisterReceiver(receiver);
89
+ }
90
+
91
+ /**
92
+ * Handle location as recorder by provider
93
+ * @param location
94
+ */
95
+ protected void handleLocation (Location location) {
96
+ playDebugTone(Tone.BEEP);
97
+ if (mDelegate != null) {
98
+ BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
99
+ bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
100
+ mDelegate.onLocation(bgLocation);
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Handle stationary location with radius
106
+ *
107
+ * @param location
108
+ * @param radius radius of stationary region
109
+ */
110
+ protected void handleStationary (Location location, float radius) {
111
+ playDebugTone(Tone.LONG_BEEP);
112
+ if (mDelegate != null) {
113
+ BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
114
+ bgLocation.setRadius(radius);
115
+ bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
116
+ mDelegate.onStationary(bgLocation);
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Handle stationary location without radius
122
+ *
123
+ * @param location
124
+ */
125
+ protected void handleStationary (Location location) {
126
+ playDebugTone(Tone.LONG_BEEP);
127
+ if (mDelegate != null) {
128
+ BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
129
+ bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
130
+ mDelegate.onStationary(bgLocation);
131
+ }
132
+ }
133
+
134
+ protected void handleActivity(DetectedActivity activity) {
135
+ if (mDelegate != null) {
136
+ mDelegate.onActivity(new BackgroundActivity(PROVIDER_ID, activity));
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Handle security exception
142
+ * @param exception
143
+ */
144
+ protected void handleSecurityException (SecurityException exception) {
145
+ PluginException error = new PluginException(exception.getMessage(), PluginException.PERMISSION_DENIED_ERROR);
146
+ if (mDelegate != null) {
147
+ mDelegate.onError(error);
148
+ }
149
+ }
150
+
151
+ protected void showDebugToast (String text) {
152
+ if (mConfig.isDebugging()) {
153
+ Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
154
+ }
155
+ }
156
+
157
+ public Boolean hasMockLocationsEnabled() {
158
+ return Settings.Secure.getString(mContext.getContentResolver(), android.provider.Settings.Secure.ALLOW_MOCK_LOCATION).equals("1");
159
+ }
160
+
161
+ /**
162
+ * Plays debug sound
163
+ * @param name toneGenerator
164
+ */
165
+ protected void playDebugTone (int name) {
166
+ if (toneGenerator == null || !mConfig.isDebugging()) return;
167
+
168
+ int duration = 1000;
169
+ toneGenerator.startTone(name, duration);
170
+ }
171
+ }
@@ -0,0 +1,280 @@
1
+ package com.marianhello.bgloc.provider;
2
+
3
+ import android.app.PendingIntent;
4
+ import android.content.BroadcastReceiver;
5
+ import android.content.Context;
6
+ import android.content.Intent;
7
+ import android.content.IntentFilter;
8
+ import android.content.pm.PackageManager;
9
+ import android.location.Location;
10
+ import android.Manifest;
11
+ import android.os.Build;
12
+ import android.os.Bundle;
13
+ import android.os.PowerManager;
14
+ import androidx.core.app.ActivityCompat;
15
+ import android.util.Log;
16
+
17
+ import com.google.android.gms.common.ConnectionResult;
18
+ import com.google.android.gms.common.api.GoogleApiClient;
19
+ import com.google.android.gms.location.ActivityRecognition;
20
+ import com.google.android.gms.location.ActivityRecognitionResult;
21
+ import com.google.android.gms.location.DetectedActivity;
22
+ import com.google.android.gms.location.LocationListener;
23
+ import com.google.android.gms.location.LocationRequest;
24
+ import com.google.android.gms.location.LocationServices;
25
+ import com.marianhello.bgloc.Config;
26
+ import com.marianhello.bgloc.data.BackgroundActivity;
27
+
28
+ import java.util.ArrayList;
29
+
30
+ public class ActivityRecognitionLocationProvider extends AbstractLocationProvider implements GoogleApiClient.ConnectionCallbacks,
31
+ GoogleApiClient.OnConnectionFailedListener, LocationListener {
32
+
33
+ private static final String TAG = ActivityRecognitionLocationProvider.class.getSimpleName();
34
+ private static final String P_NAME = " com.marianhello.bgloc";
35
+ private static final String DETECTED_ACTIVITY_UPDATE = P_NAME + ".DETECTED_ACTIVITY_UPDATE";
36
+
37
+ private GoogleApiClient googleApiClient;
38
+ private PendingIntent detectedActivitiesPI;
39
+
40
+ private boolean isStarted = true;
41
+ private boolean isTracking = false;
42
+ private boolean isWatchingActivity = false;
43
+ private Location lastLocation;
44
+ private DetectedActivity lastActivity = new DetectedActivity(DetectedActivity.UNKNOWN, 100);
45
+
46
+ public ActivityRecognitionLocationProvider(Context context) {
47
+ super(context);
48
+ PROVIDER_ID = Config.ACTIVITY_PROVIDER;
49
+ }
50
+
51
+ @Override
52
+ public void onCreate() {
53
+ super.onCreate();
54
+
55
+ Intent detectedActivitiesIntent = new Intent(mContext, DetectedActivitiesReceiver.class);
56
+ detectedActivitiesIntent.setAction(DETECTED_ACTIVITY_UPDATE);
57
+
58
+ int updateCurrentFlag = android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
59
+ ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE
60
+ : PendingIntent.FLAG_UPDATE_CURRENT;
61
+ detectedActivitiesPI = PendingIntent.getBroadcast(mContext, 9002, detectedActivitiesIntent, updateCurrentFlag);
62
+ registerReceiver(detectedActivitiesReceiver, new IntentFilter(DETECTED_ACTIVITY_UPDATE));
63
+ }
64
+
65
+ @Override
66
+ public void onStart() {
67
+ logger.info("Start recording");
68
+ this.isStarted = true;
69
+ attachRecorder();
70
+ }
71
+
72
+ @Override
73
+ public void onStop() {
74
+ logger.info("Stop recording");
75
+ this.isStarted = false;
76
+ detachRecorder();
77
+ stopTracking();
78
+ }
79
+
80
+ @Override
81
+ public void onConfigure(Config config) {
82
+ super.onConfigure(config);
83
+ if (isStarted) {
84
+ onStop();
85
+ onStart();
86
+ }
87
+ }
88
+
89
+ @Override
90
+ public boolean isStarted() {
91
+ return isStarted;
92
+ }
93
+
94
+ @Override
95
+ public void onLocationChanged(Location location) {
96
+ logger.debug("Location change: {}", location.toString());
97
+
98
+ if (lastActivity.getType() == DetectedActivity.STILL) {
99
+ handleStationary(location);
100
+ stopTracking();
101
+ return;
102
+ }
103
+
104
+ showDebugToast("acy:" + location.getAccuracy() + ",v:" + location.getSpeed());
105
+
106
+ lastLocation = location;
107
+ handleLocation(location);
108
+ }
109
+
110
+ public void startTracking() {
111
+ if (isTracking) { return; }
112
+
113
+ Integer priority = translateDesiredAccuracy(mConfig.getDesiredAccuracy());
114
+ LocationRequest locationRequest = LocationRequest.create()
115
+ .setPriority(priority) // this.accuracy
116
+ .setFastestInterval(mConfig.getFastestInterval())
117
+ .setInterval(mConfig.getInterval());
118
+ // .setSmallestDisplacement(mConfig.getStationaryRadius());
119
+ try {
120
+ LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
121
+ isTracking = true;
122
+ logger.debug("Start tracking with priority={} fastestInterval={} interval={} activitiesInterval={} stopOnStillActivity={}", priority, mConfig.getFastestInterval(), mConfig.getInterval(), mConfig.getActivitiesInterval(), mConfig.getStopOnStillActivity());
123
+ } catch (SecurityException e) {
124
+ logger.error("Security exception: {}", e.getMessage());
125
+ this.handleSecurityException(e);
126
+ }
127
+ }
128
+
129
+ public void stopTracking() {
130
+ if (!isTracking) { return; }
131
+
132
+ LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
133
+ isTracking = false;
134
+ }
135
+
136
+ private void connectToPlayAPI() {
137
+ logger.debug("Connecting to Google Play Services");
138
+ googleApiClient = new GoogleApiClient.Builder(mContext)
139
+ .addApi(LocationServices.API)
140
+ .addApi(ActivityRecognition.API)
141
+ .addConnectionCallbacks(this)
142
+ //.addOnConnectionFailedListener(this)
143
+ .build();
144
+ googleApiClient.connect();
145
+ }
146
+
147
+ private void disconnectFromPlayAPI() {
148
+ if (googleApiClient != null && googleApiClient.isConnected()) {
149
+ googleApiClient.disconnect();
150
+ }
151
+ }
152
+
153
+ private boolean activityRecognitionPermitted() {
154
+ return Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_GRANTED;
155
+ }
156
+
157
+ private void attachRecorder() {
158
+ if (googleApiClient == null) {
159
+ connectToPlayAPI();
160
+ } else if (googleApiClient.isConnected()) {
161
+ if (isWatchingActivity) { return; }
162
+ startTracking();
163
+ if (mConfig.getStopOnStillActivity() && activityRecognitionPermitted()) {
164
+ ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(
165
+ googleApiClient,
166
+ mConfig.getActivitiesInterval(),
167
+ detectedActivitiesPI
168
+ );
169
+ isWatchingActivity = true;
170
+ }
171
+ } else {
172
+ googleApiClient.connect();
173
+ }
174
+ }
175
+
176
+ private void detachRecorder() {
177
+ if (isWatchingActivity) {
178
+ logger.debug("Detaching recorder");
179
+ ActivityRecognition.ActivityRecognitionApi.removeActivityUpdates(googleApiClient, detectedActivitiesPI);
180
+ isWatchingActivity = false;
181
+ }
182
+ }
183
+
184
+ @Override
185
+ public void onConnected(Bundle connectionHint) {
186
+ logger.debug("Connected to Google Play Services");
187
+ if (this.isStarted) {
188
+ attachRecorder();
189
+ }
190
+ }
191
+
192
+ @Override
193
+ public void onConnectionSuspended(int cause) {
194
+ // googleApiClient.connect();
195
+ logger.info("Connection to Google Play Services suspended");
196
+ }
197
+
198
+ @Override
199
+ public void onConnectionFailed(ConnectionResult connectionResult) {
200
+ logger.error("Connection to Google Play Services failed");
201
+ }
202
+
203
+ /**
204
+ * Translates a number representing desired accuracy of Geolocation system from set [0, 10, 100, 1000].
205
+ * 0: most aggressive, most accurate, worst battery drain
206
+ * 1000: least aggressive, least accurate, best for battery.
207
+ */
208
+ private Integer translateDesiredAccuracy(Integer accuracy) {
209
+ if (accuracy >= 10000) {
210
+ return LocationRequest.PRIORITY_NO_POWER;
211
+ }
212
+ if (accuracy >= 1000) {
213
+ return LocationRequest.PRIORITY_LOW_POWER;
214
+ }
215
+ if (accuracy >= 100) {
216
+ return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
217
+ }
218
+ if (accuracy >= 10) {
219
+ return LocationRequest.PRIORITY_HIGH_ACCURACY;
220
+ }
221
+ if (accuracy >= 0) {
222
+ return LocationRequest.PRIORITY_HIGH_ACCURACY;
223
+ }
224
+
225
+ return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
226
+ }
227
+
228
+
229
+ public static DetectedActivity getProbableActivity(ArrayList<DetectedActivity> detectedActivities) {
230
+ int highestConfidence = 0;
231
+ DetectedActivity mostLikelyActivity = new DetectedActivity(0, DetectedActivity.UNKNOWN);
232
+
233
+ for(DetectedActivity da: detectedActivities) {
234
+ if(da.getType() != DetectedActivity.TILTING || da.getType() != DetectedActivity.UNKNOWN) {
235
+ Log.w(TAG, "Received a Detected Activity that was not tilting / unknown");
236
+ if (highestConfidence < da.getConfidence()) {
237
+ highestConfidence = da.getConfidence();
238
+ mostLikelyActivity = da;
239
+ }
240
+ }
241
+ }
242
+ return mostLikelyActivity;
243
+ }
244
+
245
+ private class DetectedActivitiesReceiver extends BroadcastReceiver {
246
+ @Override
247
+ public void onReceive(Context context, Intent intent) {
248
+ ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
249
+ ArrayList<DetectedActivity> detectedActivities = (ArrayList) result.getProbableActivities();
250
+
251
+ //Find the activity with the highest percentage
252
+ lastActivity = getProbableActivity(detectedActivities);
253
+
254
+ logger.debug("Detected activity={} confidence={}", BackgroundActivity.getActivityString(lastActivity.getType()), lastActivity.getConfidence());
255
+
256
+ handleActivity(lastActivity);
257
+
258
+ if (lastActivity.getType() == DetectedActivity.STILL) {
259
+ showDebugToast("Detected STILL Activity");
260
+ // stopTracking();
261
+ // we will delay stop tracking after position is found
262
+ } else {
263
+ showDebugToast("Detected ACTIVE Activity");
264
+ startTracking();
265
+ }
266
+ //else do nothing
267
+ }
268
+ }
269
+
270
+ private BroadcastReceiver detectedActivitiesReceiver = new DetectedActivitiesReceiver();
271
+
272
+ @Override
273
+ public void onDestroy() {
274
+ logger.info("Destroying ActivityRecognitionLocationProvider");
275
+ onStop();
276
+ disconnectFromPlayAPI();
277
+ unregisterReceiver(detectedActivitiesReceiver);
278
+ super.onDestroy();
279
+ }
280
+ }