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,650 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURBackgroundGeolocationFacade.m
|
|
3
|
+
//
|
|
4
|
+
// Created by Marian Hello on 04/06/16.
|
|
5
|
+
// Version 2.0.0
|
|
6
|
+
//
|
|
7
|
+
// According to apache license
|
|
8
|
+
//
|
|
9
|
+
// This is class is using code from christocracy cordova-plugin-background-geolocation plugin
|
|
10
|
+
// https://github.com/christocracy/cordova-plugin-background-geolocation
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
#import <UIKit/UIKit.h>
|
|
14
|
+
#import <CoreLocation/CoreLocation.h>
|
|
15
|
+
#import <AudioToolbox/AudioToolbox.h>
|
|
16
|
+
#import "MAURBackgroundGeolocationFacade.h"
|
|
17
|
+
#import "MAURPostLocationTask.h"
|
|
18
|
+
#import "MAURSQLiteConfigurationDAO.h"
|
|
19
|
+
#import "MAURSQLiteLocationDAO.h"
|
|
20
|
+
#import "MAURBackgroundTaskManager.h"
|
|
21
|
+
#import "MAURLogging.h"
|
|
22
|
+
#import "FMDBLogger.h"
|
|
23
|
+
#import "MAURLogReader.h"
|
|
24
|
+
#import "MAURLocationManager.h"
|
|
25
|
+
#import "MAURActivityLocationProvider.h"
|
|
26
|
+
#import "MAURDistanceFilterLocationProvider.h"
|
|
27
|
+
#import "MAURRawLocationProvider.h"
|
|
28
|
+
#import "MAURUncaughtExceptionLogger.h"
|
|
29
|
+
#import "MAURPostLocationTask.h"
|
|
30
|
+
#import "INTULocationManager.h"
|
|
31
|
+
|
|
32
|
+
// error messages
|
|
33
|
+
#define CONFIGURE_ERROR_MSG "Configuration error."
|
|
34
|
+
#define SERVICE_ERROR_MSG "Cannot start service error."
|
|
35
|
+
#define UNKNOWN_LOCATION_PROVIDER_MSG "Unknown location provider."
|
|
36
|
+
|
|
37
|
+
// Position errors
|
|
38
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/PositionError
|
|
39
|
+
#define PERMISSION_DENIED 1
|
|
40
|
+
#define POSITION_UNAVAILABLE 2
|
|
41
|
+
#define TIMEOUT 3
|
|
42
|
+
|
|
43
|
+
static NSString * const BGGeolocationDomain = @"com.marianhello";
|
|
44
|
+
static NSString * const TAG = @"BgGeo";
|
|
45
|
+
|
|
46
|
+
FMDBLogger *sqliteLogger;
|
|
47
|
+
|
|
48
|
+
@interface MAURBackgroundGeolocationFacade () <MAURProviderDelegate, MAURPostLocationTaskDelegate>
|
|
49
|
+
@end
|
|
50
|
+
|
|
51
|
+
@implementation MAURBackgroundGeolocationFacade {
|
|
52
|
+
BOOL isStarted;
|
|
53
|
+
MAUROperationalMode operationMode;
|
|
54
|
+
|
|
55
|
+
UILocalNotification *localNotification;
|
|
56
|
+
|
|
57
|
+
// configurable options
|
|
58
|
+
MAURConfig *_config;
|
|
59
|
+
|
|
60
|
+
MAURLocation *stationaryLocation;
|
|
61
|
+
MAURAbstractLocationProvider<MAURLocationProvider> *locationProvider;
|
|
62
|
+
MAURPostLocationTask *postLocationTask;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
+ (instancetype)sharedInstance
|
|
66
|
+
{
|
|
67
|
+
static MAURBackgroundGeolocationFacade *sharedInstance = nil;
|
|
68
|
+
static dispatch_once_t onceToken;
|
|
69
|
+
dispatch_once(&onceToken, ^{
|
|
70
|
+
sharedInstance = [[self alloc] init];
|
|
71
|
+
});
|
|
72
|
+
return sharedInstance;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
- (instancetype) init
|
|
77
|
+
{
|
|
78
|
+
self = [super init];
|
|
79
|
+
|
|
80
|
+
if (self == nil) {
|
|
81
|
+
return self;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[DDLog addLogger:[DDASLLogger sharedInstance] withLevel:DDLogLevelInfo];
|
|
85
|
+
[DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelDebug];
|
|
86
|
+
|
|
87
|
+
sqliteLogger = [[FMDBLogger alloc] initWithLogDirectory:[self loggerDirectory]];
|
|
88
|
+
sqliteLogger.saveThreshold = 1;
|
|
89
|
+
sqliteLogger.saveInterval = 0;
|
|
90
|
+
sqliteLogger.maxAge = 60 * 60 * 24 * 7; // 7 days
|
|
91
|
+
sqliteLogger.deleteInterval = 60 * 60 * 24; // 1 day
|
|
92
|
+
sqliteLogger.deleteOnEverySave = NO;
|
|
93
|
+
|
|
94
|
+
[DDLog addLogger:sqliteLogger withLevel:DDLogLevelDebug];
|
|
95
|
+
|
|
96
|
+
MAHUncaughtExceptionLogger *logger = mah_get_uncaught_exception_logger();
|
|
97
|
+
logger->setEnabled(YES);
|
|
98
|
+
|
|
99
|
+
postLocationTask = [[MAURPostLocationTask alloc] init];
|
|
100
|
+
postLocationTask.delegate = self;
|
|
101
|
+
|
|
102
|
+
localNotification = [[UILocalNotification alloc] init];
|
|
103
|
+
localNotification.timeZone = [NSTimeZone defaultTimeZone];
|
|
104
|
+
|
|
105
|
+
isStarted = NO;
|
|
106
|
+
|
|
107
|
+
return self;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* configure manager
|
|
112
|
+
* @param {Config} configuration
|
|
113
|
+
* @param {NSError} optional error
|
|
114
|
+
*/
|
|
115
|
+
- (BOOL) configure:(MAURConfig*)config error:(NSError * __autoreleasing *)outError
|
|
116
|
+
{
|
|
117
|
+
__block NSError *error = nil;
|
|
118
|
+
|
|
119
|
+
MAURConfig *currentConfig = [self getConfig];
|
|
120
|
+
_config = [MAURConfig merge:currentConfig withConfig:config];
|
|
121
|
+
|
|
122
|
+
DDLogInfo(@"%@ #configure: %@", TAG, _config);
|
|
123
|
+
|
|
124
|
+
postLocationTask.config = _config;
|
|
125
|
+
|
|
126
|
+
MAURSQLiteConfigurationDAO* configDAO = [MAURSQLiteConfigurationDAO sharedInstance];
|
|
127
|
+
[configDAO persistConfiguration:_config];
|
|
128
|
+
|
|
129
|
+
// ios 8 requires permissions to send local-notifications
|
|
130
|
+
if ([_config isDebugging]) {
|
|
131
|
+
[self runOnMainThread:^{
|
|
132
|
+
UIApplication *app = [UIApplication sharedApplication];
|
|
133
|
+
if ([[UIApplication sharedApplication]respondsToSelector:@selector(currentUserNotificationSettings)]) {
|
|
134
|
+
UIUserNotificationType wantedTypes = UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert;
|
|
135
|
+
UIUserNotificationSettings *currentSettings = [app currentUserNotificationSettings];
|
|
136
|
+
if (!currentSettings || (currentSettings.types != wantedTypes)) {
|
|
137
|
+
if ([app respondsToSelector:@selector(registerUserNotificationSettings:)]) {
|
|
138
|
+
[app registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:wantedTypes categories:nil]];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (isStarted) {
|
|
146
|
+
// Note: CLLocationManager must be created on a thread with an active run loop (main thread)
|
|
147
|
+
[self runOnMainThread:^{
|
|
148
|
+
|
|
149
|
+
// requesting new provider
|
|
150
|
+
if (![currentConfig.locationProvider isEqual:_config.locationProvider]) {
|
|
151
|
+
[locationProvider onDestroy]; // destroy current provider
|
|
152
|
+
locationProvider = [self getProvider:_config.locationProvider.intValue error:&error];
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (locationProvider == nil) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// trap configuration errors
|
|
160
|
+
if (![locationProvider onConfigure:_config error:&error]) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
isStarted = [locationProvider onStart:&error];
|
|
165
|
+
locationProvider.delegate = self;
|
|
166
|
+
}];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (error != nil) {
|
|
170
|
+
if (outError != nil) {
|
|
171
|
+
NSDictionary *userInfo = @{
|
|
172
|
+
NSLocalizedDescriptionKey: NSLocalizedString(@CONFIGURE_ERROR_MSG, nil),
|
|
173
|
+
NSUnderlyingErrorKey : error
|
|
174
|
+
};
|
|
175
|
+
*outError = [NSError errorWithDomain:BGGeolocationDomain code:MAURBGConfigureError userInfo:userInfo];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return NO;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return YES;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Turn on background geolocation
|
|
186
|
+
* in case of failure it calls error callback from configure method
|
|
187
|
+
* may fire two callback when location services are disabled and when authorization failed
|
|
188
|
+
*/
|
|
189
|
+
- (BOOL) start:(NSError * __autoreleasing *)outError
|
|
190
|
+
{
|
|
191
|
+
DDLogInfo(@"%@ #start: %d", TAG, isStarted);
|
|
192
|
+
|
|
193
|
+
if (isStarted) {
|
|
194
|
+
return NO;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
__block NSError *error = nil;
|
|
198
|
+
MAURConfig *config = [self getConfig];
|
|
199
|
+
|
|
200
|
+
postLocationTask.config = config;
|
|
201
|
+
[postLocationTask start];
|
|
202
|
+
|
|
203
|
+
// Note: CLLocationManager must be created on a thread with an active run loop (main thread)
|
|
204
|
+
[self runOnMainThread:^{
|
|
205
|
+
locationProvider = [self getProvider:config.locationProvider.intValue error:&error];
|
|
206
|
+
|
|
207
|
+
if (locationProvider == nil) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// trap configuration errors
|
|
212
|
+
if (![locationProvider onConfigure:config error:&error]) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
isStarted = [locationProvider onStart:&error];
|
|
217
|
+
locationProvider.delegate = self;
|
|
218
|
+
}];
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
if (!isStarted) {
|
|
222
|
+
if (outError != nil) {
|
|
223
|
+
*outError = error;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return NO;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return isStarted;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Turn off background geolocation
|
|
234
|
+
*/
|
|
235
|
+
- (BOOL) stop:(NSError * __autoreleasing *)outError
|
|
236
|
+
{
|
|
237
|
+
DDLogInfo(@"%@ #stop", TAG);
|
|
238
|
+
__block BOOL didStop = YES;
|
|
239
|
+
|
|
240
|
+
if (!isStarted) {
|
|
241
|
+
return YES;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
[postLocationTask stop];
|
|
245
|
+
|
|
246
|
+
[self runOnMainThread:^{
|
|
247
|
+
didStop = [locationProvider onStop:outError];
|
|
248
|
+
isStarted = !didStop;
|
|
249
|
+
}];
|
|
250
|
+
|
|
251
|
+
return didStop;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* toggle between foreground and background operation mode
|
|
256
|
+
*/
|
|
257
|
+
- (void) switchMode:(MAUROperationalMode)mode
|
|
258
|
+
{
|
|
259
|
+
DDLogInfo(@"%@ #switchMode %lu", TAG, (unsigned long)mode);
|
|
260
|
+
|
|
261
|
+
operationMode = mode;
|
|
262
|
+
|
|
263
|
+
if (!isStarted) return;
|
|
264
|
+
|
|
265
|
+
if ([self getConfig].isDebugging) {
|
|
266
|
+
AudioServicesPlaySystemSound (operationMode == MAURForegroundMode ? paceChangeYesSound : paceChangeNoSound);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
[self runOnMainThread:^{
|
|
270
|
+
[locationProvider onSwitchMode:mode];
|
|
271
|
+
}];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
- (BOOL) locationServicesEnabled
|
|
275
|
+
{
|
|
276
|
+
if ([CLLocationManager respondsToSelector:@selector(locationServicesEnabled)]) { // iOS 4.x
|
|
277
|
+
return [CLLocationManager locationServicesEnabled];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return NO;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
- (MAURLocationAuthorizationStatus) authorizationStatus
|
|
284
|
+
{
|
|
285
|
+
CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
|
|
286
|
+
switch (authStatus) {
|
|
287
|
+
case kCLAuthorizationStatusNotDetermined:
|
|
288
|
+
return MAURLocationAuthorizationNotDetermined;
|
|
289
|
+
case kCLAuthorizationStatusRestricted:
|
|
290
|
+
case kCLAuthorizationStatusDenied:
|
|
291
|
+
return MAURLocationAuthorizationDenied;
|
|
292
|
+
case kCLAuthorizationStatusAuthorizedAlways:
|
|
293
|
+
return MAURLocationAuthorizationAlways;
|
|
294
|
+
case kCLAuthorizationStatusAuthorizedWhenInUse:
|
|
295
|
+
return MAURLocationAuthorizationForeground;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
- (BOOL) isStarted
|
|
300
|
+
{
|
|
301
|
+
return isStarted;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
- (MAURAbstractLocationProvider<MAURLocationProvider>*) getProvider:(int)providerId error:(NSError * __autoreleasing *)outError
|
|
305
|
+
{
|
|
306
|
+
NSDictionary *errorDictionary;
|
|
307
|
+
MAURAbstractLocationProvider<MAURLocationProvider> *locationProvider = nil;
|
|
308
|
+
switch (providerId) {
|
|
309
|
+
case DISTANCE_FILTER_PROVIDER:
|
|
310
|
+
locationProvider = [[MAURDistanceFilterLocationProvider alloc] init];
|
|
311
|
+
break;
|
|
312
|
+
case ACTIVITY_PROVIDER:
|
|
313
|
+
locationProvider = [[MAURActivityLocationProvider alloc] init];
|
|
314
|
+
break;
|
|
315
|
+
case RAW_PROVIDER:
|
|
316
|
+
locationProvider = [[MAURRawLocationProvider alloc] init];
|
|
317
|
+
break;
|
|
318
|
+
default:
|
|
319
|
+
if (outError != nil) {
|
|
320
|
+
errorDictionary = @{
|
|
321
|
+
NSLocalizedDescriptionKey: NSLocalizedString(@UNKNOWN_LOCATION_PROVIDER_MSG, nil),
|
|
322
|
+
};
|
|
323
|
+
*outError = [NSError errorWithDomain:BGGeolocationDomain code:MAURBGConfigureError userInfo:errorDictionary];
|
|
324
|
+
}
|
|
325
|
+
return nil;
|
|
326
|
+
}
|
|
327
|
+
[locationProvider onCreate];
|
|
328
|
+
return locationProvider;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
- (void) showAppSettings
|
|
332
|
+
{
|
|
333
|
+
[self runOnMainThread:^{
|
|
334
|
+
BOOL canGoToSettings = (UIApplicationOpenSettingsURLString != NULL);
|
|
335
|
+
if (canGoToSettings) {
|
|
336
|
+
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
|
|
337
|
+
[[UIApplication sharedApplication] openURL:settingsURL
|
|
338
|
+
options:@{}
|
|
339
|
+
completionHandler:nil];
|
|
340
|
+
}
|
|
341
|
+
}];
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
- (void) showLocationSettings
|
|
345
|
+
{
|
|
346
|
+
// NOOP - Since Apple started rejecting apps using non public url schemes
|
|
347
|
+
// https://github.com/mauron85/cordova-plugin-background-geolocation/issues/394
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
- (MAURLocation*) getStationaryLocation
|
|
351
|
+
{
|
|
352
|
+
return stationaryLocation;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
- (NSArray<MAURLocation*>*) getLocations
|
|
356
|
+
{
|
|
357
|
+
MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
358
|
+
return [locationDAO getAllLocations];
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
- (NSArray<MAURLocation*>*) getValidLocations
|
|
362
|
+
{
|
|
363
|
+
MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
364
|
+
return [locationDAO getValidLocations];
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
- (NSArray<MAURLocation*>*) getValidLocationsAndDelete
|
|
368
|
+
{
|
|
369
|
+
MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
370
|
+
return [locationDAO getLocationsForSync];
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
- (BOOL) deleteLocation:(NSNumber*)locationId error:(NSError * __autoreleasing *)outError
|
|
374
|
+
{
|
|
375
|
+
MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
376
|
+
return [locationDAO deleteLocation:locationId error:outError];
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
- (BOOL) deleteAllLocations:(NSError * __autoreleasing *)outError
|
|
380
|
+
{
|
|
381
|
+
MAURSQLiteLocationDAO* locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
382
|
+
return [locationDAO deleteAllLocations:outError];
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
- (MAURLocation*)getCurrentLocation:(int)timeout maximumAge:(long)maximumAge
|
|
386
|
+
enableHighAccuracy:(BOOL)enableHighAccuracy
|
|
387
|
+
error:(NSError * __autoreleasing *)outError
|
|
388
|
+
{
|
|
389
|
+
__block NSError *error = nil;
|
|
390
|
+
__block CLLocation *location = nil;
|
|
391
|
+
|
|
392
|
+
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
|
|
393
|
+
[self runOnMainThread:^{
|
|
394
|
+
CLLocation *currentLocation = [MAURLocationManager sharedInstance].locationManager.location;
|
|
395
|
+
if (currentLocation != nil) {
|
|
396
|
+
long locationAge = ceil(fabs([currentLocation.timestamp timeIntervalSinceNow]) * 1000);
|
|
397
|
+
if (locationAge <= maximumAge) {
|
|
398
|
+
location = currentLocation;
|
|
399
|
+
dispatch_semaphore_signal(sema);
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
INTULocationManager *locationManager = [INTULocationManager sharedInstance];
|
|
405
|
+
float timeoutInSeconds = ceil((float)timeout/1000);
|
|
406
|
+
[locationManager requestLocationWithDesiredAccuracy:enableHighAccuracy ? INTULocationAccuracyRoom : INTULocationAccuracyCity
|
|
407
|
+
timeout:timeoutInSeconds
|
|
408
|
+
delayUntilAuthorized:YES // This parameter is optional, defaults to NO if omitted
|
|
409
|
+
block:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
|
|
410
|
+
if (status == INTULocationStatusSuccess) {
|
|
411
|
+
// Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and
|
|
412
|
+
// currentLocation contains the device's current location.
|
|
413
|
+
location = currentLocation;
|
|
414
|
+
}
|
|
415
|
+
else if (status == INTULocationStatusTimedOut) {
|
|
416
|
+
// Wasn't able to locate the user with the requested accuracy within the timeout interval.
|
|
417
|
+
// However, currentLocation contains the best location available (if any) as of right now,
|
|
418
|
+
// and achievedAccuracy has info on the accuracy/recency of the location in currentLocation.
|
|
419
|
+
error = [NSError errorWithDomain:BGGeolocationDomain code:TIMEOUT userInfo:nil];
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
// An error occurred, more info is available by looking at the specific status returned.
|
|
423
|
+
error = [NSError errorWithDomain:BGGeolocationDomain code:POSITION_UNAVAILABLE userInfo:nil];
|
|
424
|
+
}
|
|
425
|
+
dispatch_semaphore_signal(sema);
|
|
426
|
+
}];
|
|
427
|
+
}];
|
|
428
|
+
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
|
|
429
|
+
|
|
430
|
+
if (location != nil) {
|
|
431
|
+
return [MAURLocation fromCLLocation:location];
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
if (outError != nil) {
|
|
435
|
+
*outError = error;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
return nil;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
- (MAURConfig*) getConfig
|
|
442
|
+
{
|
|
443
|
+
if (_config == nil) {
|
|
444
|
+
MAURSQLiteConfigurationDAO* configDAO = [MAURSQLiteConfigurationDAO sharedInstance];
|
|
445
|
+
_config = [configDAO retrieveConfiguration];
|
|
446
|
+
if (_config == nil) {
|
|
447
|
+
_config = [[MAURConfig alloc] initWithDefaults];
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return _config;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
- (NSArray*) getLogEntries:(NSInteger)limit
|
|
455
|
+
{
|
|
456
|
+
MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
|
|
457
|
+
return [logReader getEntries:limit fromLogEntryId:0 minLogLevel:DDLogFlagDebug];
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
- (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevelFromString:(NSString *)minLogLevel
|
|
461
|
+
{
|
|
462
|
+
MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
|
|
463
|
+
return [logReader getLogEntries:limit fromLogEntryId:entryId minLogLevelAsString:minLogLevel];
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
- (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevel:(DDLogFlag)minLogLevel
|
|
467
|
+
{
|
|
468
|
+
MAURLogReader *logReader = [[MAURLogReader alloc] initWithLogDirectory:[self loggerDirectory]];
|
|
469
|
+
NSArray *logs = [logReader getEntries:limit fromLogEntryId:entryId minLogLevel:minLogLevel];
|
|
470
|
+
return logs;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
- (void) forceSync
|
|
474
|
+
{
|
|
475
|
+
[postLocationTask sync];
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
- (void) notify:(NSString*)message
|
|
479
|
+
{
|
|
480
|
+
localNotification.fireDate = [NSDate date];
|
|
481
|
+
localNotification.alertBody = message;
|
|
482
|
+
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
-(void) runOnMainThread:(dispatch_block_t)completionHandle {
|
|
486
|
+
BOOL alreadyOnMainThread = [NSThread isMainThread];
|
|
487
|
+
// this check avoids possible deadlock resulting from
|
|
488
|
+
// calling dispatch_sync() on the same queue as current one
|
|
489
|
+
if (alreadyOnMainThread) {
|
|
490
|
+
// execute code in place
|
|
491
|
+
completionHandle();
|
|
492
|
+
} else {
|
|
493
|
+
// dispatch to main queue
|
|
494
|
+
dispatch_sync(dispatch_get_main_queue(), completionHandle);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
- (NSString *)loggerDirectory
|
|
499
|
+
{
|
|
500
|
+
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
|
|
501
|
+
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
|
|
502
|
+
|
|
503
|
+
return [basePath stringByAppendingPathComponent:@"SQLiteLogger"];
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
- (void) onStationaryChanged:(MAURLocation *)location
|
|
507
|
+
{
|
|
508
|
+
DDLogDebug(@"%@ #onStationaryChanged", TAG);
|
|
509
|
+
stationaryLocation = location;
|
|
510
|
+
|
|
511
|
+
[postLocationTask add:location];
|
|
512
|
+
|
|
513
|
+
MAURConfig *config = [self getConfig];
|
|
514
|
+
if ([config isDebugging]) {
|
|
515
|
+
double distanceFilter = [MAURLocationManager sharedInstance].distanceFilter;
|
|
516
|
+
[self notify:[NSString stringWithFormat:@"Stationary update: %s\nSPD: %0.0f | DF: %f | ACY: %0.0f | RAD: %0.0f",
|
|
517
|
+
((operationMode == MAURForegroundMode) ? "FG" : "BG"),
|
|
518
|
+
[location.speed doubleValue],
|
|
519
|
+
distanceFilter,
|
|
520
|
+
[location.accuracy doubleValue],
|
|
521
|
+
[location.radius doubleValue]
|
|
522
|
+
]];
|
|
523
|
+
|
|
524
|
+
AudioServicesPlaySystemSound (locationSyncSound);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
// Any javascript stationaryRegion event-listeners?
|
|
528
|
+
if (self.delegate && [self.delegate respondsToSelector:@selector(onStationaryChanged:)]) {
|
|
529
|
+
[self.delegate onStationaryChanged:location];
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
- (void) onLocationChanged:(MAURLocation *)location
|
|
534
|
+
{
|
|
535
|
+
DDLogDebug(@"%@ #onLocationChanged %@", TAG, location);
|
|
536
|
+
stationaryLocation = nil;
|
|
537
|
+
|
|
538
|
+
[postLocationTask add:location];
|
|
539
|
+
|
|
540
|
+
MAURConfig *config = [self getConfig];
|
|
541
|
+
if ([config isDebugging]) {
|
|
542
|
+
double distanceFilter = [MAURLocationManager sharedInstance].distanceFilter;
|
|
543
|
+
[self notify:[NSString stringWithFormat:@"Location update: %s\nSPD: %0.0f | DF: %f | ACY: %0.0f",
|
|
544
|
+
((operationMode == MAURForegroundMode) ? "FG" : "BG"),
|
|
545
|
+
[location.speed doubleValue],
|
|
546
|
+
distanceFilter,
|
|
547
|
+
[location.accuracy doubleValue]
|
|
548
|
+
]];
|
|
549
|
+
|
|
550
|
+
AudioServicesPlaySystemSound (locationSyncSound);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// Delegate to main module
|
|
554
|
+
if (self.delegate && [self.delegate respondsToSelector:@selector(onLocationChanged:)]) {
|
|
555
|
+
[self.delegate onLocationChanged:location];
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
- (void) onAuthorizationChanged:(MAURLocationAuthorizationStatus)authStatus
|
|
560
|
+
{
|
|
561
|
+
[self.delegate onAuthorizationChanged:authStatus];
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
- (void) onError:(NSError*)error
|
|
565
|
+
{
|
|
566
|
+
[self.delegate onError:error];
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
- (void) onLocationPause
|
|
570
|
+
{
|
|
571
|
+
[self.delegate onLocationPause];
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
- (void) onLocationResume
|
|
575
|
+
{
|
|
576
|
+
[self.delegate onLocationResume];
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
- (void) onActivityChanged:(MAURActivity *)activity
|
|
580
|
+
{
|
|
581
|
+
DDLogDebug(@"%@ #onActivityChanged %@", TAG, activity);
|
|
582
|
+
|
|
583
|
+
if ([self getConfig].isDebugging) {
|
|
584
|
+
[self notify:[NSString stringWithFormat:@"%@ activity detected: %@ activity, confidence: %@", TAG, activity.type, activity.confidence]];
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
[self.delegate onActivityChanged:activity];
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/**@
|
|
591
|
+
* If you don't stopMonitoring when application terminates, the app will be awoken still when a
|
|
592
|
+
* new location arrives, essentially monitoring the user's location even when they've killed the app.
|
|
593
|
+
* Might be desirable in certain apps.
|
|
594
|
+
*/
|
|
595
|
+
- (void) onAppTerminate
|
|
596
|
+
{
|
|
597
|
+
MAURConfig *config = [self getConfig];
|
|
598
|
+
if ([config stopOnTerminate]) {
|
|
599
|
+
DDLogInfo(@"%@ #onAppTerminate.", TAG);
|
|
600
|
+
[self stop:nil];
|
|
601
|
+
} else {
|
|
602
|
+
[locationProvider onTerminate];
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
- (void) dealloc
|
|
607
|
+
{
|
|
608
|
+
DDLogDebug(@"%@ #dealloc", TAG);
|
|
609
|
+
// currently noop
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
#pragma mark - Location transform
|
|
613
|
+
|
|
614
|
+
+ (void) setLocationTransform:(MAURLocationTransform _Nullable)transform
|
|
615
|
+
{
|
|
616
|
+
[MAURPostLocationTask setLocationTransform:transform];
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
+ (MAURLocationTransform _Nullable) locationTransform
|
|
620
|
+
{
|
|
621
|
+
return [MAURPostLocationTask locationTransform];
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
#pragma mark - MAURPostLocationTaskDelegate
|
|
625
|
+
|
|
626
|
+
- (void) postLocationTaskRequestedAbortUpdates:(MAURPostLocationTask *)task
|
|
627
|
+
{
|
|
628
|
+
if (_delegate && [_delegate respondsToSelector:@selector(onAbortRequested)])
|
|
629
|
+
{
|
|
630
|
+
// We have a delegate, tell it that there's a request.
|
|
631
|
+
// It will decide whether to stop or not.
|
|
632
|
+
[_delegate onAbortRequested];
|
|
633
|
+
}
|
|
634
|
+
else
|
|
635
|
+
{
|
|
636
|
+
// No delegate, we may be running in the background.
|
|
637
|
+
// Let's just stop.
|
|
638
|
+
[self stop:nil];
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
- (void) postLocationTaskHttpAuthorizationUpdates:(MAURPostLocationTask *)task
|
|
643
|
+
{
|
|
644
|
+
if (_delegate && [_delegate respondsToSelector:@selector(onHttpAuthorization)])
|
|
645
|
+
{
|
|
646
|
+
[_delegate onHttpAuthorization];
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
@end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURBackgroundSync.h
|
|
3
|
+
//
|
|
4
|
+
// Created by Marian Hello on 07/07/16.
|
|
5
|
+
// Copyright © 2016 mauron85. All rights reserved.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#ifndef MAURBackgroundSync_h
|
|
9
|
+
#define MAURBackgroundSync_h
|
|
10
|
+
|
|
11
|
+
#import <Foundation/Foundation.h>
|
|
12
|
+
|
|
13
|
+
@class MAURBackgroundSync;
|
|
14
|
+
|
|
15
|
+
@protocol MAURBackgroundSyncDelegate <NSObject>
|
|
16
|
+
|
|
17
|
+
@optional
|
|
18
|
+
- (void)backgroundSyncRequestedAbortUpdates:(MAURBackgroundSync * _Nonnull)task;
|
|
19
|
+
- (void)backgroundSyncHttpAuthorizationUpdates:(MAURBackgroundSync * _Nonnull)task;
|
|
20
|
+
|
|
21
|
+
@end
|
|
22
|
+
|
|
23
|
+
@interface MAURBackgroundSync : NSObject
|
|
24
|
+
|
|
25
|
+
@property (nonatomic, weak) id<MAURBackgroundSyncDelegate> _Nullable delegate;
|
|
26
|
+
|
|
27
|
+
- (instancetype) init;
|
|
28
|
+
- (NSString*) status;
|
|
29
|
+
- (void) sync:(NSString * _Nonnull)url withTemplate:(id)locationTemplate withHttpHeaders:(NSMutableDictionary * _Nullable)httpHeaders;
|
|
30
|
+
- (void) cancel;
|
|
31
|
+
|
|
32
|
+
@end
|
|
33
|
+
|
|
34
|
+
#endif /* MAURBackgroundSync_h */
|