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.
- package/NitroBackgroundGeolocation.podspec +29 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +133 -0
- package/android/src/main/AndroidManifest.xml +65 -0
- package/android/src/main/cpp/cpp-adapter.cpp +11 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ConfigMapper.kt +332 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskRegistry.kt +23 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskService.kt +66 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocation.kt +538 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocationPackage.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ReactNativeHeadlessTaskRunner.kt +62 -0
- package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +542 -0
- package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
- package/android/src/main/java/com/marianhello/bgloc/Config.java +652 -0
- package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +168 -0
- package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
- package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +186 -0
- package/android/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
- package/android/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
- package/android/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
- package/android/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
- package/android/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
- package/android/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +61 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +280 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +586 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +142 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +17 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +760 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +140 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +246 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +233 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
- package/android/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
- package/android/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
- package/android/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
- package/android/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
- package/android/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
- package/android/src/main/java/com/marianhello/utils/Convert.java +56 -0
- package/android/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
- package/android/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
- package/android/src/main/java/org/apache/commons/io/Charsets.java +153 -0
- package/android/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
- package/android/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
- package/android/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
- package/android/src/main/res/values/strings.xml +6 -0
- package/android/src/main/res/xml/authenticator.xml +7 -0
- package/android/src/main/res/xml/syncadapter.xml +9 -0
- package/app.plugin.js +64 -0
- package/ios/NitroBackgroundGeolocation.swift +719 -0
- package/ios/NitroBackgroundGeolocationBootstrap.m +98 -0
- package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
- package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
- package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
- package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
- package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
- package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
- package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
- package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
- package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
- package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
- package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +202 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +62 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +650 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +184 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +523 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.m +308 -0
- package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
- package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +40 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +218 -0
- package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
- package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
- package/ios/common/BackgroundGeolocation/Reachability.m +474 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
- package/lib/module/NitroBackgroundGeolocation.nitro.js +172 -0
- package/lib/module/NitroBackgroundGeolocation.nitro.js.map +1 -0
- package/lib/module/headless.js +72 -0
- package/lib/module/headless.js.map +1 -0
- package/lib/module/index.js +60 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts +616 -0
- package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts.map +1 -0
- package/lib/typescript/src/headless.d.ts +40 -0
- package/lib/typescript/src/headless.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +8 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/android/c++/JActivity.hpp +61 -0
- package/nitrogen/generated/android/c++/JAuthorizationStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JBackgroundGeolocationError.hpp +61 -0
- package/nitrogen/generated/android/c++/JConfigureOptions.hpp +179 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_Activity.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_AuthorizationStatus.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundGeolocationError.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_Location.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_StationaryLocation.hpp +78 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.cpp +530 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.hpp +90 -0
- package/nitrogen/generated/android/c++/JLocation.hpp +105 -0
- package/nitrogen/generated/android/c++/JLocationAccuracy.hpp +64 -0
- package/nitrogen/generated/android/c++/JLocationOptions.hpp +65 -0
- package/nitrogen/generated/android/c++/JLocationProvider.hpp +61 -0
- package/nitrogen/generated/android/c++/JLogEntry.hpp +73 -0
- package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +67 -0
- package/nitrogen/generated/android/c++/JServiceStatus.hpp +66 -0
- package/nitrogen/generated/android/c++/JStationaryLocation.hpp +109 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.cpp +33 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +77 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Activity.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/AuthorizationStatus.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/BackgroundGeolocationError.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ConfigureOptions.kt +182 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Activity.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_AuthorizationStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_BackgroundGeolocationError.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Location.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_StationaryLocation.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/HybridNitroBackgroundGeolocationSpec.kt +218 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Location.kt +111 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationAccuracy.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationOptions.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationProvider.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LogEntry.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/NativeLogLevel.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ServiceStatus.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/StationaryLocation.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_AnyMap.kt +63 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Boolean.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Double.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationAccuracy.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationProvider.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Map_String__String_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_String.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/nitrobackgroundgeolocationOnLoad.kt +35 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.cmake +88 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.gradle +27 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.cpp +66 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.cpp +129 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.hpp +911 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Umbrella.hpp +88 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.mm +33 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.hpp +335 -0
- package/nitrogen/generated/ios/swift/Activity.swift +34 -0
- package/nitrogen/generated/ios/swift/AuthorizationStatus.swift +44 -0
- package/nitrogen/generated/ios/swift/BackgroundGeolocationError.swift +34 -0
- package/nitrogen/generated/ios/swift/ConfigureOptions.swift +1037 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_Activity.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_AuthorizationStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundGeolocationError.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ConfigureOptions.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_Location.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ServiceStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_StationaryLocation.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_StationaryLocation_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_Location_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_LogEntry_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec.swift +82 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec_cxx.swift +675 -0
- package/nitrogen/generated/ios/swift/Location.swift +89 -0
- package/nitrogen/generated/ios/swift/LocationAccuracy.swift +48 -0
- package/nitrogen/generated/ios/swift/LocationOptions.swift +78 -0
- package/nitrogen/generated/ios/swift/LocationProvider.swift +44 -0
- package/nitrogen/generated/ios/swift/LogEntry.swift +49 -0
- package/nitrogen/generated/ios/swift/NativeLogLevel.swift +52 -0
- package/nitrogen/generated/ios/swift/ServiceStatus.swift +39 -0
- package/nitrogen/generated/ios/swift/StationaryLocation.swift +94 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AnyMap.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_LocationAccuracy.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_LocationProvider.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +30 -0
- package/nitrogen/generated/shared/c++/Activity.hpp +87 -0
- package/nitrogen/generated/shared/c++/AuthorizationStatus.hpp +63 -0
- package/nitrogen/generated/shared/c++/BackgroundGeolocationError.hpp +87 -0
- package/nitrogen/generated/shared/c++/ConfigureOptions.hpp +197 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.cpp +48 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.hpp +121 -0
- package/nitrogen/generated/shared/c++/Location.hpp +131 -0
- package/nitrogen/generated/shared/c++/LocationAccuracy.hpp +69 -0
- package/nitrogen/generated/shared/c++/LocationOptions.hpp +91 -0
- package/nitrogen/generated/shared/c++/LocationProvider.hpp +63 -0
- package/nitrogen/generated/shared/c++/LogEntry.hpp +99 -0
- package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +65 -0
- package/nitrogen/generated/shared/c++/ServiceStatus.hpp +92 -0
- package/nitrogen/generated/shared/c++/StationaryLocation.hpp +135 -0
- package/package.json +112 -0
- package/react-native.config.js +10 -0
- package/src/NitroBackgroundGeolocation.nitro.ts +656 -0
- package/src/headless.ts +91 -0
- package/src/index.tsx +100 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import android.os.Build;
|
|
4
|
+
|
|
5
|
+
import org.json.JSONArray;
|
|
6
|
+
import org.json.JSONObject;
|
|
7
|
+
|
|
8
|
+
import java.io.BufferedInputStream;
|
|
9
|
+
import java.io.BufferedOutputStream;
|
|
10
|
+
import java.io.File;
|
|
11
|
+
import java.io.FileInputStream;
|
|
12
|
+
import java.io.IOException;
|
|
13
|
+
import java.io.InputStream;
|
|
14
|
+
import java.util.HashMap;
|
|
15
|
+
import java.util.Map;
|
|
16
|
+
import java.util.Iterator;
|
|
17
|
+
|
|
18
|
+
import java.net.URL;
|
|
19
|
+
import java.net.HttpURLConnection;
|
|
20
|
+
import java.io.OutputStreamWriter;
|
|
21
|
+
|
|
22
|
+
public class HttpPostService {
|
|
23
|
+
public static final int BUFFER_SIZE = 1024;
|
|
24
|
+
|
|
25
|
+
private String mUrl;
|
|
26
|
+
private HttpURLConnection mHttpURLConnection;
|
|
27
|
+
|
|
28
|
+
public interface UploadingProgressListener {
|
|
29
|
+
void onProgress(int progress);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public HttpPostService(String url) {
|
|
33
|
+
mUrl = url;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public HttpPostService(final HttpURLConnection httpURLConnection) {
|
|
37
|
+
mHttpURLConnection = httpURLConnection;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private HttpURLConnection openConnection() throws IOException {
|
|
41
|
+
if (mHttpURLConnection == null) {
|
|
42
|
+
mHttpURLConnection = (HttpURLConnection) new URL(mUrl).openConnection();
|
|
43
|
+
}
|
|
44
|
+
return mHttpURLConnection;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public int postJSON(JSONObject json, Map headers) throws IOException {
|
|
48
|
+
String jsonString = "null";
|
|
49
|
+
if (json != null) {
|
|
50
|
+
jsonString = json.toString();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return postJSONString(jsonString, headers);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public int postJSON(JSONArray json, Map headers) throws IOException {
|
|
57
|
+
String jsonString = "null";
|
|
58
|
+
if (json != null) {
|
|
59
|
+
jsonString = json.toString();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return postJSONString(jsonString, headers);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public int postJSONString(String body, Map headers) throws IOException {
|
|
66
|
+
if (headers == null) {
|
|
67
|
+
headers = new HashMap();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
HttpURLConnection conn = this.openConnection();
|
|
71
|
+
conn.setDoOutput(true);
|
|
72
|
+
conn.setFixedLengthStreamingMode(body.length());
|
|
73
|
+
conn.setRequestMethod("POST");
|
|
74
|
+
conn.setRequestProperty("Content-Type", "application/json");
|
|
75
|
+
Iterator<Map.Entry<String, String>> it = headers.entrySet().iterator();
|
|
76
|
+
while (it.hasNext()) {
|
|
77
|
+
Map.Entry<String, String> pair = it.next();
|
|
78
|
+
conn.setRequestProperty(pair.getKey(), pair.getValue());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
OutputStreamWriter os = null;
|
|
82
|
+
try {
|
|
83
|
+
os = new OutputStreamWriter(conn.getOutputStream());
|
|
84
|
+
os.write(body);
|
|
85
|
+
|
|
86
|
+
} finally {
|
|
87
|
+
if (os != null) {
|
|
88
|
+
os.flush();
|
|
89
|
+
os.close();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return conn.getResponseCode();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public int postJSONFile(File file, Map headers, UploadingProgressListener listener) throws IOException {
|
|
97
|
+
return postJSONFile(new FileInputStream(file), headers, listener);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public int postJSONFile(InputStream stream, Map headers, UploadingProgressListener listener) throws IOException {
|
|
101
|
+
if (headers == null) {
|
|
102
|
+
headers = new HashMap();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
final long streamSize = stream.available();
|
|
106
|
+
HttpURLConnection conn = this.openConnection();
|
|
107
|
+
|
|
108
|
+
conn.setDoInput(false);
|
|
109
|
+
conn.setDoOutput(true);
|
|
110
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
|
111
|
+
conn.setFixedLengthStreamingMode(streamSize);
|
|
112
|
+
} else {
|
|
113
|
+
conn.setChunkedStreamingMode(0);
|
|
114
|
+
}
|
|
115
|
+
conn.setRequestMethod("POST");
|
|
116
|
+
conn.setRequestProperty("Content-Type", "application/json");
|
|
117
|
+
Iterator<Map.Entry<String, String>> it = headers.entrySet().iterator();
|
|
118
|
+
while (it.hasNext()) {
|
|
119
|
+
Map.Entry<String, String> pair = it.next();
|
|
120
|
+
conn.setRequestProperty(pair.getKey(), pair.getValue());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
long progress = 0;
|
|
124
|
+
int bytesRead = -1;
|
|
125
|
+
byte[] buffer = new byte[BUFFER_SIZE];
|
|
126
|
+
|
|
127
|
+
BufferedInputStream is = null;
|
|
128
|
+
BufferedOutputStream os = null;
|
|
129
|
+
try {
|
|
130
|
+
is = new BufferedInputStream(stream);
|
|
131
|
+
os = new BufferedOutputStream(conn.getOutputStream());
|
|
132
|
+
while ((bytesRead = is.read(buffer)) != -1) {
|
|
133
|
+
os.write(buffer, 0, bytesRead);
|
|
134
|
+
os.flush();
|
|
135
|
+
progress += bytesRead;
|
|
136
|
+
int percentage = (int) ((progress * 100L) / streamSize);
|
|
137
|
+
if (listener != null) {
|
|
138
|
+
listener.onProgress(percentage);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} finally {
|
|
142
|
+
if (os != null) {
|
|
143
|
+
os.flush();
|
|
144
|
+
os.close();
|
|
145
|
+
}
|
|
146
|
+
if (is != null) {
|
|
147
|
+
is.close();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return conn.getResponseCode();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
public static int postJSON(String url, JSONObject json, Map headers) throws IOException {
|
|
155
|
+
HttpPostService service = new HttpPostService(url);
|
|
156
|
+
return service.postJSON(json, headers);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public static int postJSON(String url, JSONArray json, Map headers) throws IOException {
|
|
160
|
+
HttpPostService service = new HttpPostService(url);
|
|
161
|
+
return service.postJSON(json, headers);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public static int postJSONFile(String url, File file, Map headers, UploadingProgressListener listener) throws IOException {
|
|
165
|
+
HttpPostService service = new HttpPostService(url);
|
|
166
|
+
return service.postJSONFile(file, headers, listener);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import android.Manifest;
|
|
4
|
+
import android.annotation.SuppressLint;
|
|
5
|
+
import android.content.Context;
|
|
6
|
+
import android.location.Criteria;
|
|
7
|
+
import android.location.Location;
|
|
8
|
+
import android.location.LocationListener;
|
|
9
|
+
import android.os.Bundle;
|
|
10
|
+
import android.os.Looper;
|
|
11
|
+
|
|
12
|
+
import com.github.jparkie.promise.Promise;
|
|
13
|
+
import com.github.jparkie.promise.Promises;
|
|
14
|
+
import com.intentfilter.androidpermissions.PermissionManager;
|
|
15
|
+
import com.intentfilter.androidpermissions.models.DeniedPermissions;
|
|
16
|
+
|
|
17
|
+
import java.util.Arrays;
|
|
18
|
+
import java.util.concurrent.CountDownLatch;
|
|
19
|
+
import java.util.concurrent.TimeUnit;
|
|
20
|
+
import java.util.concurrent.TimeoutException;
|
|
21
|
+
|
|
22
|
+
public class LocationManager {
|
|
23
|
+
private Context mContext;
|
|
24
|
+
private static LocationManager mLocationManager;
|
|
25
|
+
|
|
26
|
+
public static final String[] PERMISSIONS = {
|
|
27
|
+
Manifest.permission.ACCESS_COARSE_LOCATION,
|
|
28
|
+
Manifest.permission.ACCESS_FINE_LOCATION
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
private LocationManager(Context context) {
|
|
32
|
+
mContext = context;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public class PermissionDeniedException extends Exception {}
|
|
36
|
+
|
|
37
|
+
public static LocationManager getInstance(Context context) {
|
|
38
|
+
if (mLocationManager == null) {
|
|
39
|
+
mLocationManager = new LocationManager(context.getApplicationContext());
|
|
40
|
+
}
|
|
41
|
+
return mLocationManager;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public Promise<Location> getCurrentLocation(final int timeout, final long maximumAge, final boolean enableHighAccuracy) {
|
|
45
|
+
final Promise<Location> promise = Promises.promise();
|
|
46
|
+
|
|
47
|
+
PermissionManager permissionManager = PermissionManager.getInstance(mContext);
|
|
48
|
+
permissionManager.checkPermissions(Arrays.asList(PERMISSIONS), new PermissionManager.PermissionRequestListener() {
|
|
49
|
+
@Override
|
|
50
|
+
public void onPermissionGranted() {
|
|
51
|
+
try {
|
|
52
|
+
Location currentLocation = getCurrentLocationNoCheck(timeout, maximumAge, enableHighAccuracy);
|
|
53
|
+
promise.set(currentLocation);
|
|
54
|
+
} catch (TimeoutException e) {
|
|
55
|
+
promise.setError(e);
|
|
56
|
+
} catch (InterruptedException e) {
|
|
57
|
+
Thread.currentThread().interrupt();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@Override
|
|
62
|
+
public void onPermissionDenied(DeniedPermissions deniedPermissions) {
|
|
63
|
+
promise.setError(new PermissionDeniedException());
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return promise;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Get current location without permission checking
|
|
72
|
+
*
|
|
73
|
+
* @param timeout
|
|
74
|
+
* @param maximumAge
|
|
75
|
+
* @param enableHighAccuracy
|
|
76
|
+
* @return
|
|
77
|
+
* @throws InterruptedException
|
|
78
|
+
* @throws TimeoutException
|
|
79
|
+
*/
|
|
80
|
+
@SuppressLint("MissingPermission")
|
|
81
|
+
public Location getCurrentLocationNoCheck(int timeout, long maximumAge, boolean enableHighAccuracy) throws InterruptedException, TimeoutException {
|
|
82
|
+
final long minLocationTime = System.currentTimeMillis() - maximumAge;
|
|
83
|
+
final android.location.LocationManager locationManager = (android.location.LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
|
|
84
|
+
|
|
85
|
+
Location lastKnownGPSLocation = locationManager.getLastKnownLocation(android.location.LocationManager.GPS_PROVIDER);
|
|
86
|
+
if (lastKnownGPSLocation != null && lastKnownGPSLocation.getTime() >= minLocationTime) {
|
|
87
|
+
return lastKnownGPSLocation;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
Location lastKnownNetworkLocation = locationManager.getLastKnownLocation(android.location.LocationManager.NETWORK_PROVIDER);
|
|
91
|
+
if (lastKnownNetworkLocation != null && lastKnownNetworkLocation.getTime() >= minLocationTime) {
|
|
92
|
+
return lastKnownNetworkLocation;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Criteria criteria = new Criteria();
|
|
96
|
+
criteria.setAccuracy(enableHighAccuracy ? Criteria.ACCURACY_FINE : Criteria.ACCURACY_COARSE);
|
|
97
|
+
|
|
98
|
+
CurrentLocationListener locationListener = new CurrentLocationListener();
|
|
99
|
+
locationManager.requestSingleUpdate(criteria, locationListener, Looper.getMainLooper());
|
|
100
|
+
|
|
101
|
+
if (!locationListener.mCountDownLatch.await(timeout, TimeUnit.MILLISECONDS)) {
|
|
102
|
+
locationManager.removeUpdates(locationListener);
|
|
103
|
+
throw new TimeoutException();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (locationListener.mLocation != null) {
|
|
107
|
+
return locationListener.mLocation;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static class CurrentLocationListener implements LocationListener {
|
|
114
|
+
Location mLocation = null;
|
|
115
|
+
final CountDownLatch mCountDownLatch = new CountDownLatch(1);
|
|
116
|
+
|
|
117
|
+
@Override
|
|
118
|
+
public void onLocationChanged(Location location) {
|
|
119
|
+
mLocation = location;
|
|
120
|
+
mCountDownLatch.countDown();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@Override
|
|
124
|
+
public void onStatusChanged(String s, int i, Bundle bundle) {
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@Override
|
|
129
|
+
public void onProviderEnabled(String s) {
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@Override
|
|
134
|
+
public void onProviderDisabled(String s) {
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import com.marianhello.bgloc.data.BackgroundActivity;
|
|
4
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Created by finch on 27.11.2017.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
public interface PluginDelegate {
|
|
11
|
+
void onAuthorizationChanged(int authStatus);
|
|
12
|
+
void onLocationChanged(BackgroundLocation location);
|
|
13
|
+
void onStationaryChanged(BackgroundLocation location);
|
|
14
|
+
void onActivityChanged(BackgroundActivity activity);
|
|
15
|
+
void onServiceStatusChanged(int status);
|
|
16
|
+
void onAbortRequested();
|
|
17
|
+
void onHttpAuthorization();
|
|
18
|
+
void onError(PluginException error);
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle;
|
|
4
|
+
|
|
5
|
+
import org.json.JSONException;
|
|
6
|
+
import org.json.JSONObject;
|
|
7
|
+
|
|
8
|
+
public class PluginException extends Exception {
|
|
9
|
+
public static final int PERMISSION_DENIED_ERROR = 1000;
|
|
10
|
+
public static final int SETTINGS_ERROR = 1001;
|
|
11
|
+
public static final int CONFIGURE_ERROR = 1002;
|
|
12
|
+
public static final int SERVICE_ERROR = 1003;
|
|
13
|
+
public static final int JSON_ERROR = 1004;
|
|
14
|
+
|
|
15
|
+
private Integer code;
|
|
16
|
+
|
|
17
|
+
public PluginException(String message, Throwable cause, int code) {
|
|
18
|
+
super(message, cause);
|
|
19
|
+
this.code = code;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public PluginException(String message, int code) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.code = code;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public Integer getCode() {
|
|
28
|
+
return code;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public Bundle toBundle() {
|
|
32
|
+
Bundle bundle = new Bundle();
|
|
33
|
+
bundle.putInt("code", this.code);
|
|
34
|
+
bundle.putString("message", this.getMessage());
|
|
35
|
+
|
|
36
|
+
return bundle;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
4
|
+
import com.marianhello.bgloc.data.LocationDAO;
|
|
5
|
+
import com.marianhello.logging.LoggerManager;
|
|
6
|
+
|
|
7
|
+
import org.json.JSONArray;
|
|
8
|
+
import org.json.JSONException;
|
|
9
|
+
|
|
10
|
+
import java.util.concurrent.ExecutorService;
|
|
11
|
+
import java.util.concurrent.Executors;
|
|
12
|
+
import java.util.concurrent.RejectedExecutionException;
|
|
13
|
+
import java.util.concurrent.TimeUnit;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Location task to post/sync locations from location providers
|
|
17
|
+
*
|
|
18
|
+
* All locations updates are recorded in local db at all times.
|
|
19
|
+
* Also location is also send to all messenger clients.
|
|
20
|
+
*
|
|
21
|
+
* If option.url is defined, each location is also immediately posted.
|
|
22
|
+
* If post is successful, the location is deleted from local db.
|
|
23
|
+
* All failed to post locations are coalesced and send in some time later in one single batch.
|
|
24
|
+
* Batch sync takes place only when number of failed to post locations reaches syncTreshold.
|
|
25
|
+
*
|
|
26
|
+
* If only option.syncUrl is defined, locations are send only in single batch,
|
|
27
|
+
* when number of locations reaches syncTreshold.
|
|
28
|
+
*
|
|
29
|
+
*/
|
|
30
|
+
public class PostLocationTask {
|
|
31
|
+
private final LocationDAO mLocationDAO;
|
|
32
|
+
private final PostLocationTaskListener mTaskListener;
|
|
33
|
+
private final ConnectivityListener mConnectivityListener;
|
|
34
|
+
|
|
35
|
+
private final ExecutorService mExecutor;
|
|
36
|
+
|
|
37
|
+
private volatile boolean mHasConnectivity = true;
|
|
38
|
+
private volatile Config mConfig;
|
|
39
|
+
|
|
40
|
+
private org.slf4j.Logger logger;
|
|
41
|
+
|
|
42
|
+
public interface PostLocationTaskListener
|
|
43
|
+
{
|
|
44
|
+
void onSyncRequested();
|
|
45
|
+
void onRequestedAbortUpdates();
|
|
46
|
+
void onHttpAuthorizationUpdates();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public PostLocationTask(LocationDAO dao, PostLocationTaskListener taskListener,
|
|
50
|
+
ConnectivityListener connectivityListener) {
|
|
51
|
+
logger = LoggerManager.getLogger(PostLocationTask.class);
|
|
52
|
+
logger.info("Creating PostLocationTask");
|
|
53
|
+
|
|
54
|
+
mLocationDAO = dao;
|
|
55
|
+
mTaskListener = taskListener;
|
|
56
|
+
mConnectivityListener = connectivityListener;
|
|
57
|
+
|
|
58
|
+
mExecutor = Executors.newSingleThreadExecutor();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public void setConfig(Config config) {
|
|
62
|
+
mConfig = config;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public void setHasConnectivity(boolean hasConnectivity) {
|
|
66
|
+
mHasConnectivity = hasConnectivity;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public void clearQueue() {
|
|
70
|
+
mExecutor.execute(new Runnable() {
|
|
71
|
+
@Override
|
|
72
|
+
public void run() {
|
|
73
|
+
mLocationDAO.deleteUnpostedLocations();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public void add(final BackgroundLocation location) {
|
|
79
|
+
if (mConfig == null) {
|
|
80
|
+
logger.warn("PostLocationTask has no config. Did you called setConfig? Skipping location.");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
long locationId = mLocationDAO.persistLocation(location);
|
|
85
|
+
location.setLocationId(locationId);
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
mExecutor.execute(new Runnable() {
|
|
89
|
+
@Override
|
|
90
|
+
public void run() {
|
|
91
|
+
post(location);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
} catch (RejectedExecutionException ex) {
|
|
95
|
+
mLocationDAO.updateLocationForSync(locationId);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public void shutdown() {
|
|
100
|
+
shutdown(60);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public void shutdown(int waitSeconds) {
|
|
104
|
+
mExecutor.shutdown();
|
|
105
|
+
try {
|
|
106
|
+
if (!mExecutor.awaitTermination(waitSeconds, TimeUnit.SECONDS)) {
|
|
107
|
+
mExecutor.shutdownNow();
|
|
108
|
+
mLocationDAO.deleteUnpostedLocations();
|
|
109
|
+
}
|
|
110
|
+
} catch (InterruptedException e) {
|
|
111
|
+
mExecutor.shutdownNow();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private void post(final BackgroundLocation location) {
|
|
116
|
+
long locationId = location.getLocationId();
|
|
117
|
+
|
|
118
|
+
if (mHasConnectivity && mConfig.hasValidUrl()) {
|
|
119
|
+
if (postLocation(location)) {
|
|
120
|
+
mLocationDAO.deleteLocationById(locationId);
|
|
121
|
+
|
|
122
|
+
return; // if posted successfully do nothing more
|
|
123
|
+
} else {
|
|
124
|
+
mLocationDAO.updateLocationForSync(locationId);
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
mLocationDAO.updateLocationForSync(locationId);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (mConfig.hasValidSyncUrl()) {
|
|
131
|
+
long syncLocationsCount = mLocationDAO.getLocationsForSyncCount(System.currentTimeMillis());
|
|
132
|
+
if (syncLocationsCount >= mConfig.getSyncThreshold()) {
|
|
133
|
+
logger.debug("Attempt to sync locations: {} threshold: {}", syncLocationsCount, mConfig.getSyncThreshold());
|
|
134
|
+
mTaskListener.onSyncRequested();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private boolean postLocation(BackgroundLocation location) {
|
|
140
|
+
logger.debug("Executing PostLocationTask#postLocation");
|
|
141
|
+
JSONArray jsonLocations = new JSONArray();
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
jsonLocations.put(mConfig.getTemplate().locationToJson(location));
|
|
145
|
+
} catch (JSONException e) {
|
|
146
|
+
logger.warn("Location to json failed: {}", location.toString());
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
String url = mConfig.getUrl();
|
|
151
|
+
logger.debug("Posting json to url: {} headers: {}", url, mConfig.getHttpHeaders());
|
|
152
|
+
int responseCode;
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
responseCode = HttpPostService.postJSON(url, jsonLocations, mConfig.getHttpHeaders());
|
|
156
|
+
} catch (Exception e) {
|
|
157
|
+
mHasConnectivity = mConnectivityListener.hasConnectivity();
|
|
158
|
+
logger.warn("Error while posting locations: {}", e.getMessage());
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (responseCode == 285) {
|
|
163
|
+
// Okay, but we don't need to continue sending these
|
|
164
|
+
|
|
165
|
+
logger.debug("Location was sent to the server, and received an \"HTTP 285 Updates Not Required\"");
|
|
166
|
+
|
|
167
|
+
if (mTaskListener != null)
|
|
168
|
+
mTaskListener.onRequestedAbortUpdates();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (responseCode == 401) {
|
|
172
|
+
if (mTaskListener != null)
|
|
173
|
+
mTaskListener.onHttpAuthorizationUpdates();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// All 2xx statuses are okay
|
|
177
|
+
boolean isStatusOkay = responseCode >= 200 && responseCode < 300;
|
|
178
|
+
|
|
179
|
+
if (!isStatusOkay) {
|
|
180
|
+
logger.warn("Server error while posting locations responseCode: {}", responseCode);
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
package com.marianhello.bgloc;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Created by finch on 19/07/16.
|
|
7
|
+
*/
|
|
8
|
+
public class ResourceResolver {
|
|
9
|
+
|
|
10
|
+
private static final String RESOURCE_PREFIX = "plugin_bgloc_";
|
|
11
|
+
private static final String ACCOUNT_NAME_RESOURCE = RESOURCE_PREFIX + "account_name";
|
|
12
|
+
private static final String ACCOUNT_TYPE_RESOURCE = RESOURCE_PREFIX + "account_type";
|
|
13
|
+
private static final String AUTHORITY_TYPE_RESOURCE = RESOURCE_PREFIX + "content_authority";
|
|
14
|
+
|
|
15
|
+
private Context mContext;
|
|
16
|
+
|
|
17
|
+
protected ResourceResolver() {}
|
|
18
|
+
|
|
19
|
+
private ResourceResolver(Context context) {
|
|
20
|
+
mContext = context;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private Context getApplicationContext() {
|
|
24
|
+
return mContext.getApplicationContext();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public int getAppResource(String name, String type) {
|
|
28
|
+
Context appContext = getApplicationContext();
|
|
29
|
+
return appContext.getResources().getIdentifier(name, type, appContext.getPackageName());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public Integer getDrawable(String resourceName) {
|
|
33
|
+
return getAppResource(resourceName, "drawable");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public String getString(String name) {
|
|
37
|
+
return getApplicationContext().getString(getAppResource(name, "string"));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public String getAccountName() {
|
|
41
|
+
return getString(ACCOUNT_NAME_RESOURCE);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public String getAccountType() {
|
|
45
|
+
return getApplicationContext().getPackageName() + ".bgloc.account";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public String getAuthority() {
|
|
49
|
+
return getApplicationContext().getPackageName() + ".bgloc.provider";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public static ResourceResolver newInstance(Context context) {
|
|
53
|
+
return new ResourceResolver(context);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import org.json.JSONArray;
|
|
4
|
+
import org.json.JSONException;
|
|
5
|
+
import org.json.JSONObject;
|
|
6
|
+
|
|
7
|
+
import java.io.Serializable;
|
|
8
|
+
import java.util.Iterator;
|
|
9
|
+
import java.util.List;
|
|
10
|
+
import java.util.Map;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Created by finch on 9.12.2017.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
abstract public class AbstractLocationTemplate implements LocationTemplate, Serializable {
|
|
17
|
+
public static final String BUNDLE_KEY = "template";
|
|
18
|
+
public abstract LocationTemplate clone();
|
|
19
|
+
|
|
20
|
+
static class LocationMapper {
|
|
21
|
+
private BackgroundLocation location;
|
|
22
|
+
|
|
23
|
+
private LocationMapper() {}
|
|
24
|
+
|
|
25
|
+
private Object mapValue(Object value) throws JSONException {
|
|
26
|
+
if (value instanceof String) {
|
|
27
|
+
Object locationValue = location.getValueForKey((String) value);
|
|
28
|
+
return locationValue != null ? locationValue : value;
|
|
29
|
+
} else if (value instanceof Map) {
|
|
30
|
+
return withMap((Map) value);
|
|
31
|
+
} else if (value instanceof List) {
|
|
32
|
+
return withList((List) value);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public JSONArray withList(List values) throws JSONException {
|
|
39
|
+
JSONArray result = new JSONArray();
|
|
40
|
+
Iterator<?> it = values.iterator();
|
|
41
|
+
while (it.hasNext()) {
|
|
42
|
+
Object value = it.next();
|
|
43
|
+
result.put(mapValue(value));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return result;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public JSONObject withMap(Map values) throws JSONException {
|
|
51
|
+
JSONObject result = new JSONObject();
|
|
52
|
+
Iterator<?> it = values.entrySet().iterator();
|
|
53
|
+
while (it.hasNext()) {
|
|
54
|
+
Map.Entry<String, Object> pair = (Map.Entry) it.next();
|
|
55
|
+
String key = pair.getKey();
|
|
56
|
+
Object value = pair.getValue();
|
|
57
|
+
result.put(key, mapValue(value));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public static LocationMapper map(BackgroundLocation location) {
|
|
64
|
+
LocationMapper instance = new LocationMapper();
|
|
65
|
+
instance.location = location;
|
|
66
|
+
return instance;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|