@josuelmm/cordova-background-geolocation 2.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +23 -0
- package/CHANGELOG.md +787 -0
- package/CONTRIBUTORS.md +15 -0
- package/HISTORY.md +734 -0
- package/LICENSE +191 -0
- package/README.md +125 -0
- package/RELEASE.MD +5 -0
- package/android/CDVBackgroundGeolocation/src/main/AndroidManifest.xml +23 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +148 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/PluginRegistry.java +25 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/headless/JsEvaluatorTaskRunner.java +53 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +603 -0
- package/android/CDVBackgroundGeolocation/src/main/res/values/strings.xml +4 -0
- package/android/CDVBackgroundGeolocation/src/test/java/com/marianhello/ConfigMapperTest.java +208 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/BackgroundGeolocationFacadeTest.java +45 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/BatchManagerTest.java +570 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/ConfigTest.java +76 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/ContentProviderLocationDAOTest.java +437 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/DBLogReaderTest.java +95 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationContentProviderTest.java +159 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceProxyTest.java +161 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/LocationServiceTest.java +247 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteConfigurationDAOTest.java +200 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOTest.java +457 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteLocationDAOThreadTest.java +96 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/SQLiteOpenHelperTest.java +225 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/TestPluginDelegate.java +46 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/TestResourceResolver.java +14 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/MockLocationProvider.java +50 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/provider/TestLocationProviderFactory.java +17 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/sqlite/SQLiteOpenHelper10.java +92 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/test/LocationProviderTestCase.java +107 -0
- package/android/common/src/androidTest/java/com/marianhello/bgloc/test/TestConstants.java +5 -0
- package/android/common/src/main/AndroidManifest.xml +72 -0
- package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +523 -0
- package/android/common/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
- package/android/common/src/main/java/com/marianhello/bgloc/Config.java +652 -0
- package/android/common/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
- package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +224 -0
- package/android/common/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
- package/android/common/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
- package/android/common/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
- package/android/common/src/main/java/com/marianhello/bgloc/PostLocationTask.java +188 -0
- package/android/common/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +60 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
- package/android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +282 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +610 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
- package/android/common/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +145 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +749 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
- package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +130 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +278 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +249 -0
- package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
- package/android/common/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
- package/android/common/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
- package/android/common/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
- package/android/common/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
- package/android/common/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
- package/android/common/src/main/java/com/marianhello/utils/Convert.java +56 -0
- package/android/common/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
- package/android/common/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
- package/android/common/src/main/java/org/apache/commons/io/Charsets.java +153 -0
- package/android/common/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
- package/android/common/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
- package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
- package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
- package/android/common/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
- package/android/common/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
- package/android/common/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/common/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/common/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/common/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/common/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/common/src/main/res/values/strings.xml +4 -0
- package/android/common/src/main/res/xml/authenticator.xml +7 -0
- package/android/common/src/main/res/xml/syncadapter.xml +9 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ArrayListLocationTemplateTest.java +82 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/BackgroundLocationTest.java +128 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/ConfigTest.java +191 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/DBLogReaderTest.java +37 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HashMapLocationTemplateTest.java +216 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/HttpPostServiceTest.java +223 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/LocationTemplateFactoryTest.java +50 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/PostLocationTaskTest.java +180 -0
- package/android/common/src/test/java/com/marianhello/backgroundgeolocation/TestHelper.java +16 -0
- package/android/dependencies.gradle +13 -0
- package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.h +41 -0
- package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +526 -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 +60 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +638 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +185 -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 +514 -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 +287 -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 +250 -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 +475 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/CHANGELOG.md +2 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/LICENSE +21 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/README.md +135 -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/README.md +170 -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/ios/common/BackgroundGeolocation.xcodeproj/project.pbxproj +760 -0
- package/ios/common/BackgroundGeolocationTests/Info.plist +24 -0
- package/ios/common/BackgroundGeolocationTests/MAURBackgroundLocationTest.m +185 -0
- package/ios/common/BackgroundGeolocationTests/MAURConfigTest.m +161 -0
- package/ios/common/BackgroundGeolocationTests/MAURGeolocationOpenHelperTest.m +102 -0
- package/ios/common/BackgroundGeolocationTests/MAURLocationTest.m +216 -0
- package/ios/common/BackgroundGeolocationTests/MAURLocationUploaderTest.m +55 -0
- package/ios/common/BackgroundGeolocationTests/MAURLogReaderTest.m +43 -0
- package/ios/common/BackgroundGeolocationTests/MAURSQLiteConfigurationDAOTest.m +102 -0
- package/ios/common/BackgroundGeolocationTests/MAURSQLiteHelperTest.m +41 -0
- package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOTests.m +240 -0
- package/ios/common/BackgroundGeolocationTests/MAURSQLiteLocationDAOThreadTest.m +84 -0
- package/ios/common/BackgroundGeolocationTests/MAURSQLiteOpenHelperTest.m +144 -0
- package/ios/common/CONTRIBUTORS.md +10 -0
- package/ios/common/LICENSE +191 -0
- package/ios/common/README.md +7 -0
- package/ios/common/scripts/xcode-refactor.js +184 -0
- package/package.json +44 -0
- package/plugin.xml +355 -0
- package/www/BackgroundGeolocation.d.ts +910 -0
- package/www/BackgroundGeolocation.js +247 -0
- package/www/radio.js +177 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
package com.marianhello.bgloc.headless;
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle;
|
|
4
|
+
|
|
5
|
+
import com.marianhello.bgloc.data.BackgroundActivity;
|
|
6
|
+
|
|
7
|
+
import org.json.JSONException;
|
|
8
|
+
|
|
9
|
+
public abstract class ActivityTask extends Task {
|
|
10
|
+
private BackgroundActivity mActivity;
|
|
11
|
+
|
|
12
|
+
public ActivityTask(BackgroundActivity activity) {
|
|
13
|
+
mActivity = activity;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public String getName() {
|
|
18
|
+
return "activity";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
public Bundle getBundle() {
|
|
23
|
+
Bundle bundle = new Bundle();
|
|
24
|
+
Bundle params = new Bundle();
|
|
25
|
+
|
|
26
|
+
params.putInt("confidence", mActivity.getConfidence());
|
|
27
|
+
params.putString("type", BackgroundActivity.getActivityString(mActivity.getType()));
|
|
28
|
+
|
|
29
|
+
bundle.putString("name", getName());
|
|
30
|
+
bundle.putBundle("params", params);
|
|
31
|
+
return bundle;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
public String toString() {
|
|
36
|
+
if (mActivity == null) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
return mActivity.toJSONObject().toString();
|
|
42
|
+
} catch (JSONException e) {
|
|
43
|
+
onError("Error processing params: " + e.getMessage());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
package com.marianhello.bgloc.headless;
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle;
|
|
4
|
+
|
|
5
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
6
|
+
|
|
7
|
+
import org.json.JSONException;
|
|
8
|
+
|
|
9
|
+
public abstract class LocationTask extends Task {
|
|
10
|
+
protected BackgroundLocation mLocation;
|
|
11
|
+
|
|
12
|
+
public LocationTask(BackgroundLocation location) {
|
|
13
|
+
mLocation = location;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public String getName() {
|
|
18
|
+
return "location";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
public Bundle getBundle() {
|
|
23
|
+
Bundle bundle = new Bundle();
|
|
24
|
+
Bundle params = new Bundle();
|
|
25
|
+
|
|
26
|
+
params.putString("provider", mLocation.getProvider());
|
|
27
|
+
params.putInt("locationProvider", mLocation.getLocationProvider());
|
|
28
|
+
params.putLong("time", mLocation.getTime());
|
|
29
|
+
params.putDouble("latitude", mLocation.getLatitude());
|
|
30
|
+
params.putDouble("longitude", mLocation.getLongitude());
|
|
31
|
+
if (mLocation.hasAccuracy()) params.putFloat("accuracy", mLocation.getAccuracy());
|
|
32
|
+
if (mLocation.hasVerticalAccuracy()) params.putFloat("accuracy", mLocation.getVerticalAccuracy());
|
|
33
|
+
if (mLocation.hasSpeed()) params.putFloat("speed", mLocation.getSpeed());
|
|
34
|
+
if (mLocation.hasAltitude()) params.putDouble("altitude", mLocation.getAltitude());
|
|
35
|
+
if (mLocation.hasBearing()) params.putFloat("bearing", mLocation.getBearing());
|
|
36
|
+
if (mLocation.hasRadius()) params.putFloat("radius", mLocation.getRadius());
|
|
37
|
+
if (mLocation.hasIsFromMockProvider()) params.putBoolean("isFromMockProvider", mLocation.isFromMockProvider());
|
|
38
|
+
if (mLocation.hasMockLocationsEnabled()) params.putBoolean("mockLocationsEnabled", mLocation.areMockLocationsEnabled());
|
|
39
|
+
|
|
40
|
+
bundle.putString("name", getName());
|
|
41
|
+
bundle.putBundle("params", params);
|
|
42
|
+
|
|
43
|
+
return bundle;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public String toString() {
|
|
48
|
+
if (mLocation == null) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
return mLocation.toJSONObject().toString();
|
|
54
|
+
} catch (JSONException e) {
|
|
55
|
+
onError("Error processing params: " + e.getMessage());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package com.marianhello.bgloc.headless;
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle;
|
|
4
|
+
|
|
5
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
6
|
+
|
|
7
|
+
import org.json.JSONException;
|
|
8
|
+
|
|
9
|
+
public abstract class StationaryTask extends LocationTask {
|
|
10
|
+
public StationaryTask(BackgroundLocation location) {
|
|
11
|
+
super(location);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@Override
|
|
15
|
+
public String getName() {
|
|
16
|
+
return "stationary";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Override
|
|
20
|
+
public Bundle getBundle() {
|
|
21
|
+
Bundle bundle = super.getBundle();
|
|
22
|
+
|
|
23
|
+
return bundle;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
package com.marianhello.bgloc.headless;
|
|
2
|
+
|
|
3
|
+
public class TaskRunnerFactory {
|
|
4
|
+
|
|
5
|
+
public TaskRunner getTaskRunner(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
|
|
6
|
+
return (TaskRunner) Class.forName(className).newInstance();
|
|
7
|
+
}
|
|
8
|
+
}
|
package/android/common/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/*
|
|
2
|
+
According to apache license
|
|
3
|
+
|
|
4
|
+
This is fork of christocracy cordova-plugin-background-geolocation plugin
|
|
5
|
+
https://github.com/christocracy/cordova-plugin-background-geolocation
|
|
6
|
+
|
|
7
|
+
This is a new class
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
package com.marianhello.bgloc.provider;
|
|
11
|
+
|
|
12
|
+
import android.content.BroadcastReceiver;
|
|
13
|
+
import android.content.Context;
|
|
14
|
+
import android.content.Intent;
|
|
15
|
+
import android.content.IntentFilter;
|
|
16
|
+
import android.location.Location;
|
|
17
|
+
import android.media.AudioManager;
|
|
18
|
+
import android.provider.Settings;
|
|
19
|
+
import android.widget.Toast;
|
|
20
|
+
|
|
21
|
+
import com.google.android.gms.location.DetectedActivity;
|
|
22
|
+
import com.marianhello.bgloc.Config;
|
|
23
|
+
import com.marianhello.bgloc.PluginException;
|
|
24
|
+
import com.marianhello.bgloc.data.BackgroundActivity;
|
|
25
|
+
import com.marianhello.bgloc.data.BackgroundLocation;
|
|
26
|
+
import com.marianhello.logging.LoggerManager;
|
|
27
|
+
import com.marianhello.utils.ToneGenerator;
|
|
28
|
+
import com.marianhello.utils.ToneGenerator.Tone;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* AbstractLocationProvider
|
|
32
|
+
*/
|
|
33
|
+
public abstract class AbstractLocationProvider implements LocationProvider {
|
|
34
|
+
|
|
35
|
+
protected Integer PROVIDER_ID;
|
|
36
|
+
protected Config mConfig;
|
|
37
|
+
protected Context mContext;
|
|
38
|
+
|
|
39
|
+
protected ToneGenerator toneGenerator;
|
|
40
|
+
protected org.slf4j.Logger logger;
|
|
41
|
+
|
|
42
|
+
private ProviderDelegate mDelegate;
|
|
43
|
+
|
|
44
|
+
protected AbstractLocationProvider(Context context) {
|
|
45
|
+
mContext = context;
|
|
46
|
+
logger = LoggerManager.getLogger(getClass());
|
|
47
|
+
logger.info("Creating {}", getClass().getSimpleName());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Override
|
|
51
|
+
public void onCreate() {
|
|
52
|
+
toneGenerator = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
public void onDestroy() {
|
|
57
|
+
toneGenerator.release();
|
|
58
|
+
toneGenerator = null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@Override
|
|
62
|
+
public void onConfigure(Config config) {
|
|
63
|
+
mConfig = config;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void onCommand(int commandId, int arg1) {
|
|
68
|
+
// override in child class
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public void setDelegate(ProviderDelegate delegate) {
|
|
72
|
+
mDelegate = delegate;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Register broadcast reciever
|
|
77
|
+
* @param receiver
|
|
78
|
+
*/
|
|
79
|
+
protected Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter) {
|
|
80
|
+
return mContext.registerReceiver(receiver, filter);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Unregister broadcast reciever
|
|
85
|
+
* @param receiver
|
|
86
|
+
*/
|
|
87
|
+
protected void unregisterReceiver (BroadcastReceiver receiver) {
|
|
88
|
+
mContext.unregisterReceiver(receiver);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Handle location as recorder by provider
|
|
93
|
+
* @param location
|
|
94
|
+
*/
|
|
95
|
+
protected void handleLocation (Location location) {
|
|
96
|
+
playDebugTone(Tone.BEEP);
|
|
97
|
+
if (mDelegate != null) {
|
|
98
|
+
BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
|
|
99
|
+
bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
|
|
100
|
+
mDelegate.onLocation(bgLocation);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Handle stationary location with radius
|
|
106
|
+
*
|
|
107
|
+
* @param location
|
|
108
|
+
* @param radius radius of stationary region
|
|
109
|
+
*/
|
|
110
|
+
protected void handleStationary (Location location, float radius) {
|
|
111
|
+
playDebugTone(Tone.LONG_BEEP);
|
|
112
|
+
if (mDelegate != null) {
|
|
113
|
+
BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
|
|
114
|
+
bgLocation.setRadius(radius);
|
|
115
|
+
bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
|
|
116
|
+
mDelegate.onStationary(bgLocation);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Handle stationary location without radius
|
|
122
|
+
*
|
|
123
|
+
* @param location
|
|
124
|
+
*/
|
|
125
|
+
protected void handleStationary (Location location) {
|
|
126
|
+
playDebugTone(Tone.LONG_BEEP);
|
|
127
|
+
if (mDelegate != null) {
|
|
128
|
+
BackgroundLocation bgLocation = new BackgroundLocation(PROVIDER_ID, location);
|
|
129
|
+
bgLocation.setMockLocationsEnabled(hasMockLocationsEnabled());
|
|
130
|
+
mDelegate.onStationary(bgLocation);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
protected void handleActivity(DetectedActivity activity) {
|
|
135
|
+
if (mDelegate != null) {
|
|
136
|
+
mDelegate.onActivity(new BackgroundActivity(PROVIDER_ID, activity));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Handle security exception
|
|
142
|
+
* @param exception
|
|
143
|
+
*/
|
|
144
|
+
protected void handleSecurityException (SecurityException exception) {
|
|
145
|
+
PluginException error = new PluginException(exception.getMessage(), PluginException.PERMISSION_DENIED_ERROR);
|
|
146
|
+
if (mDelegate != null) {
|
|
147
|
+
mDelegate.onError(error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
protected void showDebugToast (String text) {
|
|
152
|
+
if (mConfig.isDebugging()) {
|
|
153
|
+
Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public Boolean hasMockLocationsEnabled() {
|
|
158
|
+
return Settings.Secure.getString(mContext.getContentResolver(), android.provider.Settings.Secure.ALLOW_MOCK_LOCATION).equals("1");
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Plays debug sound
|
|
163
|
+
* @param name toneGenerator
|
|
164
|
+
*/
|
|
165
|
+
protected void playDebugTone (int name) {
|
|
166
|
+
if (toneGenerator == null || !mConfig.isDebugging()) return;
|
|
167
|
+
|
|
168
|
+
int duration = 1000;
|
|
169
|
+
toneGenerator.startTone(name, duration);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
package com.marianhello.bgloc.provider;
|
|
2
|
+
|
|
3
|
+
import android.app.PendingIntent;
|
|
4
|
+
import android.content.BroadcastReceiver;
|
|
5
|
+
import android.content.Context;
|
|
6
|
+
import android.content.Intent;
|
|
7
|
+
import android.content.IntentFilter;
|
|
8
|
+
import android.content.pm.PackageManager;
|
|
9
|
+
import android.location.Location;
|
|
10
|
+
import android.Manifest;
|
|
11
|
+
import android.os.Build;
|
|
12
|
+
import android.os.Looper;
|
|
13
|
+
import androidx.core.app.ActivityCompat;
|
|
14
|
+
|
|
15
|
+
import com.google.android.gms.location.ActivityRecognition;
|
|
16
|
+
import com.google.android.gms.location.ActivityRecognitionClient;
|
|
17
|
+
import com.google.android.gms.location.ActivityRecognitionResult;
|
|
18
|
+
import com.google.android.gms.location.DetectedActivity;
|
|
19
|
+
import com.google.android.gms.location.FusedLocationProviderClient;
|
|
20
|
+
import com.google.android.gms.location.LocationCallback;
|
|
21
|
+
import com.google.android.gms.location.LocationRequest;
|
|
22
|
+
import com.google.android.gms.location.LocationResult;
|
|
23
|
+
import com.google.android.gms.location.LocationServices;
|
|
24
|
+
import com.marianhello.bgloc.Config;
|
|
25
|
+
import com.marianhello.bgloc.data.BackgroundActivity;
|
|
26
|
+
|
|
27
|
+
import java.util.List;
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
public class ActivityRecognitionLocationProvider extends AbstractLocationProvider {
|
|
31
|
+
|
|
32
|
+
private static final String P_NAME = "com.marianhello.bgloc";
|
|
33
|
+
private static final String DETECTED_ACTIVITY_UPDATE = P_NAME + ".DETECTED_ACTIVITY_UPDATE";
|
|
34
|
+
|
|
35
|
+
private FusedLocationProviderClient fusedLocationClient;
|
|
36
|
+
private ActivityRecognitionClient activityRecognitionClient;
|
|
37
|
+
private PendingIntent detectedActivitiesPI;
|
|
38
|
+
|
|
39
|
+
// Must default to false: onConfigure() is called before onStart() by LocationServiceImpl.
|
|
40
|
+
private boolean isStarted = false;
|
|
41
|
+
private boolean isTracking = false;
|
|
42
|
+
private boolean isWatchingActivity = false;
|
|
43
|
+
private DetectedActivity lastActivity = new DetectedActivity(DetectedActivity.UNKNOWN, 100);
|
|
44
|
+
|
|
45
|
+
private final LocationCallback locationCallback = new LocationCallback() {
|
|
46
|
+
@Override
|
|
47
|
+
public void onLocationResult(LocationResult result) {
|
|
48
|
+
if (result == null) return;
|
|
49
|
+
List<Location> locations = result.getLocations();
|
|
50
|
+
if (locations == null) return;
|
|
51
|
+
for (Location location : locations) {
|
|
52
|
+
onLocationReceived(location);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
public ActivityRecognitionLocationProvider(Context context) {
|
|
58
|
+
super(context);
|
|
59
|
+
PROVIDER_ID = Config.ACTIVITY_PROVIDER;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Override
|
|
63
|
+
public void onCreate() {
|
|
64
|
+
super.onCreate();
|
|
65
|
+
fusedLocationClient = LocationServices.getFusedLocationProviderClient(mContext);
|
|
66
|
+
activityRecognitionClient = ActivityRecognition.getClient(mContext);
|
|
67
|
+
|
|
68
|
+
Intent detectedActivitiesIntent = new Intent(mContext, DetectedActivitiesReceiver.class);
|
|
69
|
+
detectedActivitiesIntent.setAction(DETECTED_ACTIVITY_UPDATE);
|
|
70
|
+
|
|
71
|
+
int updateCurrentFlag = android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
|
|
72
|
+
? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
|
|
73
|
+
: PendingIntent.FLAG_UPDATE_CURRENT;
|
|
74
|
+
detectedActivitiesPI = PendingIntent.getBroadcast(mContext, 9002, detectedActivitiesIntent, updateCurrentFlag);
|
|
75
|
+
registerReceiver(detectedActivitiesReceiver, new IntentFilter(DETECTED_ACTIVITY_UPDATE));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Override
|
|
79
|
+
public void onStart() {
|
|
80
|
+
logger.info("Start recording");
|
|
81
|
+
this.isStarted = true;
|
|
82
|
+
attachRecorder();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@Override
|
|
86
|
+
public void onStop() {
|
|
87
|
+
logger.info("Stop recording");
|
|
88
|
+
this.isStarted = false;
|
|
89
|
+
detachRecorder();
|
|
90
|
+
stopTracking();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@Override
|
|
94
|
+
public void onConfigure(Config config) {
|
|
95
|
+
super.onConfigure(config);
|
|
96
|
+
if (isStarted) {
|
|
97
|
+
onStop();
|
|
98
|
+
onStart();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@Override
|
|
103
|
+
public boolean isStarted() {
|
|
104
|
+
return isStarted;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@Override
|
|
108
|
+
public void onCommand(int commandId, int arg1) {
|
|
109
|
+
if (commandId == LocationProvider.CMD_SWITCH_MODE && isStarted) {
|
|
110
|
+
// Foreground: ensure tracking; background: keep current behavior (activity still drives start/stop).
|
|
111
|
+
if (arg1 == LocationProvider.FOREGROUND_MODE) {
|
|
112
|
+
startTracking();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Same logic as former onLocationChanged: STILL -> stationary + stopTracking, else handleLocation.
|
|
119
|
+
*/
|
|
120
|
+
private void onLocationReceived(Location location) {
|
|
121
|
+
logger.debug("Location change: {}", location.toString());
|
|
122
|
+
|
|
123
|
+
if (lastActivity.getType() == DetectedActivity.STILL) {
|
|
124
|
+
handleStationary(location);
|
|
125
|
+
stopTracking();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
showDebugToast("acy:" + location.getAccuracy() + ",v:" + location.getSpeed());
|
|
130
|
+
|
|
131
|
+
handleLocation(location);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public void startTracking() {
|
|
135
|
+
if (isTracking) { return; }
|
|
136
|
+
if (fusedLocationClient == null || mConfig == null) { return; }
|
|
137
|
+
|
|
138
|
+
int priority = translateDesiredAccuracy(mConfig.getDesiredAccuracy());
|
|
139
|
+
LocationRequest locationRequest = LocationRequest.create()
|
|
140
|
+
.setPriority(priority)
|
|
141
|
+
.setFastestInterval(mConfig.getFastestInterval())
|
|
142
|
+
.setInterval(mConfig.getInterval());
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
fusedLocationClient.requestLocationUpdates(
|
|
146
|
+
locationRequest,
|
|
147
|
+
locationCallback,
|
|
148
|
+
Looper.getMainLooper()
|
|
149
|
+
);
|
|
150
|
+
isTracking = true;
|
|
151
|
+
logger.debug("Start tracking with priority={} fastestInterval={} interval={} activitiesInterval={} stopOnStillActivity={}",
|
|
152
|
+
priority, mConfig.getFastestInterval(), mConfig.getInterval(), mConfig.getActivitiesInterval(), mConfig.getStopOnStillActivity());
|
|
153
|
+
} catch (SecurityException e) {
|
|
154
|
+
logger.error("Security exception: {}", e.getMessage());
|
|
155
|
+
this.handleSecurityException(e);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public void stopTracking() {
|
|
160
|
+
if (!isTracking) { return; }
|
|
161
|
+
if (fusedLocationClient == null) {
|
|
162
|
+
isTracking = false;
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
fusedLocationClient.removeLocationUpdates(locationCallback);
|
|
167
|
+
} catch (SecurityException e) {
|
|
168
|
+
logger.warn("Security exception removing location updates: {}", e.getMessage());
|
|
169
|
+
} finally {
|
|
170
|
+
isTracking = false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private boolean activityRecognitionPermitted() {
|
|
175
|
+
return Build.VERSION.SDK_INT < Build.VERSION_CODES.Q
|
|
176
|
+
|| ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_GRANTED;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private void attachRecorder() {
|
|
180
|
+
if (fusedLocationClient == null || activityRecognitionClient == null) { return; }
|
|
181
|
+
if (mConfig == null) { return; }
|
|
182
|
+
|
|
183
|
+
startTracking();
|
|
184
|
+
|
|
185
|
+
if (!isWatchingActivity && mConfig.getStopOnStillActivity() && activityRecognitionPermitted()) {
|
|
186
|
+
activityRecognitionClient.requestActivityUpdates(
|
|
187
|
+
mConfig.getActivitiesInterval(),
|
|
188
|
+
detectedActivitiesPI
|
|
189
|
+
).addOnFailureListener(e -> logger.error("requestActivityUpdates failed: {}", e.getMessage()));
|
|
190
|
+
isWatchingActivity = true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private void detachRecorder() {
|
|
195
|
+
if (!isWatchingActivity) { return; }
|
|
196
|
+
if (activityRecognitionClient == null) {
|
|
197
|
+
isWatchingActivity = false;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
logger.debug("Detaching recorder");
|
|
202
|
+
activityRecognitionClient.removeActivityUpdates(detectedActivitiesPI)
|
|
203
|
+
.addOnSuccessListener(v -> logger.debug("removeActivityUpdates ok"))
|
|
204
|
+
.addOnFailureListener(e -> logger.warn("removeActivityUpdates failed: {}", e.getMessage()));
|
|
205
|
+
} finally {
|
|
206
|
+
isWatchingActivity = false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Translates a number representing desired accuracy of Geolocation system from set [0, 10, 100, 1000].
|
|
212
|
+
* 0: most aggressive, most accurate, worst battery drain
|
|
213
|
+
* 1000: least aggressive, least accurate, best for battery.
|
|
214
|
+
*/
|
|
215
|
+
private int translateDesiredAccuracy(Integer accuracy) {
|
|
216
|
+
if (accuracy == null) {
|
|
217
|
+
return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
|
|
218
|
+
}
|
|
219
|
+
if (accuracy >= 10000) {
|
|
220
|
+
return LocationRequest.PRIORITY_NO_POWER;
|
|
221
|
+
}
|
|
222
|
+
if (accuracy >= 1000) {
|
|
223
|
+
return LocationRequest.PRIORITY_LOW_POWER;
|
|
224
|
+
}
|
|
225
|
+
if (accuracy >= 100) {
|
|
226
|
+
return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
|
|
227
|
+
}
|
|
228
|
+
return LocationRequest.PRIORITY_HIGH_ACCURACY;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
public static DetectedActivity getProbableActivity(List<DetectedActivity> detectedActivities) {
|
|
232
|
+
int highestConfidence = 0;
|
|
233
|
+
DetectedActivity mostLikelyActivity = new DetectedActivity(DetectedActivity.UNKNOWN, 0);
|
|
234
|
+
|
|
235
|
+
for (DetectedActivity da : detectedActivities) {
|
|
236
|
+
if (da.getType() != DetectedActivity.TILTING && da.getType() != DetectedActivity.UNKNOWN) {
|
|
237
|
+
if (highestConfidence < da.getConfidence()) {
|
|
238
|
+
highestConfidence = da.getConfidence();
|
|
239
|
+
mostLikelyActivity = da;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return mostLikelyActivity;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private class DetectedActivitiesReceiver extends BroadcastReceiver {
|
|
247
|
+
@Override
|
|
248
|
+
public void onReceive(Context context, Intent intent) {
|
|
249
|
+
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
|
|
250
|
+
if (result == null) return;
|
|
251
|
+
List<DetectedActivity> detectedActivities = result.getProbableActivities();
|
|
252
|
+
if (detectedActivities == null || detectedActivities.isEmpty()) return;
|
|
253
|
+
|
|
254
|
+
lastActivity = getProbableActivity(detectedActivities);
|
|
255
|
+
|
|
256
|
+
logger.debug("Detected activity={} confidence={}", BackgroundActivity.getActivityString(lastActivity.getType()), lastActivity.getConfidence());
|
|
257
|
+
|
|
258
|
+
handleActivity(lastActivity);
|
|
259
|
+
|
|
260
|
+
if (lastActivity.getType() == DetectedActivity.STILL) {
|
|
261
|
+
showDebugToast("Detected STILL Activity");
|
|
262
|
+
} else {
|
|
263
|
+
showDebugToast("Detected ACTIVE Activity");
|
|
264
|
+
startTracking();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private final BroadcastReceiver detectedActivitiesReceiver = new DetectedActivitiesReceiver();
|
|
270
|
+
|
|
271
|
+
@Override
|
|
272
|
+
public void onDestroy() {
|
|
273
|
+
logger.info("Destroying ActivityRecognitionLocationProvider");
|
|
274
|
+
onStop();
|
|
275
|
+
try {
|
|
276
|
+
unregisterReceiver(detectedActivitiesReceiver);
|
|
277
|
+
} catch (Exception ignored) {
|
|
278
|
+
// Receiver may not be registered if onCreate/onStart never completed
|
|
279
|
+
}
|
|
280
|
+
super.onDestroy();
|
|
281
|
+
}
|
|
282
|
+
}
|