@josuelmm/capacitor-background-geolocation 1.0.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/JosuelmmCapacitorBackgroundGeolocation.podspec +34 -0
- package/LICENSE +17 -0
- package/NOTICE.md +32 -0
- package/Package.swift +45 -0
- package/README.md +402 -0
- package/android/build.gradle +79 -0
- package/android/proguard-rules.pro +1 -0
- package/android/src/main/AndroidManifest.xml +83 -0
- package/android/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
- package/android/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/BackgroundGeolocationPlugin.java +898 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/ConfigMapper.java +303 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/HeadlessTaskRegistry.java +34 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/JsEvaluatorTaskRunner.java +63 -0
- package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +699 -0
- package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +103 -0
- package/android/src/main/java/com/marianhello/bgloc/Config.java +1155 -0
- package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +362 -0
- package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +45 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
- package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +238 -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 +1088 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ConfigJsonMapper.java +211 -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 +27 -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 +71 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/data/SessionLocationDAO.java +18 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +406 -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 +94 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +227 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +122 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +550 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +189 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionContract.java +74 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionLocationDAO.java +169 -0
- package/android/src/main/java/com/marianhello/bgloc/driving/DrivingEventsDetector.java +265 -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 +60 -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/http/UrlTemplateResolver.java +115 -0
- package/android/src/main/java/com/marianhello/bgloc/oem/BatteryOemHelper.java +214 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +218 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +385 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +685 -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 +175 -0
- package/android/src/main/java/com/marianhello/bgloc/sensor/SensorFusionDetector.java +199 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +1531 -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 +156 -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 +311 -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 +301 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
- package/android/src/main/java/com/marianhello/logging/DBLogReader.java +208 -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/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/values/strings.xml +15 -0
- package/android/src/main/res/xml/authenticator.xml +7 -0
- package/android/src/main/res/xml/syncadapter.xml +9 -0
- package/dist/esm/definitions.d.ts +1052 -0
- package/dist/esm/definitions.js +142 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +92 -0
- package/dist/esm/web.js +242 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +415 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +418 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin-Bridging-Header.h +18 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.m +52 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.swift +750 -0
- package/ios/Tests/BackgroundGeolocationPluginTests/BackgroundGeolocationPluginTests.swift +12 -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 +340 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +88 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +1193 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +46 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +283 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.h +99 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.m +636 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +54 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +550 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +124 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.h +73 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.m +392 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.h +38 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.m +39 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.m +305 -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 +53 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +367 -0
- package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +138 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +335 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +520 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
- package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.h +41 -0
- package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.m +137 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.h +29 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.m +31 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.m +153 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
- package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.h +31 -0
- package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.m +107 -0
- package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
- package/ios/common/BackgroundGeolocation/Reachability.m +475 -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/module.modulemap +16 -0
- package/package.json +82 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import com.marianhello.bgloc.Config;
|
|
4
|
+
|
|
5
|
+
import org.json.JSONException;
|
|
6
|
+
import org.json.JSONObject;
|
|
7
|
+
|
|
8
|
+
import java.util.HashMap;
|
|
9
|
+
import java.util.Iterator;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* v4.4.1 — JSON serializer/deserializer for the full {@link Config} state.
|
|
13
|
+
*
|
|
14
|
+
* Lives in {@code common} so both the SQLite DAO (also common) and the Cordova
|
|
15
|
+
* {@code ConfigMapper} (cordova) can reuse it without creating a common→cordova
|
|
16
|
+
* dependency. Used to persist a single {@code config_json} TEXT column instead of
|
|
17
|
+
* adding one schema column per new field on every release.
|
|
18
|
+
*
|
|
19
|
+
* Round-trip: every JS-configurable key the plugin understands is preserved.
|
|
20
|
+
* Anything not present in the input JSON keeps the {@link Config} default.
|
|
21
|
+
*/
|
|
22
|
+
public final class ConfigJsonMapper {
|
|
23
|
+
|
|
24
|
+
private ConfigJsonMapper() {}
|
|
25
|
+
|
|
26
|
+
/** Serialize the current Config state to a JSONObject suitable for storage.
|
|
27
|
+
* String fields use {@link JSONObject#NULL} when the user explicitly cleared them
|
|
28
|
+
* (i.e. equals {@link Config#NullString}) so the sentinel survives the round-trip. */
|
|
29
|
+
public static JSONObject toJSONObject(Config c) throws JSONException {
|
|
30
|
+
JSONObject j = new JSONObject();
|
|
31
|
+
if (c == null) return j;
|
|
32
|
+
j.put("stationaryRadius", c.getStationaryRadius());
|
|
33
|
+
j.put("distanceFilter", c.getDistanceFilter());
|
|
34
|
+
j.put("desiredAccuracy", c.getDesiredAccuracy());
|
|
35
|
+
j.put("debug", c.isDebugging());
|
|
36
|
+
j.put("notificationTitle", nullable(c.getNotificationTitle()));
|
|
37
|
+
j.put("notificationText", nullable(c.getNotificationText()));
|
|
38
|
+
j.put("notificationSyncTitle", nullable(c.getNotificationSyncTitle()));
|
|
39
|
+
j.put("notificationSyncText", nullable(c.getNotificationSyncText()));
|
|
40
|
+
j.put("notificationSyncCompletedText", nullable(c.getNotificationSyncCompletedText()));
|
|
41
|
+
j.put("notificationSyncFailedText", nullable(c.getNotificationSyncFailedText()));
|
|
42
|
+
j.put("notificationIconLarge", nullable(c.getLargeNotificationIcon()));
|
|
43
|
+
j.put("notificationIconSmall", nullable(c.getSmallNotificationIcon()));
|
|
44
|
+
j.put("notificationIconColor", nullable(c.getNotificationIconColor()));
|
|
45
|
+
j.put("locationProvider", c.getLocationProvider());
|
|
46
|
+
j.put("interval", c.getInterval());
|
|
47
|
+
j.put("fastestInterval", c.getFastestInterval());
|
|
48
|
+
j.put("activitiesInterval", c.getActivitiesInterval());
|
|
49
|
+
j.put("stopOnTerminate", c.getStopOnTerminate());
|
|
50
|
+
j.put("startOnBoot", c.getStartOnBoot());
|
|
51
|
+
j.put("startForeground", c.getStartForeground());
|
|
52
|
+
j.put("notificationsEnabled", c.getNotificationsEnabled());
|
|
53
|
+
j.put("stopOnStillActivity", c.getStopOnStillActivity());
|
|
54
|
+
j.put("url", nullable(c.getUrl()));
|
|
55
|
+
j.put("syncUrl", nullable(c.getSyncUrl()));
|
|
56
|
+
j.put("syncThreshold", c.getSyncThreshold());
|
|
57
|
+
j.put("syncEnabled", c.getSyncEnabled());
|
|
58
|
+
j.put("maxLocations", c.getMaxLocations());
|
|
59
|
+
j.put("enableWatchdog", c.getEnableWatchdog());
|
|
60
|
+
j.put("showTime", c.getShowTime());
|
|
61
|
+
j.put("showDistance", c.getShowDistance());
|
|
62
|
+
j.put("httpMethod", c.getHttpMethod());
|
|
63
|
+
j.put("syncHttpMethod", c.getSyncHttpMethod());
|
|
64
|
+
j.put("httpMode", c.getHttpMode());
|
|
65
|
+
j.put("syncMode", c.getSyncMode());
|
|
66
|
+
j.put("heartbeatInterval", c.getHeartbeatInterval());
|
|
67
|
+
j.put("mockLocationPolicy", c.getMockLocationPolicy());
|
|
68
|
+
j.put("includeBattery", c.getIncludeBattery());
|
|
69
|
+
// v4.5.1: battery knobs
|
|
70
|
+
j.put("wakeLockMode", c.getWakeLockMode());
|
|
71
|
+
j.put("stationaryTimeout", c.getStationaryTimeout());
|
|
72
|
+
j.put("stationaryPollInterval", c.getStationaryPollInterval());
|
|
73
|
+
j.put("stationaryPollFast", c.getStationaryPollFast());
|
|
74
|
+
// v4.5.2: provider hardening knobs
|
|
75
|
+
j.put("activityConfidenceThreshold", c.getActivityConfidenceThreshold());
|
|
76
|
+
j.put("maxAcceptedAccuracy", c.getMaxAcceptedAccuracy());
|
|
77
|
+
|
|
78
|
+
if (c.getHttpHeaders() != null) {
|
|
79
|
+
j.put("httpHeaders", new JSONObject(c.getHttpHeaders()));
|
|
80
|
+
}
|
|
81
|
+
if (c.getQueryParams() != null) {
|
|
82
|
+
j.put("queryParams", new JSONObject(c.getQueryParams()));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
Config.DrivingEventsOptions de = c.getDrivingEvents();
|
|
86
|
+
if (de != null) {
|
|
87
|
+
JSONObject deJson = new JSONObject();
|
|
88
|
+
deJson.put("enabled", de.enabled);
|
|
89
|
+
deJson.put("speedLimit", de.speedLimitKmh);
|
|
90
|
+
deJson.put("minMovingSpeed", de.minMovingSpeedMps);
|
|
91
|
+
deJson.put("stoppedDuration", de.stoppedDurationMs);
|
|
92
|
+
deJson.put("minTripSpeed", de.minTripSpeedMps);
|
|
93
|
+
deJson.put("minTripDuration", de.minTripDurationMs);
|
|
94
|
+
deJson.put("hardBrakeMps2", de.hardBrakeMps2);
|
|
95
|
+
deJson.put("rapidAccelMps2", de.rapidAccelMps2);
|
|
96
|
+
deJson.put("sharpTurnDegPerSec", de.sharpTurnDegPerSec);
|
|
97
|
+
deJson.put("crashImpactKmh", de.crashImpactKmh);
|
|
98
|
+
deJson.put("crashWindowMs", de.crashWindowMs);
|
|
99
|
+
deJson.put("sensorFusion", de.sensorFusion);
|
|
100
|
+
deJson.put("crashImpactG", de.crashImpactG);
|
|
101
|
+
deJson.put("sensorCrashCooldownMs", de.sensorCrashCooldownMs);
|
|
102
|
+
deJson.put("phoneUsageWindowMs", de.phoneUsageWindowMs);
|
|
103
|
+
deJson.put("phoneUsageCooldownMs", de.phoneUsageCooldownMs);
|
|
104
|
+
j.put("drivingEvents", deJson);
|
|
105
|
+
}
|
|
106
|
+
return j;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Deserialize a previously serialized config JSON. Missing keys are skipped (defaults preserved). */
|
|
110
|
+
public static Config fromJSONObject(JSONObject j) throws JSONException {
|
|
111
|
+
Config c = Config.getDefault();
|
|
112
|
+
if (j == null) return c;
|
|
113
|
+
if (j.has("stationaryRadius")) c.setStationaryRadius((float) j.getDouble("stationaryRadius"));
|
|
114
|
+
if (j.has("distanceFilter")) c.setDistanceFilter(j.getInt("distanceFilter"));
|
|
115
|
+
if (j.has("desiredAccuracy")) c.setDesiredAccuracy(j.getInt("desiredAccuracy"));
|
|
116
|
+
if (j.has("debug")) c.setDebugging(j.getBoolean("debug"));
|
|
117
|
+
if (j.has("notificationTitle")) c.setNotificationTitle(readNullable(j, "notificationTitle"));
|
|
118
|
+
if (j.has("notificationText")) c.setNotificationText(readNullable(j, "notificationText"));
|
|
119
|
+
if (j.has("notificationSyncTitle")) c.setNotificationSyncTitle(readNullable(j, "notificationSyncTitle"));
|
|
120
|
+
if (j.has("notificationSyncText")) c.setNotificationSyncText(readNullable(j, "notificationSyncText"));
|
|
121
|
+
if (j.has("notificationSyncCompletedText")) c.setNotificationSyncCompletedText(readNullable(j, "notificationSyncCompletedText"));
|
|
122
|
+
if (j.has("notificationSyncFailedText")) c.setNotificationSyncFailedText(readNullable(j, "notificationSyncFailedText"));
|
|
123
|
+
if (j.has("notificationIconLarge")) c.setLargeNotificationIcon(readNullable(j, "notificationIconLarge"));
|
|
124
|
+
if (j.has("notificationIconSmall")) c.setSmallNotificationIcon(readNullable(j, "notificationIconSmall"));
|
|
125
|
+
if (j.has("notificationIconColor")) c.setNotificationIconColor(readNullable(j, "notificationIconColor"));
|
|
126
|
+
if (j.has("locationProvider")) c.setLocationProvider(j.getInt("locationProvider"));
|
|
127
|
+
if (j.has("interval")) c.setInterval(j.getInt("interval"));
|
|
128
|
+
if (j.has("fastestInterval")) c.setFastestInterval(j.getInt("fastestInterval"));
|
|
129
|
+
if (j.has("activitiesInterval")) c.setActivitiesInterval(j.getInt("activitiesInterval"));
|
|
130
|
+
if (j.has("stopOnTerminate")) c.setStopOnTerminate(j.getBoolean("stopOnTerminate"));
|
|
131
|
+
if (j.has("startOnBoot")) c.setStartOnBoot(j.getBoolean("startOnBoot"));
|
|
132
|
+
if (j.has("startForeground")) c.setStartForeground(j.getBoolean("startForeground"));
|
|
133
|
+
if (j.has("notificationsEnabled")) c.setNotificationsEnabled(j.getBoolean("notificationsEnabled"));
|
|
134
|
+
if (j.has("stopOnStillActivity")) c.setStopOnStillActivity(j.getBoolean("stopOnStillActivity"));
|
|
135
|
+
if (j.has("url")) c.setUrl(readNullable(j, "url"));
|
|
136
|
+
if (j.has("syncUrl")) c.setSyncUrl(readNullable(j, "syncUrl"));
|
|
137
|
+
if (j.has("syncThreshold")) c.setSyncThreshold(j.getInt("syncThreshold"));
|
|
138
|
+
if (j.has("syncEnabled")) c.setSyncEnabled(j.getBoolean("syncEnabled"));
|
|
139
|
+
if (j.has("maxLocations")) c.setMaxLocations(j.getInt("maxLocations"));
|
|
140
|
+
if (j.has("enableWatchdog")) c.setEnableWatchdog(j.getBoolean("enableWatchdog"));
|
|
141
|
+
if (j.has("showTime")) c.setShowTime(j.getBoolean("showTime"));
|
|
142
|
+
if (j.has("showDistance")) c.setShowDistance(j.getBoolean("showDistance"));
|
|
143
|
+
if (has(j, "httpMethod")) c.setHttpMethod(j.getString("httpMethod"));
|
|
144
|
+
if (has(j, "syncHttpMethod")) c.setSyncHttpMethod(j.getString("syncHttpMethod"));
|
|
145
|
+
if (has(j, "httpMode")) c.setHttpMode(j.getString("httpMode"));
|
|
146
|
+
if (has(j, "syncMode")) c.setSyncMode(j.getString("syncMode"));
|
|
147
|
+
if (j.has("heartbeatInterval")) c.setHeartbeatInterval(j.getInt("heartbeatInterval"));
|
|
148
|
+
if (has(j, "mockLocationPolicy")) c.setMockLocationPolicy(j.getString("mockLocationPolicy"));
|
|
149
|
+
if (j.has("includeBattery")) c.setIncludeBattery(j.getBoolean("includeBattery"));
|
|
150
|
+
// v4.5.1: battery knobs
|
|
151
|
+
if (has(j, "wakeLockMode")) c.setWakeLockMode(j.getString("wakeLockMode"));
|
|
152
|
+
if (j.has("stationaryTimeout") && !j.isNull("stationaryTimeout")) c.setStationaryTimeout(j.getInt("stationaryTimeout"));
|
|
153
|
+
if (j.has("stationaryPollInterval") && !j.isNull("stationaryPollInterval")) c.setStationaryPollInterval(j.getInt("stationaryPollInterval"));
|
|
154
|
+
if (j.has("stationaryPollFast") && !j.isNull("stationaryPollFast")) c.setStationaryPollFast(j.getInt("stationaryPollFast"));
|
|
155
|
+
// v4.5.2
|
|
156
|
+
if (j.has("activityConfidenceThreshold") && !j.isNull("activityConfidenceThreshold")) c.setActivityConfidenceThreshold(j.getInt("activityConfidenceThreshold"));
|
|
157
|
+
if (j.has("maxAcceptedAccuracy") && !j.isNull("maxAcceptedAccuracy")) c.setMaxAcceptedAccuracy((float) j.getDouble("maxAcceptedAccuracy"));
|
|
158
|
+
|
|
159
|
+
if (has(j, "httpHeaders")) c.setHttpHeaders(jsonToHashMap(j.getJSONObject("httpHeaders")));
|
|
160
|
+
if (has(j, "queryParams")) c.setQueryParams(jsonToHashMap(j.getJSONObject("queryParams")));
|
|
161
|
+
|
|
162
|
+
if (has(j, "drivingEvents")) {
|
|
163
|
+
JSONObject de = j.getJSONObject("drivingEvents");
|
|
164
|
+
Config.DrivingEventsOptions o = new Config.DrivingEventsOptions();
|
|
165
|
+
if (de.has("enabled")) o.enabled = de.getBoolean("enabled");
|
|
166
|
+
if (de.has("speedLimit")) o.speedLimitKmh = de.getDouble("speedLimit");
|
|
167
|
+
if (de.has("minMovingSpeed")) o.minMovingSpeedMps = de.getDouble("minMovingSpeed");
|
|
168
|
+
if (de.has("stoppedDuration")) o.stoppedDurationMs = de.getLong("stoppedDuration");
|
|
169
|
+
if (de.has("minTripSpeed")) o.minTripSpeedMps = de.getDouble("minTripSpeed");
|
|
170
|
+
if (de.has("minTripDuration")) o.minTripDurationMs = de.getLong("minTripDuration");
|
|
171
|
+
if (de.has("hardBrakeMps2")) o.hardBrakeMps2 = de.getDouble("hardBrakeMps2");
|
|
172
|
+
if (de.has("rapidAccelMps2")) o.rapidAccelMps2 = de.getDouble("rapidAccelMps2");
|
|
173
|
+
if (de.has("sharpTurnDegPerSec")) o.sharpTurnDegPerSec = de.getDouble("sharpTurnDegPerSec");
|
|
174
|
+
if (de.has("crashImpactKmh")) o.crashImpactKmh = de.getDouble("crashImpactKmh");
|
|
175
|
+
if (de.has("crashWindowMs")) o.crashWindowMs = de.getLong("crashWindowMs");
|
|
176
|
+
if (de.has("sensorFusion")) o.sensorFusion = de.getBoolean("sensorFusion");
|
|
177
|
+
if (de.has("crashImpactG")) o.crashImpactG = de.getDouble("crashImpactG");
|
|
178
|
+
if (de.has("sensorCrashCooldownMs")) o.sensorCrashCooldownMs = de.getLong("sensorCrashCooldownMs");
|
|
179
|
+
if (de.has("phoneUsageWindowMs")) o.phoneUsageWindowMs = de.getLong("phoneUsageWindowMs");
|
|
180
|
+
if (de.has("phoneUsageCooldownMs")) o.phoneUsageCooldownMs = de.getLong("phoneUsageCooldownMs");
|
|
181
|
+
c.setDrivingEvents(o);
|
|
182
|
+
}
|
|
183
|
+
return c;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private static HashMap<String, String> jsonToHashMap(JSONObject obj) throws JSONException {
|
|
187
|
+
HashMap<String, String> map = new HashMap<>();
|
|
188
|
+
Iterator<String> keys = obj.keys();
|
|
189
|
+
while (keys.hasNext()) {
|
|
190
|
+
String k = keys.next();
|
|
191
|
+
map.put(k, String.valueOf(obj.get(k)));
|
|
192
|
+
}
|
|
193
|
+
return map;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private static boolean has(JSONObject j, String key) {
|
|
197
|
+
return j.has(key) && !j.isNull(key);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Map {@link Config#NullString} or null to JSONObject.NULL so the sentinel survives. */
|
|
201
|
+
private static Object nullable(String s) {
|
|
202
|
+
if (s == null || s == Config.NullString) return JSONObject.NULL;
|
|
203
|
+
return s;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Inverse of {@link #nullable(String)}. JSON null → {@link Config#NullString}. */
|
|
207
|
+
private static String readNullable(JSONObject j, String key) throws JSONException {
|
|
208
|
+
if (j.isNull(key)) return Config.NullString;
|
|
209
|
+
return j.getString(key);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import java.util.Date;
|
|
4
|
+
import java.util.Collection;
|
|
5
|
+
|
|
6
|
+
import org.json.JSONException;
|
|
7
|
+
|
|
8
|
+
import com.marianhello.bgloc.Config;
|
|
9
|
+
|
|
10
|
+
public interface ConfigurationDAO {
|
|
11
|
+
boolean persistConfiguration(Config config) throws NullPointerException;
|
|
12
|
+
Config retrieveConfiguration() throws JSONException;
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
|
|
5
|
+
import com.marianhello.bgloc.data.provider.ContentProviderLocationDAO;
|
|
6
|
+
import com.marianhello.bgloc.data.sqlite.SQLiteLocationDAO;
|
|
7
|
+
import com.marianhello.bgloc.data.sqlite.SQLiteConfigurationDAO;
|
|
8
|
+
|
|
9
|
+
public abstract class DAOFactory {
|
|
10
|
+
public static LocationDAO createLocationDAO(Context context) {
|
|
11
|
+
return new ContentProviderLocationDAO(context);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public static ConfigurationDAO createConfigurationDAO(Context context) {
|
|
15
|
+
return new SQLiteConfigurationDAO(context);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import com.marianhello.utils.CloneHelper;
|
|
4
|
+
|
|
5
|
+
import org.json.JSONException;
|
|
6
|
+
import org.json.JSONObject;
|
|
7
|
+
|
|
8
|
+
import java.io.Serializable;
|
|
9
|
+
import java.util.HashMap;
|
|
10
|
+
import java.util.Iterator;
|
|
11
|
+
import java.util.Map;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Created by finch on 9.12.2017.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
public class HashMapLocationTemplate extends AbstractLocationTemplate implements Serializable {
|
|
18
|
+
private HashMap<?, String> mMap;
|
|
19
|
+
private static final long serialVersionUID = 1234L;
|
|
20
|
+
|
|
21
|
+
// copy constructor
|
|
22
|
+
public HashMapLocationTemplate(HashMapLocationTemplate tpl) {
|
|
23
|
+
if (tpl == null || tpl.mMap == null) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
mMap = CloneHelper.deepCopy(tpl.mMap);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public HashMapLocationTemplate(HashMap map) {
|
|
31
|
+
this.mMap = map;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
public Object locationToJson(BackgroundLocation location) throws JSONException {
|
|
36
|
+
return LocationMapper.map(location).withMap(mMap);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public Iterator iterator() {
|
|
40
|
+
return mMap.entrySet().iterator();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public boolean containsKey(String propName) {
|
|
44
|
+
return mMap.containsKey(propName);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public String get(String key) {
|
|
48
|
+
return mMap.get(key);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Override
|
|
52
|
+
public boolean isEmpty() {
|
|
53
|
+
return mMap == null || mMap.isEmpty();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Override
|
|
57
|
+
public boolean equals(Object other) {
|
|
58
|
+
if (other == null) return false;
|
|
59
|
+
if (other == this) return true;
|
|
60
|
+
if (!(other instanceof HashMapLocationTemplate)) return false;
|
|
61
|
+
return ((HashMapLocationTemplate) other).mMap.equals(this.mMap);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@Override
|
|
65
|
+
public String toString() {
|
|
66
|
+
if (mMap == null) {
|
|
67
|
+
return "null";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
JSONObject jObject = new JSONObject(mMap);
|
|
71
|
+
return jObject.toString();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public Map toMap() {
|
|
75
|
+
return mMap;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Override
|
|
79
|
+
public LocationTemplate clone() {
|
|
80
|
+
return new HashMapLocationTemplate(this);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import java.util.Collection;
|
|
4
|
+
|
|
5
|
+
public interface LocationDAO {
|
|
6
|
+
Collection<BackgroundLocation> getAllLocations();
|
|
7
|
+
Collection<BackgroundLocation> getValidLocations();
|
|
8
|
+
Collection<BackgroundLocation> getValidLocationsAndDelete();
|
|
9
|
+
BackgroundLocation getLocationById(long id);
|
|
10
|
+
BackgroundLocation getFirstUnpostedLocation();
|
|
11
|
+
BackgroundLocation getNextUnpostedLocation(long fromId);
|
|
12
|
+
long getUnpostedLocationsCount();
|
|
13
|
+
long getLocationsForSyncCount(long millisSinceLastBatch);
|
|
14
|
+
long persistLocation(BackgroundLocation location);
|
|
15
|
+
long persistLocation(BackgroundLocation location, int maxRows);
|
|
16
|
+
long persistLocationForSync(BackgroundLocation location, int maxRows);
|
|
17
|
+
void updateLocationForSync(long locationId);
|
|
18
|
+
void deleteLocationById(long locationId);
|
|
19
|
+
BackgroundLocation deleteFirstUnpostedLocation();
|
|
20
|
+
int deleteAllLocations();
|
|
21
|
+
int deleteUnpostedLocations();
|
|
22
|
+
/**
|
|
23
|
+
* Delete (mark as deleted) all locations that are pending sync to syncUrl.
|
|
24
|
+
* Same effect as discarding the pending sync queue without sending to server.
|
|
25
|
+
*/
|
|
26
|
+
int deletePendingSyncLocations();
|
|
27
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import org.json.JSONException;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Created by finch on 9.12.2017.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
public interface LocationTemplate {
|
|
10
|
+
Object locationToJson(BackgroundLocation location) throws JSONException;
|
|
11
|
+
boolean isEmpty();
|
|
12
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import com.marianhello.utils.Convert;
|
|
4
|
+
|
|
5
|
+
import org.json.JSONArray;
|
|
6
|
+
import org.json.JSONException;
|
|
7
|
+
import org.json.JSONObject;
|
|
8
|
+
import org.json.JSONTokener;
|
|
9
|
+
|
|
10
|
+
import java.util.ArrayList;
|
|
11
|
+
import java.util.HashMap;
|
|
12
|
+
import java.util.Iterator;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Created by finch on 9.12.2017.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
public class LocationTemplateFactory {
|
|
19
|
+
|
|
20
|
+
public static LocationTemplate fromJSON(Object json) throws JSONException {
|
|
21
|
+
if (json instanceof JSONObject) {
|
|
22
|
+
JSONObject jsonObject = (JSONObject) json;
|
|
23
|
+
|
|
24
|
+
return new HashMapLocationTemplate((HashMap) Convert.toMap(jsonObject));
|
|
25
|
+
} else if (json instanceof JSONArray) {
|
|
26
|
+
JSONArray jsonArray = (JSONArray) json;
|
|
27
|
+
|
|
28
|
+
return new ArrayListLocationTemplate((ArrayList) Convert.toList(jsonArray));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public static LocationTemplate fromJSONString(String jsonString) throws JSONException {
|
|
35
|
+
if (jsonString == null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
Object json = new JSONTokener(jsonString).nextValue();
|
|
39
|
+
return fromJSON(json);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public static LocationTemplate fromHashMap(HashMap template) {
|
|
43
|
+
return new HashMapLocationTemplate(template);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public static LocationTemplate fromArrayList(ArrayList template) {
|
|
47
|
+
return new ArrayListLocationTemplate(template);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public static LocationTemplate getDefault() {
|
|
51
|
+
HashMap attrs = new HashMap<String, String>();
|
|
52
|
+
attrs.put("provider", "@provider");
|
|
53
|
+
attrs.put("locationProvider", "@locationProvider");
|
|
54
|
+
attrs.put("time", "@time");
|
|
55
|
+
attrs.put("latitude", "@latitude");
|
|
56
|
+
attrs.put("longitude", "@longitude");
|
|
57
|
+
attrs.put("accuracy", "@accuracy");
|
|
58
|
+
attrs.put("altitudeAccuracy", "@altitudeAccuracy");
|
|
59
|
+
attrs.put("speed", "@speed");
|
|
60
|
+
attrs.put("altitude", "@altitude");
|
|
61
|
+
attrs.put("bearing", "@bearing");
|
|
62
|
+
attrs.put("radius", "@radius");
|
|
63
|
+
// v4.5.1 — README/CHANGELOG promete que el payload default incluye events/battery/isCharging.
|
|
64
|
+
// Como Config.getTemplate() siempre cae a este default si no hay postTemplate custom, hay
|
|
65
|
+
// que añadirlos aquí para que PostLocationTask + BatchManager los serialicen al backend.
|
|
66
|
+
attrs.put("events", "@events");
|
|
67
|
+
attrs.put("battery", "@battery");
|
|
68
|
+
attrs.put("isCharging", "@isCharging");
|
|
69
|
+
return new HashMapLocationTemplate(attrs);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import androidx.annotation.NonNull;
|
|
5
|
+
import androidx.annotation.Nullable;
|
|
6
|
+
|
|
7
|
+
public interface LocationTransform
|
|
8
|
+
{
|
|
9
|
+
/**
|
|
10
|
+
* Return a <code>BackgroundLocation</code>, either a new one or the same one after modification.
|
|
11
|
+
* Return <code>null</code> to prevent this location from being committed.
|
|
12
|
+
* @param context
|
|
13
|
+
* @param location - the input location
|
|
14
|
+
* @return the location that you want to actually commit
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
@Nullable
|
|
18
|
+
BackgroundLocation transformLocationBeforeCommit(@NonNull Context context, @NonNull BackgroundLocation location);
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package com.marianhello.bgloc.data;
|
|
2
|
+
|
|
3
|
+
import java.util.Collection;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* DAO for the current recording session locations.
|
|
7
|
+
* Session is independent of sync: locations are kept until startSession() or clearSession().
|
|
8
|
+
*/
|
|
9
|
+
public interface SessionLocationDAO {
|
|
10
|
+
/** Clear session table and set session active. Call when user starts a route. */
|
|
11
|
+
void startSession();
|
|
12
|
+
/** Clear session table and set session inactive. Call when route is finished and sync OK. */
|
|
13
|
+
void clearSession();
|
|
14
|
+
boolean isSessionActive();
|
|
15
|
+
void persistSessionLocation(BackgroundLocation location);
|
|
16
|
+
Collection<BackgroundLocation> getSessionLocations();
|
|
17
|
+
int getSessionLocationsCount();
|
|
18
|
+
}
|