@josuelmm/cordova-background-geolocation 2.3.5

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 (239) hide show
  1. package/.npmignore +23 -0
  2. package/CHANGELOG.md +787 -0
  3. package/CONTRIBUTORS.md +15 -0
  4. package/HISTORY.md +734 -0
  5. package/LICENSE +191 -0
  6. package/README.md +125 -0
  7. package/RELEASE.MD +5 -0
  8. package/android/CDVBackgroundGeolocation/src/main/AndroidManifest.xml +23 -0
  9. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
  10. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
  11. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
  12. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
  13. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
  14. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
  15. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
  16. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
  17. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
  18. package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
  19. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +148 -0
  20. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/PluginRegistry.java +25 -0
  21. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/headless/JsEvaluatorTaskRunner.java +53 -0
  22. package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +603 -0
  23. package/android/CDVBackgroundGeolocation/src/main/res/values/strings.xml +4 -0
  24. package/android/CDVBackgroundGeolocation/src/test/java/com/marianhello/ConfigMapperTest.java +208 -0
  25. package/android/common/src/androidTest/java/com/marianhello/bgloc/BackgroundGeolocationFacadeTest.java +45 -0
  26. package/android/common/src/androidTest/java/com/marianhello/bgloc/BatchManagerTest.java +570 -0
  27. package/android/common/src/androidTest/java/com/marianhello/bgloc/ConfigTest.java +76 -0
  28. package/android/common/src/androidTest/java/com/marianhello/bgloc/ContentProviderLocationDAOTest.java +437 -0
  29. package/android/common/src/androidTest/java/com/marianhello/bgloc/DBLogReaderTest.java +95 -0
  30. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationContentProviderTest.java +159 -0
  31. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceProxyTest.java +161 -0
  32. package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceTest.java +247 -0
  33. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteConfigurationDAOTest.java +200 -0
  34. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOTest.java +457 -0
  35. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOThreadTest.java +96 -0
  36. package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteOpenHelperTest.java +225 -0
  37. package/android/common/src/androidTest/java/com/marianhello/bgloc/TestPluginDelegate.java +46 -0
  38. package/android/common/src/androidTest/java/com/marianhello/bgloc/TestResourceResolver.java +14 -0
  39. package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/MockLocationProvider.java +50 -0
  40. package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/TestLocationProviderFactory.java +17 -0
  41. package/android/common/src/androidTest/java/com/marianhello/bgloc/sqlite/SQLiteOpenHelper10.java +92 -0
  42. package/android/common/src/androidTest/java/com/marianhello/bgloc/test/LocationProviderTestCase.java +107 -0
  43. package/android/common/src/androidTest/java/com/marianhello/bgloc/test/TestConstants.java +5 -0
  44. package/android/common/src/main/AndroidManifest.xml +72 -0
  45. package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +523 -0
  46. package/android/common/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
  47. package/android/common/src/main/java/com/marianhello/bgloc/Config.java +652 -0
  48. package/android/common/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
  49. package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +224 -0
  50. package/android/common/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
  51. package/android/common/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
  52. package/android/common/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
  53. package/android/common/src/main/java/com/marianhello/bgloc/PostLocationTask.java +188 -0
  54. package/android/common/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
  55. package/android/common/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
  56. package/android/common/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
  57. package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
  58. package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
  59. package/android/common/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
  60. package/android/common/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
  61. package/android/common/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
  62. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
  63. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
  64. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
  65. package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
  66. package/android/common/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
  67. package/android/common/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
  68. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
  69. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
  70. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
  71. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
  72. package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
  73. package/android/common/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
  74. package/android/common/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
  75. package/android/common/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
  76. package/android/common/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +60 -0
  77. package/android/common/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
  78. package/android/common/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
  79. package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
  80. package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
  81. package/android/common/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
  82. package/android/common/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +282 -0
  83. package/android/common/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +610 -0
  84. package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
  85. package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
  86. package/android/common/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
  87. package/android/common/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +145 -0
  88. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
  89. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +749 -0
  90. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
  91. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
  92. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
  93. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +130 -0
  94. package/android/common/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
  95. package/android/common/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
  96. package/android/common/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
  97. package/android/common/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +278 -0
  98. package/android/common/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
  99. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +249 -0
  100. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
  101. package/android/common/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
  102. package/android/common/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
  103. package/android/common/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
  104. package/android/common/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
  105. package/android/common/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
  106. package/android/common/src/main/java/com/marianhello/utils/Convert.java +56 -0
  107. package/android/common/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
  108. package/android/common/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
  109. package/android/common/src/main/java/org/apache/commons/io/Charsets.java +153 -0
  110. package/android/common/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
  111. package/android/common/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
  112. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
  113. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
  114. package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
  115. package/android/common/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
  116. package/android/common/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  117. package/android/common/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  118. package/android/common/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  119. package/android/common/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  120. package/android/common/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  121. package/android/common/src/main/res/values/strings.xml +4 -0
  122. package/android/common/src/main/res/xml/authenticator.xml +7 -0
  123. package/android/common/src/main/res/xml/syncadapter.xml +9 -0
  124. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ArrayListLocationTemplateTest.java +82 -0
  125. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/BackgroundLocationTest.java +128 -0
  126. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ConfigTest.java +191 -0
  127. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/DBLogReaderTest.java +37 -0
  128. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HashMapLocationTemplateTest.java +216 -0
  129. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HttpPostServiceTest.java +223 -0
  130. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/LocationTemplateFactoryTest.java +50 -0
  131. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/PostLocationTaskTest.java +180 -0
  132. package/android/common/src/test/java/com/marianhello/backgroundgeolocation/TestHelper.java +16 -0
  133. package/android/dependencies.gradle +13 -0
  134. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.h +41 -0
  135. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +526 -0
  136. package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
  137. package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
  138. package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
  139. package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
  140. package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
  141. package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
  142. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
  143. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
  144. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
  145. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
  146. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
  147. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
  148. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
  149. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
  150. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
  151. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
  152. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
  153. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
  154. package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
  155. package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
  156. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
  157. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +202 -0
  158. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +60 -0
  159. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +638 -0
  160. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
  161. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +185 -0
  162. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
  163. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
  164. package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
  165. package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
  166. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
  167. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
  168. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
  169. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +514 -0
  170. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
  171. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
  172. package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
  173. package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
  174. package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
  175. package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
  176. package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
  177. package/ios/common/BackgroundGeolocation/MAURLocationManager.m +287 -0
  178. package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
  179. package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
  180. package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
  181. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +40 -0
  182. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +250 -0
  183. package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
  184. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
  185. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
  186. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
  187. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
  188. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
  189. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
  190. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
  191. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
  192. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
  193. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
  194. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
  195. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
  196. package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
  197. package/ios/common/BackgroundGeolocation/Reachability.m +475 -0
  198. package/ios/common/BackgroundGeolocation/SOMotionDetector/CHANGELOG.md +2 -0
  199. package/ios/common/BackgroundGeolocation/SOMotionDetector/LICENSE +21 -0
  200. package/ios/common/BackgroundGeolocation/SOMotionDetector/README.md +135 -0
  201. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
  202. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
  203. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
  204. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
  205. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
  206. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
  207. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
  208. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -0
  209. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/README.md +170 -0
  210. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
  211. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
  212. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
  213. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
  214. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
  215. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
  216. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
  217. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
  218. package/ios/common/BackgroundGeolocation.xcodeproj/project.pbxproj +760 -0
  219. package/ios/common/BackgroundGeolocationTests/Info.plist +24 -0
  220. package/ios/common/BackgroundGeolocationTests/MAURBackgroundLocationTest.m +185 -0
  221. package/ios/common/BackgroundGeolocationTests/MAURConfigTest.m +161 -0
  222. package/ios/common/BackgroundGeolocationTests/MAURGeolocationOpenHelperTest.m +102 -0
  223. package/ios/common/BackgroundGeolocationTests/MAURLocationTest.m +216 -0
  224. package/ios/common/BackgroundGeolocationTests/MAURLocationUploaderTest.m +55 -0
  225. package/ios/common/BackgroundGeolocationTests/MAURLogReaderTest.m +43 -0
  226. package/ios/common/BackgroundGeolocationTests/MAURSQLiteConfigurationDAOTest.m +102 -0
  227. package/ios/common/BackgroundGeolocationTests/MAURSQLiteHelperTest.m +41 -0
  228. package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOTests.m +240 -0
  229. package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOThreadTest.m +84 -0
  230. package/ios/common/BackgroundGeolocationTests/MAURSQLiteOpenHelperTest.m +144 -0
  231. package/ios/common/CONTRIBUTORS.md +10 -0
  232. package/ios/common/LICENSE +191 -0
  233. package/ios/common/README.md +7 -0
  234. package/ios/common/scripts/xcode-refactor.js +184 -0
  235. package/package.json +44 -0
  236. package/plugin.xml +355 -0
  237. package/www/BackgroundGeolocation.d.ts +910 -0
  238. package/www/BackgroundGeolocation.js +247 -0
  239. package/www/radio.js +177 -0
@@ -0,0 +1,570 @@
1
+ package com.marianhello.bgloc;
2
+
3
+ import android.content.Context;
4
+ import android.database.sqlite.SQLiteDatabase;
5
+ import androidx.test.platform.app.InstrumentationRegistry;
6
+ import androidx.test.ext.junit.runners.AndroidJUnit4;
7
+ import androidx.test.filters.SmallTest;
8
+ import android.util.JsonReader;
9
+ import android.util.JsonToken;
10
+
11
+ import com.marianhello.bgloc.data.ArrayListLocationTemplate;
12
+ import com.marianhello.bgloc.data.BackgroundLocation;
13
+ import com.marianhello.bgloc.data.HashMapLocationTemplate;
14
+ import com.marianhello.bgloc.data.LocationTemplate;
15
+ import com.marianhello.bgloc.data.LocationTemplateFactory;
16
+ import com.marianhello.bgloc.data.sqlite.SQLiteLocationDAO;
17
+ import com.marianhello.bgloc.data.sqlite.SQLiteOpenHelper;
18
+ import com.marianhello.bgloc.sync.BatchManager;
19
+
20
+ import junit.framework.Assert;
21
+
22
+ import org.json.JSONArray;
23
+ import org.json.JSONException;
24
+ import org.json.JSONObject;
25
+ import org.junit.Before;
26
+ import org.junit.Test;
27
+ import org.junit.runner.RunWith;
28
+
29
+ import java.io.BufferedReader;
30
+ import java.io.File;
31
+ import java.io.FileReader;
32
+ import java.io.IOException;
33
+ import java.util.ArrayList;
34
+ import java.util.HashMap;
35
+ import java.util.List;
36
+
37
+ import static com.marianhello.bgloc.data.sqlite.SQLiteLocationContract.LocationEntry.SQL_DROP_LOCATION_TABLE;
38
+
39
+ /**
40
+ * Created by finch on 22/07/16.
41
+ */
42
+ @RunWith(AndroidJUnit4.class)
43
+ @SmallTest
44
+ public class BatchManagerTest {
45
+ Context mContext;
46
+ SQLiteOpenHelper mDbHelper;
47
+
48
+ public void prepareDatabase() {
49
+ SQLiteDatabase db = mDbHelper.getWritableDatabase();
50
+ mDbHelper.execAndLogSql(db, SQL_DROP_LOCATION_TABLE);
51
+ mDbHelper.onCreate(db);
52
+ }
53
+
54
+ @Before
55
+ public void setUp() {
56
+ mContext = InstrumentationRegistry.getTargetContext();
57
+ mDbHelper = SQLiteOpenHelper.getHelper(mContext);
58
+ prepareDatabase();
59
+ }
60
+
61
+ private List<BackgroundLocation> readLocationsArray(JsonReader reader) throws IOException {
62
+ List<BackgroundLocation> locations = new ArrayList<BackgroundLocation>();
63
+ reader.beginArray();
64
+ while (reader.hasNext()) {
65
+ BackgroundLocation l = new BackgroundLocation();
66
+ reader.beginObject();
67
+ while (reader.hasNext()) {
68
+ String name = reader.nextName();
69
+ if (name.equals("id")) {
70
+ l.setLocationId(reader.nextLong());
71
+ } else if (name.equals("time")) {
72
+ l.setTime(reader.nextLong());
73
+ } else if (name.equals("latitude")) {
74
+ l.setLatitude(reader.nextDouble());
75
+ } else if (name.equals("longitude")) {
76
+ l.setLongitude(reader.nextDouble());
77
+ } else if (name.equals("accuracy")) {
78
+ l.setAccuracy((float)reader.nextDouble());
79
+ } else if (name.equals("speed")) {
80
+ l.setSpeed((float)reader.nextDouble());
81
+ } else if (name.equals("bearing")) {
82
+ l.setBearing((float)reader.nextDouble());
83
+ } else if (name.equals("altitude")) {
84
+ l.setAltitude(reader.nextDouble());
85
+ } else if (name.equals("radius")) {
86
+ JsonToken token = reader.peek();
87
+ if (token != JsonToken.NULL) {
88
+ l.setRadius((float)reader.nextDouble());
89
+ } else {
90
+ reader.skipValue();
91
+ }
92
+ } else if (name.equals("provider")) {
93
+ l.setProvider(reader.nextString());
94
+ } else if (name.equals("locationProvider")) {
95
+ l.setLocationProvider(reader.nextInt());
96
+ } else {
97
+ reader.skipValue();
98
+ }
99
+ }
100
+ reader.endObject();
101
+ locations.add(l);
102
+ }
103
+ reader.endArray();
104
+ return locations;
105
+ }
106
+
107
+ @Test
108
+ public void testCreateBatch() {
109
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
110
+
111
+ int i = 1;
112
+ for (int j = i; j < 100; j++) {
113
+ BackgroundLocation location = new BackgroundLocation();
114
+ location.setTime(1000 + i);
115
+ location.setLatitude(40.21 + i);
116
+ location.setLongitude(23.45 + i);
117
+ location.setAccuracy(200 +i);
118
+ location.setAltitude(900 +i);
119
+ location.setSpeed(20 + i);
120
+ location.setBearing(2 + i);
121
+ location.setProvider("test");
122
+ location.setLocationProvider(1);
123
+ if ((j % 3) == 0) {
124
+ // exactly 33 locations (out of 99) should be eligible for sync for given batch id 1000
125
+ location.setBatchStartMillis(1000L);
126
+ } else if ((j % 2) == 0) {
127
+ // exactly 33 locations as deleted
128
+ location.setStatus(BackgroundLocation.DELETED);
129
+ } else {
130
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
131
+ i++;
132
+ }
133
+ dao.persistLocation(location);
134
+ }
135
+
136
+ List<BackgroundLocation> locations = null;
137
+ BatchManager batchManager = new BatchManager(mContext);
138
+ try {
139
+ File batchFile = batchManager.createBatch(1000L, 0);
140
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
141
+ locations = readLocationsArray(reader);
142
+ } catch (Exception e) {
143
+ Assert.fail(e.getMessage());
144
+ }
145
+
146
+ Assert.assertEquals(33, locations.size());
147
+ i = 1;
148
+ for (BackgroundLocation l : locations) {
149
+ Assert.assertEquals(200 + i, l.getAccuracy(), 0);
150
+ Assert.assertEquals(900 + i, l.getAltitude(), 0);
151
+ Assert.assertEquals(2 + i, l.getBearing(), 0);
152
+ Assert.assertEquals(40.21 + i, l.getLatitude(), 0);
153
+ Assert.assertEquals(23.45 + i,l.getLongitude(), 0);
154
+ Assert.assertEquals(20 + i, l.getSpeed(), 0);
155
+ Assert.assertEquals("test", l.getProvider());
156
+ Assert.assertEquals(1000 + i, l.getTime(), 0);
157
+ i++;
158
+ }
159
+ }
160
+
161
+ @Test
162
+ public void testCreateBatchWithArrayListTemplate() {
163
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
164
+
165
+ for (int i = 1; i < 3; i++) {
166
+ BackgroundLocation location = new BackgroundLocation();
167
+ location.setTime(1000 * i);
168
+ location.setLatitude(30.21 + i);
169
+ location.setLongitude(13.45 + i);
170
+ location.setBatchStartMillis(1000L);
171
+ location.setIsFromMockProvider(false);
172
+ location.setMockLocationsEnabled(true);
173
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
174
+ dao.persistLocation(location);
175
+ }
176
+
177
+
178
+ ArrayList list = new ArrayList();
179
+ list.add("@latitude");
180
+ list.add("@longitude");
181
+ list.add("foo");
182
+ list.add("bar");
183
+ list.add("@isFromMockProvider");
184
+ list.add("@mockLocationsEnabled");
185
+
186
+ LocationTemplate template = new ArrayListLocationTemplate(list);
187
+
188
+ ArrayList<HashMap> locations = new ArrayList();
189
+ BatchManager batchManager = new BatchManager(mContext);
190
+
191
+ try {
192
+ File batchFile = batchManager.createBatch(3000L, 0, template);
193
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
194
+
195
+ reader.beginArray();
196
+ while (reader.hasNext()) {
197
+ HashMap hashLocation = new HashMap<String, Object>();
198
+ reader.beginArray();
199
+ hashLocation.put("latitude", reader.nextDouble());
200
+ hashLocation.put("longitude", reader.nextDouble());
201
+ hashLocation.put("foo", reader.nextString());
202
+ hashLocation.put("bar", reader.nextString());
203
+ hashLocation.put("isFromMockProvider", reader.nextBoolean());
204
+ hashLocation.put("mockLocationsEnabled", reader.nextBoolean());
205
+ reader.endArray();
206
+ locations.add(hashLocation);
207
+ }
208
+ reader.endArray();
209
+ } catch (Exception e) {
210
+ Assert.fail(e.getMessage());
211
+ }
212
+
213
+ Assert.assertEquals(2, locations.size());
214
+ int i = 1;
215
+ for (HashMap l : locations) {
216
+ Assert.assertEquals(30.21 + i, (Double) l.get("latitude"), 0);
217
+ Assert.assertEquals(13.45 + i, (Double) l.get("longitude"), 0);
218
+ Assert.assertEquals("foo", (String) l.get("foo"));
219
+ Assert.assertEquals("bar", (String) l.get("bar"));
220
+ Assert.assertEquals(false, l.get("isFromMockProvider"));
221
+ Assert.assertEquals(true, l.get("mockLocationsEnabled"));
222
+ i++;
223
+ }
224
+ }
225
+
226
+ @Test
227
+ public void testCreateBatchWithMapHashTemplate() {
228
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
229
+
230
+ for (int i = 1; i < 3; i++) {
231
+ BackgroundLocation location = new BackgroundLocation();
232
+ location.setTime(1000 * i);
233
+ location.setLatitude(30.21 + i);
234
+ location.setLongitude(13.45 + i);
235
+ location.setBatchStartMillis(1000L);
236
+ location.setIsFromMockProvider(true);
237
+ location.setMockLocationsEnabled(false);
238
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
239
+ dao.persistLocation(location);
240
+ }
241
+
242
+ HashMap map = new HashMap<String, String>();
243
+ map.put("lat", "@latitude");
244
+ map.put("lon", "@longitude");
245
+ map.put("foo", "bar");
246
+ map.put("pretzels", 123);
247
+ map.put("isFromMockProvider", "@isFromMockProvider");
248
+ map.put("mockLocationsEnabled", "@mockLocationsEnabled");
249
+ LocationTemplate template = new HashMapLocationTemplate(map);
250
+
251
+ ArrayList<HashMap> locations = new ArrayList();
252
+ BatchManager batchManager = new BatchManager(mContext);
253
+
254
+ try {
255
+ File batchFile = batchManager.createBatch(3000L, 0, template);
256
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
257
+
258
+ reader.beginArray();
259
+ while (reader.hasNext()) {
260
+ HashMap hashLocation = new HashMap<String, Object>();
261
+ reader.beginObject();
262
+ while (reader.hasNext()) {
263
+ String name = reader.nextName();
264
+ if ("lat".equals(name)) {
265
+ hashLocation.put(name, reader.nextDouble());
266
+ } else if ("lon".equals(name)) {
267
+ hashLocation.put(name, reader.nextDouble());
268
+ } else if ("foo".equals(name)) {
269
+ hashLocation.put(name, reader.nextString());
270
+ } else if ("isFromMockProvider".equals(name)) {
271
+ hashLocation.put(name, reader.nextBoolean());
272
+ } else if ("mockLocationsEnabled".equals(name)) {
273
+ hashLocation.put(name, reader.nextBoolean());
274
+ } else {
275
+ reader.skipValue();
276
+ }
277
+ }
278
+ reader.endObject();
279
+ locations.add(hashLocation);
280
+ }
281
+ reader.endArray();
282
+ } catch (Exception e) {
283
+ Assert.fail(e.getMessage());
284
+ }
285
+
286
+ Assert.assertEquals(2, locations.size());
287
+ int i = 1;
288
+ for (HashMap l : locations) {
289
+ Assert.assertEquals(30.21 + i, (Double) l.get("lat"), 0);
290
+ Assert.assertEquals(13.45 + i, (Double) l.get("lon"), 0);
291
+ Assert.assertEquals("bar", (String) l.get("foo"));
292
+ Assert.assertEquals(true, l.get("isFromMockProvider"));
293
+ Assert.assertEquals(false, l.get("mockLocationsEnabled"));
294
+ i++;
295
+ }
296
+ }
297
+
298
+ @Test
299
+ public void testSetBatchCompleted() {
300
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
301
+
302
+ int i = 1;
303
+ BackgroundLocation location;
304
+ for (int j = i; j < 100; j++) {
305
+ location = new BackgroundLocation();
306
+ location.setProvider("test");
307
+ location.setTime(1000 + i);
308
+ location.setLatitude(40.21 + i);
309
+ location.setLongitude(23.45 + i);
310
+ location.setAccuracy(200 +i);
311
+ location.setAltitude(900 +i);
312
+ location.setSpeed(20 + i);
313
+ location.setBearing(2 + i);
314
+ location.setProvider("test");
315
+ location.setLocationProvider(1);
316
+ if ((j % 99) == 0) {
317
+ location.setBatchStartMillis(1000L);
318
+ } else if ((j % 2) == 0) {
319
+ location.setStatus(BackgroundLocation.DELETED);
320
+ } else {
321
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
322
+ i++;
323
+ }
324
+ dao.persistLocation(location);
325
+ }
326
+
327
+ // distribution of location: 49 of invalid, (49 + 1 in sync) of valid, 1 in sync
328
+
329
+ Assert.assertEquals(99, dao.getAllLocations().size());
330
+ Assert.assertEquals(50, dao.getValidLocations().size());
331
+ Assert.assertEquals(49, dao.getLocationsForSyncCount(1000L));
332
+ BatchManager batchManager = new BatchManager(mContext);
333
+ try {
334
+ batchManager.createBatch(1000L, 0);
335
+ batchManager.setBatchCompleted(1000L);
336
+ Assert.assertEquals(0, dao.getValidLocations().size());
337
+ Assert.assertEquals(0, dao.getLocationsForSyncCount(2000L));
338
+ } catch (Exception e) {
339
+ Assert.fail(e.getMessage());
340
+ }
341
+ }
342
+
343
+ @Test
344
+ public void testCreateBatchWithNestedTemplate() throws JSONException, IOException {
345
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
346
+ ArrayList<BackgroundLocation> testLocations = new ArrayList<BackgroundLocation>();
347
+
348
+ for (int i = 0; i < 3; i++) {
349
+ BackgroundLocation location = new BackgroundLocation();
350
+ location.setProvider("test");
351
+ location.setTime(1000 * i);
352
+ location.setAltitude(999 + i);
353
+ location.setLatitude(30.21 + i);
354
+ location.setLongitude(13.45 + i);
355
+ location.setAccuracy(9);
356
+ location.setSpeed(66);
357
+ location.setBearing(99);
358
+ location.setBatchStartMillis(1000L);
359
+ location.setIsFromMockProvider(true);
360
+ location.setMockLocationsEnabled(false);
361
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
362
+ dao.persistLocation(location);
363
+ testLocations.add(location);
364
+ }
365
+
366
+ JSONObject templateJSON = new JSONObject(
367
+ "{\"data\":{\"Id-Number\":\"@id\"," +
368
+ "\"Provider-String\":\"@provider\"," +
369
+ "\"Time-Number\":\"@time\"," +
370
+ "\"Altitude-Number\":\"@altitude\"," +
371
+ "\"Latitude-Number\":\"@latitude\"," +
372
+ "\"Longitude-Number\":\"@longitude\"," +
373
+ "\"Foo-String\":\"bar\"," +
374
+ "\"LocationProvider-Number\":\"@locationProvider\"," +
375
+ "\"Accuracy-Number\":\"@accuracy\"," +
376
+ "\"Speed-Number\":\"@speed\"," +
377
+ "\"Bearing-Number\":\"@bearing\"," +
378
+ "\"FooNumber-Number\":111}" +
379
+ "}"
380
+ );
381
+ LocationTemplate template = LocationTemplateFactory.fromJSON(templateJSON);
382
+
383
+ BatchManager batchManager = new BatchManager(mContext);
384
+ File batchFile = batchManager.createBatch(3000L, 0, template);
385
+
386
+ ArrayList<HashMap<String, Object>> hashLocations = new ArrayList();
387
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
388
+ reader.beginArray();
389
+ while (reader.hasNext()) {
390
+ reader.beginObject();
391
+ if (reader.hasNext() && "data".equals(reader.nextName())) {
392
+ HashMap hashLocation = new HashMap<String, Object>();
393
+ reader.beginObject();
394
+ while (reader.hasNext()) {
395
+ String name = reader.nextName();
396
+ if (name.endsWith("-String")) {
397
+ hashLocation.put(name, reader.nextString());
398
+ } else if (name.endsWith("-Number")) {
399
+ hashLocation.put(name, reader.nextDouble());
400
+ } else if (name.endsWith("-Boolean")) {
401
+ hashLocation.put(name, reader.nextBoolean());
402
+ } else {
403
+ reader.skipValue();
404
+ }
405
+ }
406
+ reader.endObject();
407
+ hashLocations.add(hashLocation);
408
+ }
409
+ reader.endObject();
410
+ }
411
+ reader.endArray();
412
+
413
+ Assert.assertEquals(3, hashLocations.size());
414
+ int i = 0;
415
+ for (HashMap l : hashLocations) {
416
+ Assert.assertEquals("test", l.get("Provider-String"));
417
+ Assert.assertEquals(0, (Double) l.get("LocationProvider-Number"), 0);
418
+ Assert.assertEquals(9, (Double) l.get("Accuracy-Number"), 0);
419
+ Assert.assertEquals(99, (Double) l.get("Bearing-Number"), 0);
420
+ Assert.assertEquals(66, (Double) l.get("Speed-Number"), 0);
421
+ Assert.assertEquals(testLocations.get(i).getAltitude(), (Double) l.get("Altitude-Number"), 0);
422
+ Assert.assertEquals(testLocations.get(i).getLatitude(), (Double) l.get("Latitude-Number"), 0);
423
+ Assert.assertEquals(testLocations.get(i).getLongitude(), (Double) l.get("Longitude-Number"), 0);
424
+ Assert.assertEquals(testLocations.get(i).getTime(), (Double) l.get("Time-Number"), 0);
425
+ Assert.assertEquals("bar", l.get("Foo-String"));
426
+ Assert.assertEquals(111, (Double) l.get("FooNumber-Number"), 0);
427
+ i++;
428
+ }
429
+ }
430
+
431
+ @Test
432
+ public void testCreateBatchWithNestedListTemplate() throws JSONException, IOException {
433
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
434
+ ArrayList<BackgroundLocation> testLocations = new ArrayList<BackgroundLocation>();
435
+
436
+ for (int i = 0; i < 3; i++) {
437
+ BackgroundLocation location = new BackgroundLocation();
438
+ location.setProvider("test");
439
+ location.setTime(1000 * i);
440
+ location.setAltitude(999 + i);
441
+ location.setLatitude(30.21 + i);
442
+ location.setLongitude(13.45 + i);
443
+ location.setAccuracy(9);
444
+ location.setSpeed(66);
445
+ location.setBearing(99);
446
+ location.setBatchStartMillis(1000L);
447
+ location.setIsFromMockProvider(true);
448
+ location.setMockLocationsEnabled(false);
449
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
450
+ dao.persistLocation(location);
451
+ testLocations.add(location);
452
+ }
453
+
454
+ JSONArray templateJSON = new JSONArray(
455
+ "[\"@id\"," +
456
+ "{" +
457
+ "\"Provider-String\":\"@provider\"," +
458
+ "\"Time-Number\":\"@time\"," +
459
+ "\"Altitude-Number\":\"@altitude\"," +
460
+ "\"Latitude-Number\":\"@latitude\"," +
461
+ "\"Longitude-Number\":\"@longitude\"," +
462
+ "\"Foo-String\":\"bar\"," +
463
+ "\"LocationProvider-Number\":\"@locationProvider\"," +
464
+ "\"Accuracy-Number\":\"@accuracy\"," +
465
+ "\"Speed-Number\":\"@speed\"," +
466
+ "\"Bearing-Number\":\"@bearing\"," +
467
+ "\"FooNumber-Number\":111" +
468
+ "}]"
469
+ );
470
+ LocationTemplate template = LocationTemplateFactory.fromJSON(templateJSON);
471
+ BatchManager batchManager = new BatchManager(mContext);
472
+ File batchFile = batchManager.createBatch(3000L, 0, template);
473
+
474
+ ArrayList<HashMap<String, Object>> hashLocations = new ArrayList();
475
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
476
+ reader.beginArray();
477
+ while (reader.hasNext()) {
478
+ reader.beginArray();
479
+ while(reader.hasNext()) {
480
+ HashMap hashLocation = new HashMap<String, Object>();
481
+ hashLocation.put("id", reader.nextInt());
482
+ reader.beginObject();
483
+ while(reader.hasNext()) {
484
+ String name = reader.nextName();
485
+ if (name.endsWith("-String")) {
486
+ hashLocation.put(name, reader.nextString());
487
+ } else if (name.endsWith("-Number")) {
488
+ hashLocation.put(name, reader.nextDouble());
489
+ } else if (name.endsWith("-Boolean")) {
490
+ hashLocation.put(name, reader.nextBoolean());
491
+ } else {
492
+ reader.skipValue();
493
+ }
494
+ }
495
+ reader.endObject();
496
+ hashLocations.add(hashLocation);
497
+ }
498
+ reader.endArray();
499
+ }
500
+
501
+ Assert.assertEquals(3, hashLocations.size());
502
+ int i = 0;
503
+ for (HashMap l : hashLocations) {
504
+ Assert.assertEquals(i+1, l.get("id"));
505
+ Assert.assertEquals("test", l.get("Provider-String"));
506
+ Assert.assertEquals(0, (Double) l.get("LocationProvider-Number"), 0);
507
+ Assert.assertEquals(9, (Double) l.get("Accuracy-Number"), 0);
508
+ Assert.assertEquals(99, (Double) l.get("Bearing-Number"), 0);
509
+ Assert.assertEquals(66, (Double) l.get("Speed-Number"), 0);
510
+ Assert.assertEquals(testLocations.get(i).getAltitude(), (Double) l.get("Altitude-Number"), 0);
511
+ Assert.assertEquals(testLocations.get(i).getLatitude(), (Double) l.get("Latitude-Number"), 0);
512
+ Assert.assertEquals(testLocations.get(i).getLongitude(), (Double) l.get("Longitude-Number"), 0);
513
+ Assert.assertEquals(testLocations.get(i).getTime(), (Double) l.get("Time-Number"), 0);
514
+ Assert.assertEquals("bar", l.get("Foo-String"));
515
+ Assert.assertEquals(111, (Double) l.get("FooNumber-Number"), 0);
516
+ i++;
517
+ }
518
+
519
+ }
520
+
521
+ @Test
522
+ public void testBatchWithNulls() throws JSONException, IOException {
523
+
524
+ BackgroundLocation location = new BackgroundLocation();
525
+ location.setBatchStartMillis(1000L);
526
+ location.setStatus(BackgroundLocation.SYNC_PENDING);
527
+ SQLiteLocationDAO dao = new SQLiteLocationDAO(mDbHelper.getWritableDatabase());
528
+ dao.persistLocation(location);
529
+
530
+ JSONObject templateJSON = new JSONObject("{\"Nullable\":null, \"NullRadius\": \"@radius\"}");
531
+ LocationTemplate template = LocationTemplateFactory.fromJSON(templateJSON);
532
+
533
+ BatchManager batchManager = new BatchManager(mContext);
534
+ File batchFile = batchManager.createBatch(3000L, 0, template);
535
+
536
+ HashMap hashLocation = new HashMap<String, Object>();
537
+ JsonReader reader = new JsonReader(new FileReader(batchFile));
538
+ reader.beginArray();
539
+ while (reader.hasNext()) {
540
+ reader.beginObject();
541
+ while(reader.hasNext()) { ;
542
+ hashLocation.put(reader.nextName(), null);
543
+ reader.nextNull();
544
+ }
545
+ reader.endObject();
546
+ }
547
+ reader.endArray();
548
+
549
+ Assert.assertTrue(hashLocation.containsKey("Nullable"));
550
+ Assert.assertTrue(hashLocation.containsKey("NullRadius"));
551
+ }
552
+
553
+ public static String slurp (final File file) throws IOException {
554
+ StringBuilder result = new StringBuilder();
555
+ BufferedReader reader = null;
556
+ try {
557
+ reader = new BufferedReader(new FileReader(file));
558
+ char[] buf = new char[1024];
559
+ int r = 0;
560
+ while ((r = reader.read(buf)) != -1) {
561
+ result.append(buf, 0, r);
562
+ }
563
+ }
564
+ finally {
565
+ reader.close();
566
+ }
567
+
568
+ return result.toString();
569
+ }
570
+ }
@@ -0,0 +1,76 @@
1
+ package com.marianhello.bgloc;
2
+
3
+ import android.os.Parcel;
4
+
5
+ import com.marianhello.bgloc.Config;
6
+ import com.marianhello.bgloc.data.LocationTemplateFactory;
7
+
8
+ import junit.framework.Assert;
9
+
10
+ import org.junit.Test;
11
+
12
+ import java.util.HashMap;
13
+ import java.util.LinkedHashSet;
14
+
15
+ /**
16
+ * Created by finch on 9.12.2017.
17
+ */
18
+
19
+ public class ConfigTest {
20
+ @Test
21
+ public void testParcelable() {
22
+ Config config = Config.getDefault();
23
+
24
+ Parcel configParcel = config.toParcel();
25
+ Config configFromParcel = Config.fromByteArray(configParcel.marshall());
26
+
27
+ Assert.assertEquals(config.getStationaryRadius(), configFromParcel.getStationaryRadius());
28
+ Assert.assertEquals(config.getDistanceFilter(), configFromParcel.getDistanceFilter());
29
+ Assert.assertEquals(config.getDesiredAccuracy(), configFromParcel.getDesiredAccuracy());
30
+ Assert.assertFalse(config.isDebugging());
31
+ Assert.assertEquals(config.getNotificationTitle(), configFromParcel.getNotificationTitle());
32
+ Assert.assertEquals(config.getNotificationText(), configFromParcel.getNotificationText());
33
+ Assert.assertTrue(config.getStopOnTerminate());
34
+ Assert.assertFalse(config.getStartOnBoot());
35
+ Assert.assertEquals(config.getLocationProvider(), configFromParcel.getLocationProvider());
36
+ Assert.assertEquals(config.getInterval(), configFromParcel.getInterval());
37
+ Assert.assertEquals(config.getFastestInterval(), configFromParcel.getFastestInterval());
38
+ Assert.assertEquals(config.getActivitiesInterval(), configFromParcel.getActivitiesInterval());
39
+ Assert.assertEquals(config.getNotificationIconColor(), configFromParcel.getNotificationIconColor());
40
+ Assert.assertEquals(config.getLargeNotificationIcon(), configFromParcel.getLargeNotificationIcon());
41
+ Assert.assertEquals(config.getSmallNotificationIcon(), configFromParcel.getSmallNotificationIcon());
42
+ Assert.assertTrue(config.getStartForeground());
43
+ Assert.assertTrue(config.getStopOnStillActivity());
44
+ Assert.assertEquals(config.getUrl(), configFromParcel.getUrl());
45
+ Assert.assertEquals(config.getSyncUrl(), configFromParcel.getSyncUrl());
46
+ Assert.assertEquals(config.getSyncThreshold(), configFromParcel.getSyncThreshold());
47
+ Assert.assertTrue(config.getHttpHeaders().isEmpty());
48
+ Assert.assertEquals(config.getMaxLocations(), configFromParcel.getMaxLocations());
49
+ }
50
+
51
+ @Test
52
+ public void testTemplateParcelableFromHashMap() {
53
+ Config config = Config.getDefault();
54
+
55
+ HashMap map = new HashMap<String, String>();
56
+ map.put("@id", "id");
57
+ map.put("@provider", "provider");
58
+ map.put("@time", "time");
59
+ map.put("@altitude", "altitude");
60
+ map.put("@latitude", "latitude");
61
+ map.put("@longitude", "longitude");
62
+ map.put("@foo", "foo");
63
+ map.put("@locationProvider", "locationProvider");
64
+ map.put("@accuracy", "accuracy");
65
+ map.put("@speed", "speed");
66
+ map.put("@bearing", "bearing");
67
+
68
+ config.setTemplate(LocationTemplateFactory.fromHashMap(map));
69
+
70
+ Parcel configParcel = config.toParcel();
71
+ Config configFromParcel = Config.fromByteArray(configParcel.marshall());
72
+
73
+ Assert.assertEquals(config.getTemplate(), configFromParcel.getTemplate());
74
+ }
75
+
76
+ }