@josuelmm/cordova-background-geolocation 3.2.0 → 4.2.2

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.
Files changed (51) hide show
  1. package/.npmignore +4 -0
  2. package/CHANGELOG.md +290 -0
  3. package/CLAUDE.md +56 -0
  4. package/HISTORY.md +125 -0
  5. package/README.md +189 -4
  6. package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +90 -0
  7. package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +310 -1
  8. package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +127 -0
  9. package/android/common/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +27 -11
  10. package/android/common/src/main/java/com/marianhello/bgloc/Config.java +268 -0
  11. package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +86 -26
  12. package/android/common/src/main/java/com/marianhello/bgloc/PluginDelegate.java +26 -0
  13. package/android/common/src/main/java/com/marianhello/bgloc/PostLocationTask.java +42 -5
  14. package/android/common/src/main/java/com/marianhello/bgloc/driving/DrivingEventsDetector.java +265 -0
  15. package/android/common/src/main/java/com/marianhello/bgloc/http/UrlTemplateResolver.java +115 -0
  16. package/android/common/src/main/java/com/marianhello/bgloc/oem/BatteryOemHelper.java +214 -0
  17. package/android/common/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +13 -9
  18. package/android/common/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +29 -40
  19. package/android/common/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +14 -34
  20. package/android/common/src/main/java/com/marianhello/bgloc/sensor/SensorFusionDetector.java +199 -0
  21. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +305 -6
  22. package/android/common/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +14 -2
  23. package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +50 -3
  24. package/android/dependencies.gradle +0 -3
  25. package/angular/background-geolocation-events.ts +21 -0
  26. package/angular/background-geolocation.service.ts +63 -0
  27. package/angular/dist/background-geolocation-events.d.ts +18 -1
  28. package/angular/dist/background-geolocation.service.d.ts +36 -0
  29. package/angular/dist/esm2022/background-geolocation-events.mjs +22 -1
  30. package/angular/dist/esm2022/background-geolocation.service.mjs +35 -1
  31. package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs +55 -0
  32. package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs.map +1 -1
  33. package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +312 -1
  34. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +22 -0
  35. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +400 -15
  36. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +12 -0
  37. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +83 -5
  38. package/ios/common/BackgroundGeolocation/MAURConfig.h +15 -0
  39. package/ios/common/BackgroundGeolocation/MAURConfig.m +100 -3
  40. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +29 -2
  41. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +4 -0
  42. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +97 -44
  43. package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.h +41 -0
  44. package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.m +137 -0
  45. package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.h +31 -0
  46. package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.m +107 -0
  47. package/package.json +41 -1
  48. package/plugin.xml +19 -8
  49. package/www/BackgroundGeolocation.d.ts +517 -3
  50. package/www/BackgroundGeolocation.js +54 -1
  51. package/RELEASE.MD +0 -16
@@ -0,0 +1,107 @@
1
+ //
2
+ // MAURUrlTemplateResolver.m
3
+ // BackgroundGeolocation
4
+ //
5
+
6
+ #import "MAURUrlTemplateResolver.h"
7
+ #import "MAURLocation.h"
8
+
9
+ @implementation MAURUrlTemplateResolver
10
+
11
+ + (NSString *)resolve:(NSString *)urlTemplate
12
+ location:(MAURLocation *)location
13
+ queryParams:(NSDictionary *)queryParams
14
+ {
15
+ if (urlTemplate == nil || urlTemplate.length == 0) return urlTemplate;
16
+
17
+ NSDictionary *ctx = [self buildContext:location queryParams:queryParams];
18
+
19
+ NSError *error = nil;
20
+ NSRegularExpression *regex = [NSRegularExpression
21
+ regularExpressionWithPattern:@"\\{([a-zA-Z0-9_]+)\\}"
22
+ options:0
23
+ error:&error];
24
+ if (regex == nil) return urlTemplate;
25
+
26
+ NSMutableString *result = [NSMutableString stringWithString:urlTemplate];
27
+ NSArray *matches = [regex matchesInString:urlTemplate
28
+ options:0
29
+ range:NSMakeRange(0, urlTemplate.length)];
30
+
31
+ // Iterate in reverse so ranges don't shift.
32
+ for (NSTextCheckingResult *match in [matches reverseObjectEnumerator]) {
33
+ NSString *key = [urlTemplate substringWithRange:[match rangeAtIndex:1]];
34
+ NSString *value = ctx[key];
35
+ if (value != nil) {
36
+ NSString *encoded = [self urlEncode:value];
37
+ [result replaceCharactersInRange:[match range] withString:encoded];
38
+ }
39
+ // else: leave the placeholder as-is.
40
+ }
41
+ return result;
42
+ }
43
+
44
+ + (NSDictionary *)buildContext:(MAURLocation *)loc queryParams:(NSDictionary *)queryParams
45
+ {
46
+ NSMutableDictionary *ctx = [NSMutableDictionary dictionary];
47
+
48
+ // queryParams first; location-derived values can override below.
49
+ if (queryParams != nil) {
50
+ for (id key in queryParams) {
51
+ id value = queryParams[key];
52
+ if (value != nil && value != [NSNull null]) {
53
+ ctx[key] = [NSString stringWithFormat:@"%@", value];
54
+ }
55
+ }
56
+ }
57
+
58
+ if (loc != nil) {
59
+ if (loc.latitude != nil) {
60
+ ctx[@"latitude"] = [loc.latitude stringValue];
61
+ ctx[@"lat"] = [loc.latitude stringValue];
62
+ }
63
+ if (loc.longitude != nil) {
64
+ ctx[@"longitude"] = [loc.longitude stringValue];
65
+ ctx[@"lon"] = [loc.longitude stringValue];
66
+ }
67
+ if (loc.time != nil) {
68
+ long long ms = (long long)([loc.time timeIntervalSince1970] * 1000.0);
69
+ ctx[@"time"] = [NSString stringWithFormat:@"%lld", ms];
70
+ ctx[@"timestamp"] = [NSString stringWithFormat:@"%lld", ms];
71
+ ctx[@"timestamp_iso"] = [self isoUtc:loc.time];
72
+ }
73
+ if (loc.speed != nil) ctx[@"speed"] = [loc.speed stringValue];
74
+ if (loc.altitude != nil) ctx[@"altitude"] = [loc.altitude stringValue];
75
+ if (loc.heading != nil) ctx[@"bearing"] = [loc.heading stringValue];
76
+ if (loc.accuracy != nil) ctx[@"accuracy"] = [loc.accuracy stringValue];
77
+ if (loc.provider != nil) ctx[@"provider"] = loc.provider;
78
+ }
79
+
80
+ return ctx;
81
+ }
82
+
83
+ + (NSString *)urlEncode:(NSString *)s
84
+ {
85
+ if (s == nil) return @"";
86
+ NSCharacterSet *allowed = [NSCharacterSet URLQueryAllowedCharacterSet];
87
+ NSString *enc = [s stringByAddingPercentEncodingWithAllowedCharacters:allowed];
88
+ // URLQueryAllowedCharacterSet leaves "+" and "&" unescaped which is unsafe in values.
89
+ enc = [enc stringByReplacingOccurrencesOfString:@"&" withString:@"%26"];
90
+ enc = [enc stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
91
+ return enc != nil ? enc : s;
92
+ }
93
+
94
+ + (NSString *)isoUtc:(NSDate *)date
95
+ {
96
+ static NSDateFormatter *fmt = nil;
97
+ static dispatch_once_t onceToken;
98
+ dispatch_once(&onceToken, ^{
99
+ fmt = [[NSDateFormatter alloc] init];
100
+ fmt.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss'Z'";
101
+ fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
102
+ fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
103
+ });
104
+ return [fmt stringFromDate:date];
105
+ }
106
+
107
+ @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@josuelmm/cordova-background-geolocation",
3
- "version": "3.2.0",
3
+ "version": "4.2.2",
4
4
  "description": "Cordova Background Geolocation (fork actualizado)",
5
5
  "main": "./www/BackgroundGeolocation.js",
6
6
  "types": "./www/BackgroundGeolocation.d.ts",
@@ -64,6 +64,46 @@
64
64
  "cordova": ">=8.0.0",
65
65
  "cordova-android": ">=8.0.0",
66
66
  "cordova-ios": ">=6.0.0"
67
+ },
68
+ "3.3.0": {
69
+ "cordova": ">=10.0.0",
70
+ "cordova-android": ">=12.0.0",
71
+ "cordova-ios": ">=6.0.0"
72
+ },
73
+ "3.4.0": {
74
+ "cordova": ">=10.0.0",
75
+ "cordova-android": ">=12.0.0",
76
+ "cordova-ios": ">=6.2.0"
77
+ },
78
+ "3.5.0": {
79
+ "cordova": ">=10.0.0",
80
+ "cordova-android": ">=12.0.0",
81
+ "cordova-ios": ">=6.2.0"
82
+ },
83
+ "3.6.0": {
84
+ "cordova": ">=10.0.0",
85
+ "cordova-android": ">=12.0.0",
86
+ "cordova-ios": ">=6.2.0"
87
+ },
88
+ "4.0.0": {
89
+ "cordova": ">=10.0.0",
90
+ "cordova-android": ">=12.0.0",
91
+ "cordova-ios": ">=6.2.0"
92
+ },
93
+ "4.1.0": {
94
+ "cordova": ">=10.0.0",
95
+ "cordova-android": ">=12.0.0",
96
+ "cordova-ios": ">=6.2.0"
97
+ },
98
+ "4.2.0": {
99
+ "cordova": ">=10.0.0",
100
+ "cordova-android": ">=12.0.0",
101
+ "cordova-ios": ">=6.2.0"
102
+ },
103
+ "4.2.2": {
104
+ "cordova": ">=10.0.0",
105
+ "cordova-android": ">=12.0.0",
106
+ "cordova-ios": ">=6.2.0"
67
107
  }
68
108
  }
69
109
  },
package/plugin.xml CHANGED
@@ -2,16 +2,16 @@
2
2
  <plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
3
3
  xmlns:android="http://schemas.android.com/apk/res/android"
4
4
  id="cordova-background-geolocation"
5
- version="3.2.0">
5
+ version="4.2.2">
6
6
  <name>cordova-background-geolocation</name>
7
7
  <description>Cordova Background Geolocation Plugin</description>
8
8
  <license>Apache-2.0</license>
9
9
  <keywords>cordova,phonegap,background,geolocation,gps,location</keywords>
10
10
 
11
11
  <engines>
12
- <engine name="cordova" version=">=8.0.0"/>
13
- <engine name="cordova-android" version=">=8.0.0"/>
14
- <engine name="cordova-ios" version=">=6.0.0"/>
12
+ <engine name="cordova" version=">=10.0.0"/>
13
+ <engine name="cordova-android" version=">=12.0.0"/>
14
+ <engine name="cordova-ios" version=">=6.2.0"/>
15
15
  </engines>
16
16
 
17
17
  <js-module src="www/BackgroundGeolocation.js" name="BackgroundGeolocation">
@@ -23,7 +23,7 @@
23
23
 
24
24
  <!-- android -->
25
25
  <platform name="android">
26
- <preference name="GOOGLE_PLAY_SERVICES_VERSION" default="17+"/>
26
+ <preference name="GOOGLE_PLAY_SERVICES_VERSION" default="21.0.1"/>
27
27
  <preference name="ICON" default="@mipmap/ic_launcher" />
28
28
  <preference name="SMALL_ICON" default="@mipmap/ic_launcher" />
29
29
  <preference name="ACCOUNT_NAME" default="@string/app_name" />
@@ -84,6 +84,10 @@
84
84
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java" target-dir="src/com/marianhello/bgloc/headless" />
85
85
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java" target-dir="src/com/marianhello/bgloc/headless" />
86
86
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java" target-dir="src/com/marianhello/bgloc" />
87
+ <source-file src="android/common/src/main/java/com/marianhello/bgloc/http/UrlTemplateResolver.java" target-dir="src/com/marianhello/bgloc/http" />
88
+ <source-file src="android/common/src/main/java/com/marianhello/bgloc/oem/BatteryOemHelper.java" target-dir="src/com/marianhello/bgloc/oem" />
89
+ <source-file src="android/common/src/main/java/com/marianhello/bgloc/driving/DrivingEventsDetector.java" target-dir="src/com/marianhello/bgloc/driving" />
90
+ <source-file src="android/common/src/main/java/com/marianhello/bgloc/sensor/SensorFusionDetector.java" target-dir="src/com/marianhello/bgloc/sensor" />
87
91
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/LocationManager.java" target-dir="src/com/marianhello/bgloc" />
88
92
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/PluginDelegate.java" target-dir="src/com/marianhello/bgloc" />
89
93
  <source-file src="android/common/src/main/java/com/marianhello/bgloc/PluginException.java" target-dir="src/com/marianhello/bgloc" />
@@ -160,7 +164,7 @@
160
164
  android:enabled="true"
161
165
  android:exported="false"
162
166
  android:name="com.marianhello.bgloc.service.LocationServiceImpl"
163
- android:foregroundServiceType="location|dataSync"
167
+ android:foregroundServiceType="location"
164
168
  />
165
169
  <receiver
166
170
  android:name="com.marianhello.bgloc.BootCompletedReceiver"
@@ -168,9 +172,11 @@
168
172
  android:exported="true">
169
173
  <intent-filter>
170
174
  <action android:name="android.intent.action.BOOT_COMPLETED" />
175
+ <action android:name="android.intent.action.QUICKBOOT_POWERON" />
176
+ <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
177
+ <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
171
178
  </intent-filter>
172
179
  </receiver>
173
- <uses-library android:name="org.apache.http.legacy" android:required="true" />
174
180
  </config-file>
175
181
 
176
182
  <config-file target="AndroidManifest.xml" parent="/manifest">
@@ -183,11 +189,11 @@
183
189
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
184
190
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
185
191
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
192
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
186
193
  <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
187
194
  <uses-permission android:name="android.permission.INTERNET" />
188
195
  <uses-permission android:name="android.permission.WAKE_LOCK" />
189
196
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
190
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
191
197
  <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
192
198
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
193
199
  <uses-permission android:name="android.hardware.location" />
@@ -269,6 +275,7 @@
269
275
  </feature>
270
276
  </config-file>
271
277
  <framework src="CoreLocation.framework" />
278
+ <framework src="CoreMotion.framework" />
272
279
  <framework src="SystemConfiguration.framework" />
273
280
  <framework src="AudioToolbox.framework" weak="true" />
274
281
  <framework src="AVFoundation.framework" weak="true" />
@@ -325,6 +332,10 @@
325
332
  <header-file src="ios/common/BackgroundGeolocation/MAURLogging.h" />
326
333
  <header-file src="ios/common/BackgroundGeolocation/MAURPostLocationTask.h" />
327
334
  <source-file src="ios/common/BackgroundGeolocation/MAURPostLocationTask.m" />
335
+ <header-file src="ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.h" />
336
+ <source-file src="ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.m" />
337
+ <header-file src="ios/common/BackgroundGeolocation/MAURSensorFusionDetector.h" />
338
+ <source-file src="ios/common/BackgroundGeolocation/MAURSensorFusionDetector.m" />
328
339
  <header-file src="ios/common/BackgroundGeolocation/MAURProviderDelegate.h" />
329
340
  <header-file src="ios/common/BackgroundGeolocation/MAURRawLocationProvider.h" />
330
341
  <source-file src="ios/common/BackgroundGeolocation/MAURRawLocationProvider.m" />