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,760 @@
|
|
|
1
|
+
/*
|
|
2
|
+
According to apache license
|
|
3
|
+
|
|
4
|
+
This is fork of christocracy cordova-plugin-background-geolocation plugin
|
|
5
|
+
https://github.com/christocracy/cordova-plugin-background-geolocation
|
|
6
|
+
|
|
7
|
+
This is a new class
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
package com.marianhello.bgloc.service;
|
|
11
|
+
|
|
12
|
+
import android.accounts.Account;
|
|
13
|
+
import android.app.Notification;
|
|
14
|
+
import android.app.NotificationManager;
|
|
15
|
+
import android.app.Service;
|
|
16
|
+
import android.content.BroadcastReceiver;
|
|
17
|
+
import android.content.ContentResolver;
|
|
18
|
+
import android.content.Context;
|
|
19
|
+
import android.content.Intent;
|
|
20
|
+
import android.content.IntentFilter;
|
|
21
|
+
import android.net.ConnectivityManager;
|
|
22
|
+
import android.net.NetworkInfo;
|
|
23
|
+
import android.os.Binder;
|
|
24
|
+
import android.os.Build;
|
|
25
|
+
import android.os.Bundle;
|
|
26
|
+
import android.os.Handler;
|
|
27
|
+
import android.os.HandlerThread;
|
|
28
|
+
import android.os.IBinder;
|
|
29
|
+
import android.os.Looper;
|
|
30
|
+
import android.os.Message;
|
|
31
|
+
import android.os.Process;
|
|
32
|
+
import androidx.annotation.Nullable;
|
|
33
|
+
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
34
|
+
|
|
35
|
+
import com.marianhello.bgloc.Config;
|
|
36
|
+
import com.marianhello.bgloc.ConnectivityListener;
|
|
37
|
+
import com.marianhello.bgloc.sync.NotificationHelper;
|
|
38
|
+
import com.marianhello.bgloc.PluginException;
|
|
39
|
+
import com.marianhello.bgloc.PostLocationTask;
|
|
40
|
+
import com.marianhello.bgloc.ResourceResolver;
|
|
41
|
+
import com.marianhello.bgloc.data.BackgroundActivity;
|
|
42
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
43
|
+
import com.marianhello.bgloc.data.ConfigurationDAO;
|
|
44
|
+
import com.marianhello.bgloc.data.DAOFactory;
|
|
45
|
+
import com.marianhello.bgloc.data.LocationDAO;
|
|
46
|
+
import com.marianhello.bgloc.data.LocationTransform;
|
|
47
|
+
import com.marianhello.bgloc.headless.AbstractTaskRunner;
|
|
48
|
+
import com.marianhello.bgloc.headless.ActivityTask;
|
|
49
|
+
import com.marianhello.bgloc.headless.LocationTask;
|
|
50
|
+
import com.marianhello.bgloc.headless.StationaryTask;
|
|
51
|
+
import com.marianhello.bgloc.headless.Task;
|
|
52
|
+
import com.marianhello.bgloc.headless.TaskRunner;
|
|
53
|
+
import com.marianhello.bgloc.headless.TaskRunnerFactory;
|
|
54
|
+
import com.marianhello.bgloc.provider.LocationProvider;
|
|
55
|
+
import com.marianhello.bgloc.provider.LocationProviderFactory;
|
|
56
|
+
import com.marianhello.bgloc.provider.ProviderDelegate;
|
|
57
|
+
import com.marianhello.bgloc.sync.AccountHelper;
|
|
58
|
+
import com.marianhello.bgloc.sync.SyncService;
|
|
59
|
+
import com.marianhello.logging.LoggerManager;
|
|
60
|
+
import com.marianhello.logging.UncaughtExceptionLogger;
|
|
61
|
+
|
|
62
|
+
import org.chromium.content.browser.ThreadUtils;
|
|
63
|
+
import org.json.JSONException;
|
|
64
|
+
|
|
65
|
+
import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.containsCommand;
|
|
66
|
+
import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.containsMessage;
|
|
67
|
+
import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.getCommand;
|
|
68
|
+
import static com.marianhello.bgloc.service.LocationServiceIntentBuilder.getMessage;
|
|
69
|
+
|
|
70
|
+
public class LocationServiceImpl extends Service implements ProviderDelegate, LocationService {
|
|
71
|
+
|
|
72
|
+
public static final String ACTION_BROADCAST = ".broadcast";
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* CommandId sent by the service to
|
|
76
|
+
* any registered clients with error.
|
|
77
|
+
*/
|
|
78
|
+
public static final int MSG_ON_ERROR = 100;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* CommandId sent by the service to
|
|
82
|
+
* any registered clients with the new position.
|
|
83
|
+
*/
|
|
84
|
+
public static final int MSG_ON_LOCATION = 101;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* CommandId sent by the service to
|
|
88
|
+
* any registered clients whenever the devices enters "stationary-mode"
|
|
89
|
+
*/
|
|
90
|
+
public static final int MSG_ON_STATIONARY = 102;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* CommandId sent by the service to
|
|
94
|
+
* any registered clients with new detected activity.
|
|
95
|
+
*/
|
|
96
|
+
public static final int MSG_ON_ACTIVITY = 103;
|
|
97
|
+
|
|
98
|
+
public static final int MSG_ON_SERVICE_STARTED = 104;
|
|
99
|
+
|
|
100
|
+
public static final int MSG_ON_SERVICE_STOPPED = 105;
|
|
101
|
+
|
|
102
|
+
public static final int MSG_ON_ABORT_REQUESTED = 106;
|
|
103
|
+
|
|
104
|
+
public static final int MSG_ON_HTTP_AUTHORIZATION = 107;
|
|
105
|
+
|
|
106
|
+
/** notification id */
|
|
107
|
+
private static int NOTIFICATION_ID = 1;
|
|
108
|
+
|
|
109
|
+
private ResourceResolver mResolver;
|
|
110
|
+
private Config mConfig;
|
|
111
|
+
private LocationProvider mProvider;
|
|
112
|
+
private Account mSyncAccount;
|
|
113
|
+
|
|
114
|
+
private org.slf4j.Logger logger;
|
|
115
|
+
|
|
116
|
+
private final IBinder mBinder = new LocalBinder();
|
|
117
|
+
private HandlerThread mHandlerThread;
|
|
118
|
+
private ServiceHandler mServiceHandler;
|
|
119
|
+
private LocationDAO mLocationDAO;
|
|
120
|
+
private PostLocationTask mPostLocationTask;
|
|
121
|
+
private String mHeadlessTaskRunnerClass;
|
|
122
|
+
private TaskRunner mHeadlessTaskRunner;
|
|
123
|
+
|
|
124
|
+
private long mServiceId = -1;
|
|
125
|
+
private static boolean sIsRunning = false;
|
|
126
|
+
private boolean mIsInForeground = false;
|
|
127
|
+
|
|
128
|
+
private static LocationTransform sLocationTransform;
|
|
129
|
+
private static LocationProviderFactory sLocationProviderFactory;
|
|
130
|
+
|
|
131
|
+
private class ServiceHandler extends Handler {
|
|
132
|
+
public ServiceHandler(Looper looper) {
|
|
133
|
+
super(looper);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@Override
|
|
137
|
+
public void handleMessage(Message msg) {
|
|
138
|
+
super.handleMessage(msg);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* When binding to the service, we return an interface to our messenger
|
|
144
|
+
* for sending messages to the service.
|
|
145
|
+
*/
|
|
146
|
+
@Override
|
|
147
|
+
public IBinder onBind(Intent intent) {
|
|
148
|
+
logger.debug("Client binds to service");
|
|
149
|
+
return mBinder;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@Override
|
|
153
|
+
public void onRebind(Intent intent) {
|
|
154
|
+
logger.debug("Client rebinds to service");
|
|
155
|
+
super.onRebind(intent);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@Override
|
|
159
|
+
public boolean onUnbind(Intent intent) {
|
|
160
|
+
// All clients have unbound with unbindService()
|
|
161
|
+
logger.debug("All clients have been unbound from service");
|
|
162
|
+
|
|
163
|
+
return true; // Ensures onRebind() is called when a client re-binds.
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@Override
|
|
167
|
+
public void onCreate() {
|
|
168
|
+
super.onCreate();
|
|
169
|
+
|
|
170
|
+
sIsRunning = false;
|
|
171
|
+
|
|
172
|
+
UncaughtExceptionLogger.register(this);
|
|
173
|
+
|
|
174
|
+
logger = LoggerManager.getLogger(LocationServiceImpl.class);
|
|
175
|
+
logger.info("Creating LocationServiceImpl");
|
|
176
|
+
|
|
177
|
+
mServiceId = System.currentTimeMillis();
|
|
178
|
+
|
|
179
|
+
// Start up the thread running the service. Note that we create a
|
|
180
|
+
// separate thread because the service normally runs in the process's
|
|
181
|
+
// main thread, which we don't want to block. We also make it
|
|
182
|
+
// background priority so CPU-intensive work will not disrupt our UI.
|
|
183
|
+
if (mHandlerThread == null) {
|
|
184
|
+
mHandlerThread = new HandlerThread("LocationServiceImpl.Thread", Process.THREAD_PRIORITY_BACKGROUND);
|
|
185
|
+
}
|
|
186
|
+
mHandlerThread.start();
|
|
187
|
+
// An Android service handler is a handler running on a specific background thread.
|
|
188
|
+
mServiceHandler = new ServiceHandler(mHandlerThread.getLooper());
|
|
189
|
+
|
|
190
|
+
mResolver = ResourceResolver.newInstance(this);
|
|
191
|
+
|
|
192
|
+
mSyncAccount = AccountHelper.CreateSyncAccount(this, mResolver.getAccountName(),
|
|
193
|
+
mResolver.getAccountType());
|
|
194
|
+
|
|
195
|
+
String authority = mResolver.getAuthority();
|
|
196
|
+
ContentResolver.setIsSyncable(mSyncAccount, authority, 1);
|
|
197
|
+
ContentResolver.setSyncAutomatically(mSyncAccount, authority, true);
|
|
198
|
+
|
|
199
|
+
mLocationDAO = DAOFactory.createLocationDAO(this);
|
|
200
|
+
|
|
201
|
+
mPostLocationTask = new PostLocationTask(mLocationDAO,
|
|
202
|
+
new PostLocationTask.PostLocationTaskListener() {
|
|
203
|
+
@Override
|
|
204
|
+
public void onRequestedAbortUpdates() {
|
|
205
|
+
handleRequestedAbortUpdates();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@Override
|
|
209
|
+
public void onHttpAuthorizationUpdates() {
|
|
210
|
+
handleHttpAuthorizationUpdates();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@Override
|
|
214
|
+
public void onSyncRequested() {
|
|
215
|
+
SyncService.sync(mSyncAccount, mResolver.getAuthority(), false);
|
|
216
|
+
}
|
|
217
|
+
}, new ConnectivityListener() {
|
|
218
|
+
@Override
|
|
219
|
+
public boolean hasConnectivity() {
|
|
220
|
+
return isNetworkAvailable();
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
registerReceiver(connectivityChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
|
225
|
+
NotificationHelper.registerServiceChannel(this);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@Override
|
|
229
|
+
public void onDestroy() {
|
|
230
|
+
logger.info("Destroying LocationServiceImpl");
|
|
231
|
+
|
|
232
|
+
// workaround for issue #276
|
|
233
|
+
if (mProvider != null) {
|
|
234
|
+
mProvider.onDestroy();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (mHandlerThread != null) {
|
|
238
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
|
239
|
+
mHandlerThread.quitSafely();
|
|
240
|
+
} else {
|
|
241
|
+
mHandlerThread.quit(); //sorry
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (mPostLocationTask != null) {
|
|
246
|
+
mPostLocationTask.shutdown();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
unregisterReceiver(connectivityChangeReceiver);
|
|
251
|
+
|
|
252
|
+
sIsRunning = false;
|
|
253
|
+
super.onDestroy();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@Override
|
|
257
|
+
public void onTaskRemoved(Intent rootIntent) {
|
|
258
|
+
logger.debug("Task has been removed");
|
|
259
|
+
// workaround for issue #276
|
|
260
|
+
Config config = getConfig();
|
|
261
|
+
if (config.getStopOnTerminate()) {
|
|
262
|
+
logger.info("Stopping self");
|
|
263
|
+
stopSelf();
|
|
264
|
+
} else {
|
|
265
|
+
logger.info("Continue running in background");
|
|
266
|
+
}
|
|
267
|
+
super.onTaskRemoved(rootIntent);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
@Override
|
|
271
|
+
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
272
|
+
if (intent == null) {
|
|
273
|
+
// when service was killed and restarted we will restart service
|
|
274
|
+
start();
|
|
275
|
+
return START_STICKY;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
boolean containsCommand = containsCommand(intent);
|
|
279
|
+
logger.debug(
|
|
280
|
+
String.format("Service in [%s] state. cmdId: [%s]. startId: [%d]",
|
|
281
|
+
sIsRunning ? "STARTED" : "NOT STARTED",
|
|
282
|
+
containsCommand ? getCommand(intent).getId() : "N/A",
|
|
283
|
+
startId)
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
if (containsCommand) {
|
|
287
|
+
LocationServiceIntentBuilder.Command cmd = getCommand(intent);
|
|
288
|
+
processCommand(cmd.getId(), cmd.getArgument());
|
|
289
|
+
} else {
|
|
290
|
+
// Could be a BOOT-event, or the OS just randomly restarted the service...
|
|
291
|
+
startForegroundService();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (containsMessage(intent)) {
|
|
295
|
+
processMessage(getMessage(intent));
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return START_STICKY;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
private void processMessage(String message) {
|
|
302
|
+
// currently we do not process any message
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
private void processCommand(int command, Object arg) {
|
|
306
|
+
try {
|
|
307
|
+
switch (command) {
|
|
308
|
+
case CommandId.START:
|
|
309
|
+
start();
|
|
310
|
+
break;
|
|
311
|
+
case CommandId.START_FOREGROUND_SERVICE:
|
|
312
|
+
startForegroundService();
|
|
313
|
+
break;
|
|
314
|
+
case CommandId.STOP:
|
|
315
|
+
stop();
|
|
316
|
+
break;
|
|
317
|
+
case CommandId.CONFIGURE:
|
|
318
|
+
configure((Config) arg);
|
|
319
|
+
break;
|
|
320
|
+
case CommandId.STOP_FOREGROUND:
|
|
321
|
+
stopForeground();
|
|
322
|
+
break;
|
|
323
|
+
case CommandId.START_FOREGROUND:
|
|
324
|
+
startForeground();
|
|
325
|
+
break;
|
|
326
|
+
case CommandId.REGISTER_HEADLESS_TASK:
|
|
327
|
+
registerHeadlessTask((String) arg);
|
|
328
|
+
break;
|
|
329
|
+
case CommandId.START_HEADLESS_TASK:
|
|
330
|
+
startHeadlessTask();
|
|
331
|
+
break;
|
|
332
|
+
case CommandId.STOP_HEADLESS_TASK:
|
|
333
|
+
stopHeadlessTask();
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
} catch (Exception e) {
|
|
337
|
+
logger.error("processCommand: exception", e);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
@Override
|
|
342
|
+
public synchronized void start() {
|
|
343
|
+
if (sIsRunning) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (mConfig == null) {
|
|
348
|
+
logger.warn("Attempt to start unconfigured service. Will use stored or default.");
|
|
349
|
+
mConfig = getConfig();
|
|
350
|
+
// TODO: throw JSONException if config cannot be obtained from db
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
logger.debug("Will start service with: {}", mConfig.toString());
|
|
354
|
+
|
|
355
|
+
mPostLocationTask.setConfig(mConfig);
|
|
356
|
+
mPostLocationTask.clearQueue();
|
|
357
|
+
|
|
358
|
+
LocationProviderFactory spf = sLocationProviderFactory != null
|
|
359
|
+
? sLocationProviderFactory : new LocationProviderFactory(this);
|
|
360
|
+
mProvider = spf.getInstance(mConfig.getLocationProvider());
|
|
361
|
+
mProvider.setDelegate(this);
|
|
362
|
+
mProvider.onCreate();
|
|
363
|
+
mProvider.onConfigure(mConfig);
|
|
364
|
+
|
|
365
|
+
sIsRunning = true;
|
|
366
|
+
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
|
367
|
+
@Override
|
|
368
|
+
public void run() {
|
|
369
|
+
mProvider.onStart();
|
|
370
|
+
if (mConfig.getStartForeground()) {
|
|
371
|
+
startForeground();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
Bundle bundle = new Bundle();
|
|
377
|
+
bundle.putInt("action", MSG_ON_SERVICE_STARTED);
|
|
378
|
+
bundle.putLong("serviceId", mServiceId);
|
|
379
|
+
broadcastMessage(bundle);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
@Override
|
|
383
|
+
public synchronized void startForegroundService() {
|
|
384
|
+
start();
|
|
385
|
+
startForeground();
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
@Override
|
|
389
|
+
public synchronized void stop() {
|
|
390
|
+
if (!sIsRunning) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (mProvider != null) {
|
|
395
|
+
mProvider.onStop();
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
stopForeground(true);
|
|
399
|
+
stopSelf();
|
|
400
|
+
|
|
401
|
+
broadcastMessage(MSG_ON_SERVICE_STOPPED);
|
|
402
|
+
sIsRunning = false;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
@Override
|
|
406
|
+
public void startForeground() {
|
|
407
|
+
if (sIsRunning && !mIsInForeground) {
|
|
408
|
+
Config config = getConfig();
|
|
409
|
+
Notification notification = new NotificationHelper.NotificationFactory(this).getNotification(
|
|
410
|
+
config.getNotificationTitle(),
|
|
411
|
+
config.getNotificationText(),
|
|
412
|
+
config.getLargeNotificationIcon(),
|
|
413
|
+
config.getSmallNotificationIcon(),
|
|
414
|
+
config.getNotificationIconColor());
|
|
415
|
+
|
|
416
|
+
if (mProvider != null) {
|
|
417
|
+
mProvider.onCommand(LocationProvider.CMD_SWITCH_MODE,
|
|
418
|
+
LocationProvider.FOREGROUND_MODE);
|
|
419
|
+
}
|
|
420
|
+
super.startForeground(NOTIFICATION_ID, notification);
|
|
421
|
+
mIsInForeground = true;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
@Override
|
|
426
|
+
public synchronized void stopForeground() {
|
|
427
|
+
if (sIsRunning && mIsInForeground) {
|
|
428
|
+
stopForeground(true);
|
|
429
|
+
if (mProvider != null) {
|
|
430
|
+
mProvider.onCommand(LocationProvider.CMD_SWITCH_MODE,
|
|
431
|
+
LocationProvider.BACKGROUND_MODE);
|
|
432
|
+
}
|
|
433
|
+
mIsInForeground = false;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
@Override
|
|
438
|
+
public synchronized void configure(Config config) {
|
|
439
|
+
if (mConfig == null) {
|
|
440
|
+
mConfig = config;
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
final Config currentConfig = mConfig;
|
|
445
|
+
mConfig = config;
|
|
446
|
+
|
|
447
|
+
mPostLocationTask.setConfig(mConfig);
|
|
448
|
+
|
|
449
|
+
ThreadUtils.runOnUiThread(new Runnable() {
|
|
450
|
+
@Override
|
|
451
|
+
public void run() {
|
|
452
|
+
if (sIsRunning) {
|
|
453
|
+
if (currentConfig.getStartForeground() == true && mConfig.getStartForeground() == false) {
|
|
454
|
+
stopForeground(true);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (mConfig.getStartForeground() == true) {
|
|
458
|
+
if (currentConfig.getStartForeground() == false) {
|
|
459
|
+
// was not running in foreground, so start in foreground
|
|
460
|
+
startForeground();
|
|
461
|
+
} else {
|
|
462
|
+
// was running in foreground, so just update existing notification
|
|
463
|
+
Notification notification = new NotificationHelper.NotificationFactory(LocationServiceImpl.this).getNotification(
|
|
464
|
+
mConfig.getNotificationTitle(),
|
|
465
|
+
mConfig.getNotificationText(),
|
|
466
|
+
mConfig.getLargeNotificationIcon(),
|
|
467
|
+
mConfig.getSmallNotificationIcon(),
|
|
468
|
+
mConfig.getNotificationIconColor());
|
|
469
|
+
|
|
470
|
+
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
|
471
|
+
notificationManager.notify(NOTIFICATION_ID, notification);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
if (currentConfig.getLocationProvider() != mConfig.getLocationProvider()) {
|
|
477
|
+
boolean shouldStart = mProvider.isStarted();
|
|
478
|
+
mProvider.onDestroy();
|
|
479
|
+
LocationProviderFactory spf = new LocationProviderFactory(LocationServiceImpl.this);
|
|
480
|
+
mProvider = spf.getInstance(mConfig.getLocationProvider());
|
|
481
|
+
mProvider.setDelegate(LocationServiceImpl.this);
|
|
482
|
+
mProvider.onCreate();
|
|
483
|
+
mProvider.onConfigure(mConfig);
|
|
484
|
+
if (shouldStart) {
|
|
485
|
+
mProvider.onStart();
|
|
486
|
+
}
|
|
487
|
+
} else {
|
|
488
|
+
mProvider.onConfigure(mConfig);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
@Override
|
|
495
|
+
public synchronized void registerHeadlessTask(String taskRunnerClass) {
|
|
496
|
+
logger.debug("Registering headless task");
|
|
497
|
+
mHeadlessTaskRunnerClass = taskRunnerClass;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
@Override
|
|
501
|
+
public synchronized void clearHeadlessTask() {
|
|
502
|
+
logger.debug("Clearing headless task");
|
|
503
|
+
mHeadlessTaskRunnerClass = null;
|
|
504
|
+
mHeadlessTaskRunner = null;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
@Override
|
|
508
|
+
public synchronized void startHeadlessTask() {
|
|
509
|
+
if (mHeadlessTaskRunnerClass == null &&
|
|
510
|
+
com.margelo.nitro.nitrobackgroundgeolocation.HeadlessTaskRegistry.getTaskName(this) != null) {
|
|
511
|
+
mHeadlessTaskRunnerClass = "com.margelo.nitro.nitrobackgroundgeolocation.ReactNativeHeadlessTaskRunner";
|
|
512
|
+
}
|
|
513
|
+
if (mHeadlessTaskRunnerClass != null) {
|
|
514
|
+
TaskRunnerFactory trf = new TaskRunnerFactory();
|
|
515
|
+
try {
|
|
516
|
+
mHeadlessTaskRunner = trf.getTaskRunner(mHeadlessTaskRunnerClass);
|
|
517
|
+
((AbstractTaskRunner) mHeadlessTaskRunner).setContext(this);
|
|
518
|
+
} catch (Exception e) {
|
|
519
|
+
logger.error("Headless task start failed: {}", e.getMessage());
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
@Override
|
|
525
|
+
public synchronized void stopHeadlessTask() {
|
|
526
|
+
mHeadlessTaskRunner = null;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
@Override
|
|
530
|
+
public synchronized void executeProviderCommand(final int command, final int arg1) {
|
|
531
|
+
if (mProvider == null) {
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
ThreadUtils.runOnUiThread(new Runnable() {
|
|
536
|
+
@Override
|
|
537
|
+
public void run() {
|
|
538
|
+
mProvider.onCommand(command, arg1);
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
@Override
|
|
544
|
+
public void onLocation(BackgroundLocation location) {
|
|
545
|
+
logger.debug("New location {}", location.toString());
|
|
546
|
+
|
|
547
|
+
location = transformLocation(location);
|
|
548
|
+
if (location == null) {
|
|
549
|
+
logger.debug("Skipping location as requested by the locationTransform");
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
Bundle bundle = new Bundle();
|
|
554
|
+
bundle.putInt("action", MSG_ON_LOCATION);
|
|
555
|
+
bundle.putParcelable("payload", location);
|
|
556
|
+
broadcastMessage(bundle);
|
|
557
|
+
|
|
558
|
+
runHeadlessTask(new LocationTask(location) {
|
|
559
|
+
@Override
|
|
560
|
+
public void onError(String errorMessage) {
|
|
561
|
+
logger.error("Location task error: {}", errorMessage);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
@Override
|
|
565
|
+
public void onResult(String value) {
|
|
566
|
+
logger.debug("Location task result: {}", value);
|
|
567
|
+
}
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
postLocation(location);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
@Override
|
|
574
|
+
public void onStationary(BackgroundLocation location) {
|
|
575
|
+
logger.debug("New stationary {}", location.toString());
|
|
576
|
+
|
|
577
|
+
location = transformLocation(location);
|
|
578
|
+
if (location == null) {
|
|
579
|
+
logger.debug("Skipping location as requested by the locationTransform");
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
Bundle bundle = new Bundle();
|
|
584
|
+
bundle.putInt("action", MSG_ON_STATIONARY);
|
|
585
|
+
bundle.putParcelable("payload", location);
|
|
586
|
+
broadcastMessage(bundle);
|
|
587
|
+
|
|
588
|
+
runHeadlessTask(new StationaryTask(location){
|
|
589
|
+
@Override
|
|
590
|
+
public void onError(String errorMessage) {
|
|
591
|
+
logger.error("Stationary task error: {}", errorMessage);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
@Override
|
|
595
|
+
public void onResult(String value) {
|
|
596
|
+
logger.debug("Stationary task result: {}", value);
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
postLocation(location);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
@Override
|
|
604
|
+
public void onActivity(BackgroundActivity activity) {
|
|
605
|
+
logger.debug("New activity {}", activity.toString());
|
|
606
|
+
|
|
607
|
+
Bundle bundle = new Bundle();
|
|
608
|
+
bundle.putInt("action", MSG_ON_ACTIVITY);
|
|
609
|
+
bundle.putParcelable("payload", activity);
|
|
610
|
+
broadcastMessage(bundle);
|
|
611
|
+
|
|
612
|
+
runHeadlessTask(new ActivityTask(activity){
|
|
613
|
+
@Override
|
|
614
|
+
public void onError(String errorMessage) {
|
|
615
|
+
logger.error("Activity task error: {}", errorMessage);
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
@Override
|
|
619
|
+
public void onResult(String value) {
|
|
620
|
+
logger.debug("Activity task result: {}", value);
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
@Override
|
|
626
|
+
public void onError(PluginException error) {
|
|
627
|
+
Bundle bundle = new Bundle();
|
|
628
|
+
bundle.putInt("action", MSG_ON_ERROR);
|
|
629
|
+
bundle.putBundle("payload", error.toBundle());
|
|
630
|
+
broadcastMessage(bundle);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
private void broadcastMessage(int msgId) {
|
|
634
|
+
Bundle bundle = new Bundle();
|
|
635
|
+
bundle.putInt("action", msgId);
|
|
636
|
+
broadcastMessage(bundle);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
private void broadcastMessage(Bundle bundle) {
|
|
640
|
+
Intent intent = new Intent(ACTION_BROADCAST);
|
|
641
|
+
intent.putExtras(bundle);
|
|
642
|
+
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
@Override
|
|
646
|
+
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
|
|
647
|
+
return super.registerReceiver(receiver, filter, null, mServiceHandler, RECEIVER_NOT_EXPORTED);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
@Override
|
|
651
|
+
public void unregisterReceiver(BroadcastReceiver receiver) {
|
|
652
|
+
try {
|
|
653
|
+
super.unregisterReceiver(receiver);
|
|
654
|
+
} catch (IllegalArgumentException ex) {
|
|
655
|
+
// if was not registered ignore exception
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
public Config getConfig() {
|
|
660
|
+
Config config = mConfig;
|
|
661
|
+
if (config == null) {
|
|
662
|
+
ConfigurationDAO dao = DAOFactory.createConfigurationDAO(this);
|
|
663
|
+
try {
|
|
664
|
+
config = dao.retrieveConfiguration();
|
|
665
|
+
} catch (JSONException e) {
|
|
666
|
+
logger.error("Config exception: {}", e.getMessage());
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
if (config == null) {
|
|
671
|
+
config = Config.getDefault();
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
mConfig = config;
|
|
675
|
+
return mConfig;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
public static void setLocationProviderFactory(LocationProviderFactory factory) {
|
|
679
|
+
sLocationProviderFactory = factory;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
private void runHeadlessTask(Task task) {
|
|
683
|
+
if (mHeadlessTaskRunner == null) {
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
logger.debug("Running headless task: {}", task);
|
|
688
|
+
mHeadlessTaskRunner.runTask(task);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* Class used for the client Binder. Since this service runs in the same process as its
|
|
693
|
+
* clients, we don't need to deal with IPC.
|
|
694
|
+
*/
|
|
695
|
+
public class LocalBinder extends Binder {
|
|
696
|
+
public LocationServiceImpl getService() {
|
|
697
|
+
return LocationServiceImpl.this;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
private BackgroundLocation transformLocation(BackgroundLocation location) {
|
|
702
|
+
if (sLocationTransform != null) {
|
|
703
|
+
return sLocationTransform.transformLocationBeforeCommit(this, location);
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
return location;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
private void postLocation(BackgroundLocation location) {
|
|
710
|
+
mPostLocationTask.add(location);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
public void handleRequestedAbortUpdates() {
|
|
714
|
+
broadcastMessage(MSG_ON_ABORT_REQUESTED);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
public void handleHttpAuthorizationUpdates() {
|
|
718
|
+
broadcastMessage(MSG_ON_HTTP_AUTHORIZATION);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Broadcast receiver which detects connectivity change condition
|
|
723
|
+
*/
|
|
724
|
+
private BroadcastReceiver connectivityChangeReceiver = new BroadcastReceiver() {
|
|
725
|
+
@Override
|
|
726
|
+
public void onReceive(Context context, Intent intent) {
|
|
727
|
+
boolean hasConnectivity = isNetworkAvailable();
|
|
728
|
+
mPostLocationTask.setHasConnectivity(hasConnectivity);
|
|
729
|
+
logger.info("Network condition changed has connectivity: {}", hasConnectivity);
|
|
730
|
+
}
|
|
731
|
+
};
|
|
732
|
+
|
|
733
|
+
private boolean isNetworkAvailable() {
|
|
734
|
+
ConnectivityManager cm =
|
|
735
|
+
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
736
|
+
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
|
|
737
|
+
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
public long getServiceId() {
|
|
741
|
+
return mServiceId;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
public boolean isBound() {
|
|
745
|
+
LocationServiceInfo info = new LocationServiceInfoImpl(this);
|
|
746
|
+
return info.isBound();
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
public static boolean isRunning() {
|
|
750
|
+
return sIsRunning;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
public static void setLocationTransform(@Nullable LocationTransform transform) {
|
|
754
|
+
sLocationTransform = transform;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
public static @Nullable LocationTransform getLocationTransform() {
|
|
758
|
+
return sLocationTransform;
|
|
759
|
+
}
|
|
760
|
+
}
|