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,538 @@
|
|
|
1
|
+
package com.margelo.nitro.nitrobackgroundgeolocation
|
|
2
|
+
|
|
3
|
+
import android.app.Application
|
|
4
|
+
import android.os.Bundle
|
|
5
|
+
import android.os.Handler
|
|
6
|
+
import android.os.Looper
|
|
7
|
+
import android.util.Log
|
|
8
|
+
import androidx.annotation.Keep
|
|
9
|
+
import androidx.lifecycle.DefaultLifecycleObserver
|
|
10
|
+
import androidx.lifecycle.LifecycleOwner
|
|
11
|
+
import androidx.lifecycle.ProcessLifecycleOwner
|
|
12
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
13
|
+
import com.margelo.nitro.NitroModules
|
|
14
|
+
import com.margelo.nitro.core.Promise
|
|
15
|
+
import com.marianhello.bgloc.BackgroundGeolocationFacade
|
|
16
|
+
import com.marianhello.bgloc.Config
|
|
17
|
+
import com.marianhello.bgloc.PluginDelegate
|
|
18
|
+
import com.marianhello.bgloc.PluginException
|
|
19
|
+
import com.marianhello.bgloc.data.BackgroundActivity
|
|
20
|
+
import com.marianhello.bgloc.data.BackgroundLocation
|
|
21
|
+
import org.json.JSONObject
|
|
22
|
+
import java.util.concurrent.CopyOnWriteArrayList
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Kotlin HybridObject that bridges Nitro's generated spec to the Java
|
|
26
|
+
* [BackgroundGeolocationFacade].
|
|
27
|
+
*
|
|
28
|
+
* The class implements [PluginDelegate] so the facade can notify it of
|
|
29
|
+
* location / activity / status changes which are then forwarded to the
|
|
30
|
+
* JavaScript layer via the stored callback lists.
|
|
31
|
+
*/
|
|
32
|
+
@DoNotStrip
|
|
33
|
+
@Keep
|
|
34
|
+
class NitroBackgroundGeolocation :
|
|
35
|
+
HybridNitroBackgroundGeolocationSpec(),
|
|
36
|
+
PluginDelegate,
|
|
37
|
+
DefaultLifecycleObserver,
|
|
38
|
+
Application.ActivityLifecycleCallbacks {
|
|
39
|
+
|
|
40
|
+
companion object {
|
|
41
|
+
private const val TAG = "NitroBGGeo"
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Library-owned headless task name. Must match `HEADLESS_TASK_NAME`
|
|
45
|
+
* in the TypeScript headless module. Users do not interact with
|
|
46
|
+
* this string — the JS-side `registerHeadlessHandler` API hides it.
|
|
47
|
+
*/
|
|
48
|
+
const val LIB_TASK_NAME = "__rn-nitro-bg-geo-headless__"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private val context
|
|
52
|
+
get() = NitroModules.applicationContext?.applicationContext
|
|
53
|
+
?: throw IllegalStateException(
|
|
54
|
+
"NitroBackgroundGeolocation: NitroModules.applicationContext is null. " +
|
|
55
|
+
"Ensure Nitro is installed before using this module."
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
private val application
|
|
59
|
+
get() = context as? Application
|
|
60
|
+
?: throw IllegalStateException(
|
|
61
|
+
"NitroBackgroundGeolocation: application context is not an Application."
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
private val facade: BackgroundGeolocationFacade by lazy {
|
|
65
|
+
BackgroundGeolocationFacade(context, this)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private val mainHandler = Handler(Looper.getMainLooper())
|
|
69
|
+
private val trackedActivities = mutableSetOf<Int>()
|
|
70
|
+
private var lifecycleObserverRegistered = false
|
|
71
|
+
private var activityCallbacksRegistered = false
|
|
72
|
+
private var facadeDestroyed = false
|
|
73
|
+
|
|
74
|
+
// ---- Callback lists ----
|
|
75
|
+
|
|
76
|
+
private val locationCallbacks = CopyOnWriteArrayList<(Location) -> Unit>()
|
|
77
|
+
private val stationaryCallbacks = CopyOnWriteArrayList<(StationaryLocation) -> Unit>()
|
|
78
|
+
private val activityCallbacks = CopyOnWriteArrayList<(Activity) -> Unit>()
|
|
79
|
+
private val startCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
80
|
+
private val stopCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
81
|
+
private val errorCallbacks = CopyOnWriteArrayList<(BackgroundGeolocationError) -> Unit>()
|
|
82
|
+
private val authorizationCallbacks = CopyOnWriteArrayList<(AuthorizationStatus) -> Unit>()
|
|
83
|
+
private val foregroundCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
84
|
+
private val backgroundCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
85
|
+
private val abortRequestedCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
86
|
+
private val httpAuthorizationCallbacks = CopyOnWriteArrayList<() -> Unit>()
|
|
87
|
+
|
|
88
|
+
init {
|
|
89
|
+
NitroModules.applicationContext?.currentActivity?.let { currentActivity ->
|
|
90
|
+
trackedActivities.add(System.identityHashCode(currentActivity))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
mainHandler.post {
|
|
94
|
+
if (!lifecycleObserverRegistered) {
|
|
95
|
+
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
|
|
96
|
+
lifecycleObserverRegistered = true
|
|
97
|
+
}
|
|
98
|
+
if (!activityCallbacksRegistered) {
|
|
99
|
+
application.registerActivityLifecycleCallbacks(this)
|
|
100
|
+
activityCallbacksRegistered = true
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ================================================================
|
|
106
|
+
// HybridNitroBackgroundGeolocationSpec — Lifecycle
|
|
107
|
+
// ================================================================
|
|
108
|
+
|
|
109
|
+
override fun configure(options: ConfigureOptions): Promise<Unit> {
|
|
110
|
+
return Promise.parallel {
|
|
111
|
+
val resolvedConfig = Config(facade.config)
|
|
112
|
+
ConfigMapper.applyNativeConfig(resolvedConfig, options)
|
|
113
|
+
|
|
114
|
+
// The library always owns the headless task name. The JS side
|
|
115
|
+
// may or may not have a handler registered against it; if no
|
|
116
|
+
// handler is bound, the headless runner is a safe no-op.
|
|
117
|
+
HeadlessTaskRegistry.setTaskName(context, LIB_TASK_NAME)
|
|
118
|
+
facade.reconfigure(resolvedConfig)
|
|
119
|
+
if (facade.isRunning) {
|
|
120
|
+
facade.registerHeadlessTask(ReactNativeHeadlessTaskRunner::class.java.name)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
override fun start(): Promise<Unit> {
|
|
126
|
+
return Promise.parallel {
|
|
127
|
+
facade.start()
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
override fun stop(): Promise<Unit> {
|
|
132
|
+
return Promise.parallel {
|
|
133
|
+
facade.stop()
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ================================================================
|
|
138
|
+
// Location
|
|
139
|
+
// ================================================================
|
|
140
|
+
|
|
141
|
+
override fun getCurrentLocation(options: LocationOptions): Promise<Location> {
|
|
142
|
+
return Promise.parallel {
|
|
143
|
+
val timeout = options.timeout?.toInt() ?: 30000
|
|
144
|
+
val maximumAge = options.maximumAge?.toLong() ?: 0L
|
|
145
|
+
val enableHighAccuracy = options.enableHighAccuracy ?: false
|
|
146
|
+
val bgLocation = facade.getCurrentLocation(timeout, maximumAge, enableHighAccuracy)
|
|
147
|
+
ConfigMapper.toJsLocation(bgLocation)
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
override fun getStationaryLocation(): Promise<StationaryLocation?> {
|
|
152
|
+
return Promise.parallel {
|
|
153
|
+
val bgLocation = facade.stationaryLocation
|
|
154
|
+
bgLocation?.let { ConfigMapper.toJsStationaryLocation(it) }
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// ================================================================
|
|
159
|
+
// Status
|
|
160
|
+
// ================================================================
|
|
161
|
+
|
|
162
|
+
override fun checkStatus(): Promise<ServiceStatus> {
|
|
163
|
+
return Promise.parallel {
|
|
164
|
+
val isRunning = facade.isRunning
|
|
165
|
+
val locationServicesEnabled = try {
|
|
166
|
+
facade.locationServicesEnabled()
|
|
167
|
+
} catch (e: PluginException) {
|
|
168
|
+
false
|
|
169
|
+
}
|
|
170
|
+
val authStatus = when (facade.authorizationStatus) {
|
|
171
|
+
BackgroundGeolocationFacade.AUTHORIZATION_AUTHORIZED -> AuthorizationStatus.AUTHORIZED
|
|
172
|
+
else -> AuthorizationStatus.NOT_AUTHORIZED
|
|
173
|
+
}
|
|
174
|
+
ServiceStatus(
|
|
175
|
+
isRunning = isRunning,
|
|
176
|
+
locationServicesEnabled = locationServicesEnabled,
|
|
177
|
+
authorization = authStatus
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
override fun getConfig(): Promise<ConfigureOptions> {
|
|
183
|
+
return Promise.parallel {
|
|
184
|
+
val nativeConfig = facade.config
|
|
185
|
+
ConfigMapper.toJsConfig(nativeConfig)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
override fun showAppSettings() {
|
|
190
|
+
BackgroundGeolocationFacade.showAppSettings(context)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
override fun showLocationSettings() {
|
|
194
|
+
BackgroundGeolocationFacade.showLocationSettings(context)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// ================================================================
|
|
198
|
+
// Storage
|
|
199
|
+
// ================================================================
|
|
200
|
+
|
|
201
|
+
override fun getLocations(): Promise<Array<Location>> {
|
|
202
|
+
return Promise.parallel {
|
|
203
|
+
facade.locations.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
override fun getValidLocations(): Promise<Array<Location>> {
|
|
208
|
+
return Promise.parallel {
|
|
209
|
+
facade.validLocations.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
override fun getValidLocationsAndDelete(): Promise<Array<Location>> {
|
|
214
|
+
return Promise.parallel {
|
|
215
|
+
facade.validLocationsAndDelete.map { ConfigMapper.toJsLocation(it) }.toTypedArray()
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
override fun deleteLocation(locationId: Double): Promise<Unit> {
|
|
220
|
+
return Promise.parallel {
|
|
221
|
+
facade.deleteLocation(locationId.toLong())
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
override fun deleteAllLocations(): Promise<Unit> {
|
|
226
|
+
return Promise.parallel {
|
|
227
|
+
facade.deleteAllLocations()
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// ================================================================
|
|
232
|
+
// Sync
|
|
233
|
+
// ================================================================
|
|
234
|
+
|
|
235
|
+
override fun forceSync(): Promise<Unit> {
|
|
236
|
+
return Promise.parallel {
|
|
237
|
+
facade.forceSync()
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// ================================================================
|
|
242
|
+
// Logging
|
|
243
|
+
// ================================================================
|
|
244
|
+
|
|
245
|
+
override fun getLogEntries(limit: Double, fromId: Double, minLevel: NativeLogLevel): Promise<Array<LogEntry>> {
|
|
246
|
+
return Promise.parallel {
|
|
247
|
+
val levelName = when (minLevel) {
|
|
248
|
+
NativeLogLevel.TRACEVALUE -> "TRACE"
|
|
249
|
+
NativeLogLevel.DEBUGVALUE -> "DEBUG"
|
|
250
|
+
NativeLogLevel.INFOVALUE -> "INFO"
|
|
251
|
+
NativeLogLevel.WARNVALUE -> "WARN"
|
|
252
|
+
NativeLogLevel.ERRORVALUE -> "ERROR"
|
|
253
|
+
}
|
|
254
|
+
val entries = facade.getLogEntries(limit.toInt(), fromId.toInt(), levelName)
|
|
255
|
+
?: emptyList()
|
|
256
|
+
entries.mapNotNull { it?.let(ConfigMapper::toJsLogEntry) }.toTypedArray()
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// ================================================================
|
|
261
|
+
// Event Subscriptions
|
|
262
|
+
// ================================================================
|
|
263
|
+
|
|
264
|
+
override fun onLocation(callback: (location: Location) -> Unit): () -> Unit {
|
|
265
|
+
locationCallbacks.add(callback)
|
|
266
|
+
return {
|
|
267
|
+
locationCallbacks.remove(callback)
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
override fun onStationary(callback: (location: StationaryLocation) -> Unit): () -> Unit {
|
|
272
|
+
stationaryCallbacks.add(callback)
|
|
273
|
+
return {
|
|
274
|
+
stationaryCallbacks.remove(callback)
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
override fun onActivity(callback: (activity: Activity) -> Unit): () -> Unit {
|
|
279
|
+
activityCallbacks.add(callback)
|
|
280
|
+
return {
|
|
281
|
+
activityCallbacks.remove(callback)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
override fun onStart(callback: () -> Unit): () -> Unit {
|
|
286
|
+
startCallbacks.add(callback)
|
|
287
|
+
return {
|
|
288
|
+
startCallbacks.remove(callback)
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
override fun onStop(callback: () -> Unit): () -> Unit {
|
|
293
|
+
stopCallbacks.add(callback)
|
|
294
|
+
return {
|
|
295
|
+
stopCallbacks.remove(callback)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
override fun onError(callback: (error: BackgroundGeolocationError) -> Unit): () -> Unit {
|
|
300
|
+
errorCallbacks.add(callback)
|
|
301
|
+
return {
|
|
302
|
+
errorCallbacks.remove(callback)
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
override fun onAuthorization(callback: (status: AuthorizationStatus) -> Unit): () -> Unit {
|
|
307
|
+
authorizationCallbacks.add(callback)
|
|
308
|
+
return {
|
|
309
|
+
authorizationCallbacks.remove(callback)
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
override fun onForeground(callback: () -> Unit): () -> Unit {
|
|
314
|
+
foregroundCallbacks.add(callback)
|
|
315
|
+
return {
|
|
316
|
+
foregroundCallbacks.remove(callback)
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
override fun onBackground(callback: () -> Unit): () -> Unit {
|
|
321
|
+
backgroundCallbacks.add(callback)
|
|
322
|
+
return {
|
|
323
|
+
backgroundCallbacks.remove(callback)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
override fun onAbortRequested(callback: () -> Unit): () -> Unit {
|
|
328
|
+
abortRequestedCallbacks.add(callback)
|
|
329
|
+
return {
|
|
330
|
+
abortRequestedCallbacks.remove(callback)
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
override fun onHttpAuthorization(callback: () -> Unit): () -> Unit {
|
|
335
|
+
httpAuthorizationCallbacks.add(callback)
|
|
336
|
+
return {
|
|
337
|
+
httpAuthorizationCallbacks.remove(callback)
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
override fun removeAllListeners() {
|
|
342
|
+
locationCallbacks.clear()
|
|
343
|
+
stationaryCallbacks.clear()
|
|
344
|
+
activityCallbacks.clear()
|
|
345
|
+
startCallbacks.clear()
|
|
346
|
+
stopCallbacks.clear()
|
|
347
|
+
errorCallbacks.clear()
|
|
348
|
+
authorizationCallbacks.clear()
|
|
349
|
+
foregroundCallbacks.clear()
|
|
350
|
+
backgroundCallbacks.clear()
|
|
351
|
+
abortRequestedCallbacks.clear()
|
|
352
|
+
httpAuthorizationCallbacks.clear()
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// ================================================================
|
|
356
|
+
// Lifecycle observer (foreground/background/destroy)
|
|
357
|
+
// ================================================================
|
|
358
|
+
|
|
359
|
+
override fun onStart(owner: LifecycleOwner) {
|
|
360
|
+
Log.d(TAG, "App entered foreground")
|
|
361
|
+
facadeDestroyed = false
|
|
362
|
+
facade.resume()
|
|
363
|
+
foregroundCallbacks.forEach { it() }
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
override fun onStop(owner: LifecycleOwner) {
|
|
367
|
+
Log.d(TAG, "App entered background")
|
|
368
|
+
facade.pause()
|
|
369
|
+
backgroundCallbacks.forEach { it() }
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
override fun dispose() {
|
|
373
|
+
try {
|
|
374
|
+
mainHandler.post {
|
|
375
|
+
unregisterObservers()
|
|
376
|
+
destroyFacade()
|
|
377
|
+
}
|
|
378
|
+
} catch (_: Throwable) {
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// ================================================================
|
|
383
|
+
// PluginDelegate implementation
|
|
384
|
+
// ================================================================
|
|
385
|
+
|
|
386
|
+
override fun onLocationChanged(location: BackgroundLocation) {
|
|
387
|
+
val jsLocation = ConfigMapper.toJsLocation(location)
|
|
388
|
+
locationCallbacks.forEach { it(jsLocation) }
|
|
389
|
+
fireHeadlessTask("location", location)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
override fun onStationaryChanged(location: BackgroundLocation) {
|
|
393
|
+
val jsLocation = ConfigMapper.toJsStationaryLocation(location)
|
|
394
|
+
stationaryCallbacks.forEach { it(jsLocation) }
|
|
395
|
+
fireHeadlessTask("stationary", location)
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
override fun onActivityChanged(activity: BackgroundActivity) {
|
|
399
|
+
val jsActivity = ConfigMapper.toJsActivity(activity)
|
|
400
|
+
activityCallbacks.forEach { it(jsActivity) }
|
|
401
|
+
fireHeadlessActivityTask(activity)
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
override fun onServiceStatusChanged(status: Int) {
|
|
405
|
+
when (status) {
|
|
406
|
+
BackgroundGeolocationFacade.SERVICE_STARTED -> {
|
|
407
|
+
startCallbacks.forEach { it() }
|
|
408
|
+
}
|
|
409
|
+
BackgroundGeolocationFacade.SERVICE_STOPPED -> {
|
|
410
|
+
stopCallbacks.forEach { it() }
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
override fun onAuthorizationChanged(authStatus: Int) {
|
|
416
|
+
val status = when (authStatus) {
|
|
417
|
+
BackgroundGeolocationFacade.AUTHORIZATION_AUTHORIZED -> AuthorizationStatus.AUTHORIZED
|
|
418
|
+
else -> AuthorizationStatus.NOT_AUTHORIZED
|
|
419
|
+
}
|
|
420
|
+
authorizationCallbacks.forEach { it(status) }
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
override fun onError(error: PluginException) {
|
|
424
|
+
val jsError = BackgroundGeolocationError(
|
|
425
|
+
code = (error.code ?: 0).toDouble(),
|
|
426
|
+
message = error.message ?: "Unknown error"
|
|
427
|
+
)
|
|
428
|
+
errorCallbacks.forEach { it(jsError) }
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
override fun onAbortRequested() {
|
|
432
|
+
abortRequestedCallbacks.forEach { it() }
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
override fun onHttpAuthorization() {
|
|
436
|
+
httpAuthorizationCallbacks.forEach { it() }
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// ================================================================
|
|
440
|
+
// Headless task helper
|
|
441
|
+
// ================================================================
|
|
442
|
+
|
|
443
|
+
private fun fireHeadlessTask(eventName: String, location: BackgroundLocation) {
|
|
444
|
+
try {
|
|
445
|
+
val params = JSONObject().apply {
|
|
446
|
+
put("id", location.locationId)
|
|
447
|
+
put("provider", location.provider)
|
|
448
|
+
put("locationProvider", location.locationProvider)
|
|
449
|
+
put("time", location.time)
|
|
450
|
+
put("latitude", location.latitude)
|
|
451
|
+
put("longitude", location.longitude)
|
|
452
|
+
put("accuracy", location.accuracy)
|
|
453
|
+
put("speed", location.speed)
|
|
454
|
+
put("altitude", location.altitude)
|
|
455
|
+
if (location.hasVerticalAccuracy()) {
|
|
456
|
+
put("altitudeAccuracy", location.verticalAccuracy)
|
|
457
|
+
}
|
|
458
|
+
put("bearing", location.bearing)
|
|
459
|
+
put("isFromMockProvider", location.isFromMockProvider)
|
|
460
|
+
put("mockLocationsEnabled", location.areMockLocationsEnabled())
|
|
461
|
+
if (eventName == "stationary") {
|
|
462
|
+
put("radius", location.radius)
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
val intent = HeadlessTaskService.createIntent(
|
|
466
|
+
context,
|
|
467
|
+
LIB_TASK_NAME,
|
|
468
|
+
eventName,
|
|
469
|
+
params.toString()
|
|
470
|
+
)
|
|
471
|
+
context.startService(intent)
|
|
472
|
+
} catch (e: Exception) {
|
|
473
|
+
Log.e(TAG, "Failed to fire headless task", e)
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
private fun fireHeadlessActivityTask(activity: BackgroundActivity) {
|
|
478
|
+
try {
|
|
479
|
+
val params = JSONObject().apply {
|
|
480
|
+
put("confidence", activity.confidence)
|
|
481
|
+
put("type", BackgroundActivity.getActivityString(activity.type))
|
|
482
|
+
}
|
|
483
|
+
val intent = HeadlessTaskService.createIntent(
|
|
484
|
+
context,
|
|
485
|
+
LIB_TASK_NAME,
|
|
486
|
+
"activity",
|
|
487
|
+
params.toString()
|
|
488
|
+
)
|
|
489
|
+
context.startService(intent)
|
|
490
|
+
} catch (e: Exception) {
|
|
491
|
+
Log.e(TAG, "Failed to fire headless activity task", e)
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
private fun destroyFacade() {
|
|
496
|
+
if (facadeDestroyed) return
|
|
497
|
+
facadeDestroyed = true
|
|
498
|
+
Log.d(TAG, "App activity destroyed")
|
|
499
|
+
facade.destroy()
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
private fun unregisterObservers() {
|
|
503
|
+
if (lifecycleObserverRegistered) {
|
|
504
|
+
ProcessLifecycleOwner.get().lifecycle.removeObserver(this)
|
|
505
|
+
lifecycleObserverRegistered = false
|
|
506
|
+
}
|
|
507
|
+
if (activityCallbacksRegistered) {
|
|
508
|
+
application.unregisterActivityLifecycleCallbacks(this)
|
|
509
|
+
activityCallbacksRegistered = false
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
override fun onActivityCreated(activity: android.app.Activity, savedInstanceState: Bundle?) {
|
|
514
|
+
trackedActivities.add(System.identityHashCode(activity))
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
override fun onActivityStarted(activity: android.app.Activity) {
|
|
518
|
+
trackedActivities.add(System.identityHashCode(activity))
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
override fun onActivityResumed(activity: android.app.Activity) {
|
|
522
|
+
trackedActivities.add(System.identityHashCode(activity))
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
override fun onActivityPaused(activity: android.app.Activity) = Unit
|
|
526
|
+
|
|
527
|
+
override fun onActivityStopped(activity: android.app.Activity) = Unit
|
|
528
|
+
|
|
529
|
+
override fun onActivitySaveInstanceState(activity: android.app.Activity, outState: Bundle) = Unit
|
|
530
|
+
|
|
531
|
+
override fun onActivityDestroyed(activity: android.app.Activity) {
|
|
532
|
+
trackedActivities.remove(System.identityHashCode(activity))
|
|
533
|
+
if (activity.isChangingConfigurations) return
|
|
534
|
+
if (trackedActivities.isEmpty()) {
|
|
535
|
+
destroyFacade()
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.margelo.nitro.nitrobackgroundgeolocation
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
7
|
+
|
|
8
|
+
class NitroBackgroundGeolocationPackage : BaseReactPackage() {
|
|
9
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
14
|
+
return ReactModuleInfoProvider { HashMap() }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
companion object {
|
|
18
|
+
init {
|
|
19
|
+
System.loadLibrary("nitrobackgroundgeolocation")
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.margelo.nitro.nitrobackgroundgeolocation
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle
|
|
4
|
+
import com.marianhello.bgloc.headless.AbstractTaskRunner
|
|
5
|
+
import com.marianhello.bgloc.headless.Task
|
|
6
|
+
import org.json.JSONArray
|
|
7
|
+
import org.json.JSONObject
|
|
8
|
+
|
|
9
|
+
class ReactNativeHeadlessTaskRunner : AbstractTaskRunner() {
|
|
10
|
+
override fun runTask(task: Task) {
|
|
11
|
+
val context = mContext ?: run {
|
|
12
|
+
task.onError("Cannot run headless task without Android context.")
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
val taskName = HeadlessTaskRegistry.getTaskName(context)
|
|
16
|
+
if (taskName.isNullOrBlank()) {
|
|
17
|
+
task.onError("Cannot run headless task because no task name is registered.")
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
val taskBundle = task.bundle
|
|
23
|
+
val params = bundleToJson(taskBundle.getBundle("params")).toString()
|
|
24
|
+
val intent = HeadlessTaskService.createIntent(
|
|
25
|
+
context,
|
|
26
|
+
taskName,
|
|
27
|
+
task.name,
|
|
28
|
+
params
|
|
29
|
+
)
|
|
30
|
+
context.startService(intent)
|
|
31
|
+
task.onResult(params)
|
|
32
|
+
} catch (e: Exception) {
|
|
33
|
+
task.onError("Failed to run React Native headless task: ${e.message}")
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private fun bundleToJson(bundle: Bundle?): JSONObject {
|
|
38
|
+
val json = JSONObject()
|
|
39
|
+
if (bundle == null) return json
|
|
40
|
+
|
|
41
|
+
for (key in bundle.keySet()) {
|
|
42
|
+
json.put(key, bundleValueToJson(bundle.get(key)))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return json
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private fun bundleValueToJson(value: Any?): Any? {
|
|
49
|
+
return when (value) {
|
|
50
|
+
null -> JSONObject.NULL
|
|
51
|
+
is Bundle -> bundleToJson(value)
|
|
52
|
+
is Array<*> -> JSONArray(value.map { bundleValueToJson(it) })
|
|
53
|
+
is BooleanArray -> JSONArray(value.map { it })
|
|
54
|
+
is IntArray -> JSONArray(value.map { it })
|
|
55
|
+
is LongArray -> JSONArray(value.map { it })
|
|
56
|
+
is FloatArray -> JSONArray(value.map { it })
|
|
57
|
+
is DoubleArray -> JSONArray(value.map { it })
|
|
58
|
+
is ArrayList<*> -> JSONArray(value.map { bundleValueToJson(it) })
|
|
59
|
+
else -> value
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|