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,13 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import java.util.Date;
4
+ import java.util.Collection;
5
+
6
+ import org.json.JSONException;
7
+
8
+ import com.marianhello.bgloc.Config;
9
+
10
+ public interface ConfigurationDAO {
11
+ boolean persistConfiguration(Config config) throws NullPointerException;
12
+ Config retrieveConfiguration() throws JSONException;
13
+ }
@@ -0,0 +1,17 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import android.content.Context;
4
+
5
+ import com.marianhello.bgloc.data.provider.ContentProviderLocationDAO;
6
+ import com.marianhello.bgloc.data.sqlite.SQLiteLocationDAO;
7
+ import com.marianhello.bgloc.data.sqlite.SQLiteConfigurationDAO;
8
+
9
+ public abstract class DAOFactory {
10
+ public static LocationDAO createLocationDAO(Context context) {
11
+ return new ContentProviderLocationDAO(context);
12
+ }
13
+
14
+ public static ConfigurationDAO createConfigurationDAO(Context context) {
15
+ return new SQLiteConfigurationDAO(context);
16
+ }
17
+ }
@@ -0,0 +1,82 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import com.marianhello.utils.CloneHelper;
4
+
5
+ import org.json.JSONException;
6
+ import org.json.JSONObject;
7
+
8
+ import java.io.Serializable;
9
+ import java.util.HashMap;
10
+ import java.util.Iterator;
11
+ import java.util.Map;
12
+
13
+ /**
14
+ * Created by finch on 9.12.2017.
15
+ */
16
+
17
+ public class HashMapLocationTemplate extends AbstractLocationTemplate implements Serializable {
18
+ private HashMap<?, String> mMap;
19
+ private static final long serialVersionUID = 1234L;
20
+
21
+ // copy constructor
22
+ public HashMapLocationTemplate(HashMapLocationTemplate tpl) {
23
+ if (tpl == null || tpl.mMap == null) {
24
+ return;
25
+ }
26
+
27
+ mMap = CloneHelper.deepCopy(tpl.mMap);
28
+ }
29
+
30
+ public HashMapLocationTemplate(HashMap map) {
31
+ this.mMap = map;
32
+ }
33
+
34
+ @Override
35
+ public Object locationToJson(BackgroundLocation location) throws JSONException {
36
+ return LocationMapper.map(location).withMap(mMap);
37
+ }
38
+
39
+ public Iterator iterator() {
40
+ return mMap.entrySet().iterator();
41
+ }
42
+
43
+ public boolean containsKey(String propName) {
44
+ return mMap.containsKey(propName);
45
+ }
46
+
47
+ public String get(String key) {
48
+ return mMap.get(key);
49
+ }
50
+
51
+ @Override
52
+ public boolean isEmpty() {
53
+ return mMap == null || mMap.isEmpty();
54
+ }
55
+
56
+ @Override
57
+ public boolean equals(Object other) {
58
+ if (other == null) return false;
59
+ if (other == this) return true;
60
+ if (!(other instanceof HashMapLocationTemplate)) return false;
61
+ return ((HashMapLocationTemplate) other).mMap.equals(this.mMap);
62
+ }
63
+
64
+ @Override
65
+ public String toString() {
66
+ if (mMap == null) {
67
+ return "null";
68
+ }
69
+
70
+ JSONObject jObject = new JSONObject(mMap);
71
+ return jObject.toString();
72
+ }
73
+
74
+ public Map toMap() {
75
+ return mMap;
76
+ }
77
+
78
+ @Override
79
+ public LocationTemplate clone() {
80
+ return new HashMapLocationTemplate(this);
81
+ }
82
+ }
@@ -0,0 +1,22 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import java.util.Collection;
4
+
5
+ public interface LocationDAO {
6
+ Collection<BackgroundLocation> getAllLocations();
7
+ Collection<BackgroundLocation> getValidLocations();
8
+ Collection<BackgroundLocation> getValidLocationsAndDelete();
9
+ BackgroundLocation getLocationById(long id);
10
+ BackgroundLocation getFirstUnpostedLocation();
11
+ BackgroundLocation getNextUnpostedLocation(long fromId);
12
+ long getUnpostedLocationsCount();
13
+ long getLocationsForSyncCount(long millisSinceLastBatch);
14
+ long persistLocation(BackgroundLocation location);
15
+ long persistLocation(BackgroundLocation location, int maxRows);
16
+ long persistLocationForSync(BackgroundLocation location, int maxRows);
17
+ void updateLocationForSync(long locationId);
18
+ void deleteLocationById(long locationId);
19
+ BackgroundLocation deleteFirstUnpostedLocation();
20
+ int deleteAllLocations();
21
+ int deleteUnpostedLocations();
22
+ }
@@ -0,0 +1,12 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import org.json.JSONException;
4
+
5
+ /**
6
+ * Created by finch on 9.12.2017.
7
+ */
8
+
9
+ public interface LocationTemplate {
10
+ Object locationToJson(BackgroundLocation location) throws JSONException;
11
+ boolean isEmpty();
12
+ }
@@ -0,0 +1,65 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import com.marianhello.utils.Convert;
4
+
5
+ import org.json.JSONArray;
6
+ import org.json.JSONException;
7
+ import org.json.JSONObject;
8
+ import org.json.JSONTokener;
9
+
10
+ import java.util.ArrayList;
11
+ import java.util.HashMap;
12
+ import java.util.Iterator;
13
+
14
+ /**
15
+ * Created by finch on 9.12.2017.
16
+ */
17
+
18
+ public class LocationTemplateFactory {
19
+
20
+ public static LocationTemplate fromJSON(Object json) throws JSONException {
21
+ if (json instanceof JSONObject) {
22
+ JSONObject jsonObject = (JSONObject) json;
23
+
24
+ return new HashMapLocationTemplate((HashMap) Convert.toMap(jsonObject));
25
+ } else if (json instanceof JSONArray) {
26
+ JSONArray jsonArray = (JSONArray) json;
27
+
28
+ return new ArrayListLocationTemplate((ArrayList) Convert.toList(jsonArray));
29
+ }
30
+
31
+ return null;
32
+ }
33
+
34
+ public static LocationTemplate fromJSONString(String jsonString) throws JSONException {
35
+ if (jsonString == null) {
36
+ return null;
37
+ }
38
+ Object json = new JSONTokener(jsonString).nextValue();
39
+ return fromJSON(json);
40
+ }
41
+
42
+ public static LocationTemplate fromHashMap(HashMap template) {
43
+ return new HashMapLocationTemplate(template);
44
+ }
45
+
46
+ public static LocationTemplate fromArrayList(ArrayList template) {
47
+ return new ArrayListLocationTemplate(template);
48
+ }
49
+
50
+ public static LocationTemplate getDefault() {
51
+ HashMap attrs = new HashMap<String, String>();
52
+ attrs.put("provider", "@provider");
53
+ attrs.put("locationProvider", "@locationProvider");
54
+ attrs.put("time", "@time");
55
+ attrs.put("latitude", "@latitude");
56
+ attrs.put("longitude", "@longitude");
57
+ attrs.put("accuracy", "@accuracy");
58
+ attrs.put("altitudeAccuracy", "@altitudeAccuracy");
59
+ attrs.put("speed", "@speed");
60
+ attrs.put("altitude", "@altitude");
61
+ attrs.put("bearing", "@bearing");
62
+ attrs.put("radius", "@radius");
63
+ return new HashMapLocationTemplate(attrs);
64
+ }
65
+ }
@@ -0,0 +1,19 @@
1
+ package com.marianhello.bgloc.data;
2
+
3
+ import android.content.Context;
4
+ import androidx.annotation.NonNull;
5
+ import androidx.annotation.Nullable;
6
+
7
+ public interface LocationTransform
8
+ {
9
+ /**
10
+ * Return a <code>BackgroundLocation</code>, either a new one or the same one after modification.
11
+ * Return <code>null</code> to prevent this location from being committed.
12
+ * @param context
13
+ * @param location - the input location
14
+ * @return the location that you want to actually commit
15
+ */
16
+
17
+ @Nullable
18
+ BackgroundLocation transformLocationBeforeCommit(@NonNull Context context, @NonNull BackgroundLocation location);
19
+ }
@@ -0,0 +1,395 @@
1
+ package com.marianhello.bgloc.data.provider;
2
+
3
+ import android.content.ContentProviderOperation;
4
+ import android.content.ContentResolver;
5
+ import android.content.ContentValues;
6
+ import android.content.Context;
7
+ import android.database.Cursor;
8
+ import android.net.Uri;
9
+ import android.text.TextUtils;
10
+
11
+ import com.marianhello.bgloc.ResourceResolver;
12
+ import com.marianhello.bgloc.data.BackgroundLocation;
13
+ import com.marianhello.bgloc.data.LocationDAO;
14
+ import com.marianhello.bgloc.data.sqlite.SQLiteLocationContract;
15
+ import com.marianhello.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry;
16
+ import com.marianhello.logging.LoggerManager;
17
+
18
+ import java.util.ArrayList;
19
+ import java.util.Collection;
20
+
21
+ import ru.andremoniy.sqlbuilder.SqlExpression;
22
+ import ru.andremoniy.sqlbuilder.SqlSelectStatement;
23
+
24
+ public class ContentProviderLocationDAO implements LocationDAO {
25
+ private org.slf4j.Logger logger;
26
+ private ContentResolver mResolver;
27
+ private Uri mContentUri;
28
+ private String mAuthority;
29
+
30
+ public ContentProviderLocationDAO(Context context) {
31
+ logger = LoggerManager.getLogger(ContentProviderLocationDAO.class);
32
+ ResourceResolver resourceResolver = ResourceResolver.newInstance(context);
33
+ mAuthority = resourceResolver.getAuthority();
34
+ mContentUri = LocationContentProvider.getContentUri(mAuthority);
35
+ mResolver = context.getApplicationContext().getContentResolver();
36
+ }
37
+
38
+ /**
39
+ * Get locations that match whereClause
40
+ *
41
+ * @param whereClause
42
+ * @param whereArgs
43
+ * @return collection of locations
44
+ */
45
+ private Collection<BackgroundLocation> getLocations(String whereClause, String[] whereArgs) {
46
+ Collection<BackgroundLocation> locations = new ArrayList<BackgroundLocation>();
47
+ Cursor cursor = null;
48
+
49
+ try {
50
+ cursor = mResolver.query(
51
+ mContentUri,
52
+ null,
53
+ whereClause,
54
+ whereArgs,
55
+ LocationEntry.COLUMN_NAME_TIME + " ASC"
56
+ );
57
+ while (cursor.moveToNext()) {
58
+ locations.add(BackgroundLocation.fromCursor(cursor));
59
+ }
60
+ } finally {
61
+ if (cursor != null) {
62
+ cursor.close();
63
+ }
64
+ }
65
+
66
+ return locations;
67
+ }
68
+
69
+ @Override
70
+ public Collection<BackgroundLocation> getAllLocations() {
71
+ return getLocations(null, null);
72
+ }
73
+
74
+ @Override
75
+ public Collection<BackgroundLocation> getValidLocations() {
76
+ String whereClause = LocationEntry.COLUMN_NAME_STATUS + " <> ?";
77
+ String[] whereArgs = { String.valueOf(BackgroundLocation.DELETED) };
78
+
79
+ return getLocations(whereClause, whereArgs);
80
+ }
81
+
82
+ @Override
83
+ public Collection<BackgroundLocation> getValidLocationsAndDelete() {
84
+ // HM TODO: should be in a transaction but I'm not sure how to implement this...
85
+ Collection<BackgroundLocation> locations = getValidLocations();
86
+ deleteAllLocations();
87
+ return locations;
88
+ }
89
+
90
+ @Override
91
+ public BackgroundLocation getLocationById(long id) {
92
+ BackgroundLocation location = null;
93
+
94
+ Cursor cursor = null;
95
+ try {
96
+ cursor = mResolver.query(
97
+ LocationContentProvider.buildUriWithId(mAuthority, id),
98
+ null,
99
+ null,
100
+ null,
101
+ null
102
+ );
103
+ while (cursor.moveToNext()) {
104
+ location = BackgroundLocation.fromCursor(cursor);
105
+ if (!cursor.isLast()) {
106
+ throw new RuntimeException("Location " + id + " is not unique");
107
+ }
108
+ }
109
+ } finally {
110
+ if (cursor != null) {
111
+ cursor.close();
112
+ }
113
+ }
114
+
115
+ return location;
116
+
117
+ }
118
+
119
+ public int getLocationsCount() {
120
+ Cursor cursor = mResolver.query(
121
+ mContentUri,
122
+ null,
123
+ null,
124
+ null,
125
+ ""
126
+ );
127
+
128
+ int count = cursor.getCount();
129
+ cursor.close();
130
+ return count;
131
+ }
132
+
133
+ @Override
134
+ public BackgroundLocation getFirstUnpostedLocation() {
135
+ SqlSelectStatement subsql = new SqlSelectStatement();
136
+ subsql.column(new SqlExpression(String.format("MIN(%s)", LocationEntry._ID)), LocationEntry._ID);
137
+ subsql.from(LocationEntry.TABLE_NAME);
138
+ subsql.where(LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING);
139
+ subsql.orderBy(LocationEntry.COLUMN_NAME_TIME);
140
+
141
+ String substmt = subsql.statement();
142
+ substmt = com.marianhello.utils.TextUtils.removeLastChar(substmt, ";");
143
+
144
+ BackgroundLocation location = null;
145
+ Cursor cursor = null;
146
+ try {
147
+ cursor = mResolver.query(
148
+ mContentUri,
149
+ null,
150
+ LocationEntry._ID + " = (" + substmt + ")",
151
+ null,
152
+ null
153
+ );
154
+
155
+ while (cursor.moveToNext()) {
156
+ location = BackgroundLocation.fromCursor(cursor);
157
+ if (!cursor.isLast()) {
158
+ throw new RuntimeException("Expected single location");
159
+ }
160
+ }
161
+ } finally {
162
+ if (cursor != null) {
163
+ cursor.close();
164
+ }
165
+ }
166
+
167
+ return location;
168
+ }
169
+
170
+ @Override
171
+ public BackgroundLocation getNextUnpostedLocation(long fromId) {
172
+ SqlSelectStatement subsql = new SqlSelectStatement();
173
+ subsql.column(new SqlExpression(String.format("MIN(%s)", LocationEntry._ID)), LocationEntry._ID);
174
+ subsql.from(LocationEntry.TABLE_NAME);
175
+ subsql.where(LocationEntry.COLUMN_NAME_STATUS, SqlExpression.SqlOperatorEqualTo, BackgroundLocation.POST_PENDING);
176
+ subsql.where(LocationEntry._ID, SqlExpression.SqlOperatorNotEqualTo, fromId);
177
+ subsql.orderBy(LocationEntry.COLUMN_NAME_TIME);
178
+
179
+ String substmt = subsql.statement();
180
+ substmt = com.marianhello.utils.TextUtils.removeLastChar(substmt, ";");
181
+
182
+ BackgroundLocation location = null;
183
+ Cursor cursor = null;
184
+ try {
185
+ cursor = mResolver.query(
186
+ mContentUri,
187
+ null,
188
+ LocationEntry._ID + " = (" + substmt + ")",
189
+ null,
190
+ null
191
+ );
192
+
193
+ while (cursor.moveToNext()) {
194
+ location = BackgroundLocation.fromCursor(cursor);
195
+ if (!cursor.isLast()) {
196
+ throw new RuntimeException("Expected single location");
197
+ }
198
+ }
199
+ } finally {
200
+ if (cursor != null) {
201
+ cursor.close();
202
+ }
203
+ }
204
+
205
+ return location;
206
+ }
207
+
208
+ @Override
209
+ public long getUnpostedLocationsCount() {
210
+ String whereClause = SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ?";
211
+ String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) };
212
+
213
+ Cursor cursor = mResolver.query(
214
+ mContentUri,
215
+ null,
216
+ whereClause,
217
+ whereArgs,
218
+ null);
219
+
220
+ int count = cursor.getCount();
221
+ cursor.close();
222
+ return count;
223
+ }
224
+
225
+ @Override
226
+ public long getLocationsForSyncCount(long millisSinceLastBatch) {
227
+ String whereClause = TextUtils.join("", new String[]{
228
+ SQLiteLocationContract.LocationEntry.COLUMN_NAME_STATUS + " = ? AND ( ",
229
+ SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " IS NULL OR ",
230
+ SQLiteLocationContract.LocationEntry.COLUMN_NAME_BATCH_START_MILLIS + " < ? )",
231
+ });
232
+ String[] whereArgs = {
233
+ String.valueOf(BackgroundLocation.SYNC_PENDING),
234
+ String.valueOf(millisSinceLastBatch)
235
+ };
236
+
237
+ Cursor cursor = mResolver.query(
238
+ mContentUri,
239
+ null,
240
+ whereClause,
241
+ whereArgs,
242
+ null);
243
+
244
+ int count = cursor.getCount();
245
+ cursor.close();
246
+ return count;
247
+ }
248
+
249
+ public Uri getOldestLocationUri() {
250
+ Cursor cursor = null;
251
+ try {
252
+ cursor = mResolver.query(
253
+ mContentUri,
254
+ new String[]{"min(" + LocationEntry._ID + ")"},
255
+ TextUtils.join("", new String[]{
256
+ LocationEntry.COLUMN_NAME_TIME,
257
+ "= (SELECT min(",
258
+ LocationEntry.COLUMN_NAME_TIME,
259
+ ") FROM ",
260
+ LocationEntry.TABLE_NAME,
261
+ ")"
262
+ }),
263
+ null,
264
+ null
265
+ );
266
+
267
+ cursor.moveToFirst();
268
+ return LocationContentProvider.buildUriWithId(mAuthority, cursor.getLong(0));
269
+ } finally {
270
+ if (cursor != null) {
271
+ cursor.close();
272
+ }
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Persist location into database
278
+ *
279
+ * @param location
280
+ * @return rowId or -1 when error occured
281
+ */
282
+ @Override
283
+ public long persistLocation(BackgroundLocation location) {
284
+ Uri locationUri = mResolver.insert(mContentUri, location.toContentValues());
285
+ return Integer.valueOf(locationUri.getLastPathSegment());
286
+ }
287
+
288
+ @Override
289
+ public long persistLocation(BackgroundLocation location, int maxRows) {
290
+ if (maxRows == 0) {
291
+ return -1;
292
+ }
293
+
294
+ long rowCount = getLocationsCount();
295
+
296
+ if (rowCount < maxRows) {
297
+ return persistLocation(location);
298
+ }
299
+
300
+ ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
301
+
302
+ // TODO: move this logic as separate action somewhere else
303
+ // TODO: add db vaccum
304
+ if (rowCount > maxRows) {
305
+ // delete some locations to reduce their count to maxRows
306
+ String selection = new StringBuilder()
307
+ .append(LocationEntry._ID)
308
+ .append(" IN (SELECT ").append(LocationEntry._ID)
309
+ .append(" FROM ").append(LocationEntry.TABLE_NAME)
310
+ .append(" ORDER BY ").append(LocationEntry.COLUMN_NAME_TIME)
311
+ .append(" LIMIT ?)")
312
+ .toString();
313
+
314
+ operations.add(
315
+ ContentProviderOperation.newDelete(mContentUri)
316
+ .withSelection(selection, new String[] {(String.valueOf(rowCount - maxRows))})
317
+ .build()
318
+ );
319
+ }
320
+
321
+ operations.add(
322
+ ContentProviderOperation.newUpdate(getOldestLocationUri())
323
+ .withValues(location.toContentValues())
324
+ .build()
325
+ );
326
+
327
+ try {
328
+ mResolver.applyBatch(mAuthority, operations);
329
+ } catch (Exception e) {
330
+ logger.error("Error persisting location (maxRows: {}): {}", maxRows, e.getMessage());
331
+ return -1;
332
+ }
333
+
334
+ return 0;
335
+ }
336
+
337
+ @Override
338
+ public long persistLocationForSync(BackgroundLocation location, int maxRows) {
339
+ Long locationId = location.getLocationId();
340
+
341
+ if (locationId == null) {
342
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
343
+ return persistLocation(location, maxRows);
344
+ } else {
345
+ ContentValues values = new ContentValues();
346
+ values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING);
347
+
348
+ String whereClause = LocationEntry._ID + " = ?";
349
+ String[] whereArgs = { String.valueOf(locationId) };
350
+
351
+ mResolver.update(mContentUri, values, whereClause, whereArgs);
352
+ return locationId;
353
+ }
354
+ }
355
+
356
+ @Override
357
+ public void updateLocationForSync(long locationId) {
358
+ ContentValues values = new ContentValues();
359
+ values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING);
360
+
361
+ String whereClause = LocationEntry._ID + " = ?";
362
+ String[] whereArgs = { String.valueOf(locationId) };
363
+
364
+ mResolver.update(mContentUri, values, whereClause, whereArgs);
365
+ }
366
+
367
+ @Override
368
+ public void deleteLocationById(long locationId) {
369
+ mResolver.delete(LocationContentProvider.buildUriWithId(mAuthority, locationId), null, null);
370
+ }
371
+
372
+ @Override
373
+ public BackgroundLocation deleteFirstUnpostedLocation() {
374
+ BackgroundLocation location = getFirstUnpostedLocation();
375
+ deleteLocationById(location.getLocationId());
376
+
377
+ return location;
378
+ }
379
+
380
+ @Override
381
+ public int deleteAllLocations() {
382
+ return mResolver.delete(mContentUri, null, null);
383
+ }
384
+
385
+ @Override
386
+ public int deleteUnpostedLocations() {
387
+ ContentValues values = new ContentValues();
388
+ values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.SYNC_PENDING);
389
+
390
+ String whereClause = LocationEntry.COLUMN_NAME_STATUS + " = ?";
391
+ String[] whereArgs = { String.valueOf(BackgroundLocation.POST_PENDING) };
392
+
393
+ return mResolver.update(mContentUri, values, whereClause, whereArgs);
394
+ }
395
+ }