react-native-background-geolocation 4.17.6 → 4.18.1

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 (53) hide show
  1. package/android/build.gradle +8 -2
  2. package/android/libs/com/transistorsoft/{tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.aar → tslocationmanager/3.6.4/tslocationmanager-3.6.4.aar} +0 -0
  3. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.aar.md5 +1 -0
  4. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.aar.sha1 +1 -0
  5. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.aar.sha256 +1 -0
  6. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.aar.sha512 +1 -0
  7. package/android/libs/com/transistorsoft/tslocationmanager/{3.6.3/tslocationmanager-3.6.3.pom → 3.6.4/tslocationmanager-3.6.4.pom} +1 -1
  8. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.pom.md5 +1 -0
  9. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.pom.sha1 +1 -0
  10. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.pom.sha256 +1 -0
  11. package/android/libs/com/transistorsoft/tslocationmanager/3.6.4/tslocationmanager-3.6.4.pom.sha512 +1 -0
  12. package/android/libs/com/transistorsoft/tslocationmanager/maven-metadata.xml +4 -3
  13. package/android/libs/com/transistorsoft/{tslocationmanager/3.6.3/tslocationmanager-3.6.3.aar → tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.aar} +0 -0
  14. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.aar.md5 +1 -0
  15. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.aar.sha1 +1 -0
  16. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.aar.sha256 +1 -0
  17. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.aar.sha512 +1 -0
  18. package/android/libs/com/transistorsoft/tslocationmanager-v21/{3.6.3/tslocationmanager-v21-3.6.3.pom → 3.6.4/tslocationmanager-v21-3.6.4.pom} +1 -1
  19. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.pom.md5 +1 -0
  20. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.pom.sha1 +1 -0
  21. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.pom.sha256 +1 -0
  22. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.4/tslocationmanager-v21-3.6.4.pom.sha512 +1 -0
  23. package/android/libs/com/transistorsoft/tslocationmanager-v21/maven-metadata.xml +4 -3
  24. package/android/proguard-rules.pro +16 -0
  25. package/android/src/main/AndroidManifest.xml +1 -4
  26. package/android/src/main/java/com/transistorsoft/rnbackgroundgeolocation/HeadlessTask.java +40 -85
  27. package/android/src/main/java/com/transistorsoft/rnbackgroundgeolocation/HeadlessTaskManager.java +460 -0
  28. package/android/src/main/java/com/transistorsoft/rnbackgroundgeolocation/RNBackgroundGeolocationModule.java +25 -0
  29. package/expo/plugin/build/androidPlugin.js +0 -8
  30. package/expo/plugin/build/androidPlugin.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/NativeModule.js +12 -1
  33. package/src/declarations/BackgroundGeolocation.d.ts +65 -14
  34. package/src/declarations/interfaces/Config.d.ts +4 -2
  35. package/src/declarations/interfaces/HeadlessEvent.d.ts +49 -0
  36. package/src/declarations/types.d.ts +3 -0
  37. package/src/index.js +36 -7
  38. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.aar.md5 +0 -1
  39. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.aar.sha1 +0 -1
  40. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.aar.sha256 +0 -1
  41. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.aar.sha512 +0 -1
  42. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.pom.md5 +0 -1
  43. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.pom.sha1 +0 -1
  44. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.pom.sha256 +0 -1
  45. package/android/libs/com/transistorsoft/tslocationmanager/3.6.3/tslocationmanager-3.6.3.pom.sha512 +0 -1
  46. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.aar.md5 +0 -1
  47. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.aar.sha1 +0 -1
  48. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.aar.sha256 +0 -1
  49. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.aar.sha512 +0 -1
  50. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.pom.md5 +0 -1
  51. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.pom.sha1 +0 -1
  52. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.pom.sha256 +0 -1
  53. package/android/libs/com/transistorsoft/tslocationmanager-v21/3.6.3/tslocationmanager-v21-3.6.3.pom.sha512 +0 -1
@@ -6,6 +6,7 @@
6
6
  /// <reference path="interfaces/GeofenceEvent.d.ts" />
7
7
  /// <reference path="interfaces/GeofencesChangeEvent.d.ts" />
8
8
  /// <reference path="interfaces/HeartbeatEvent.d.ts" />
9
+ /// <reference path="interfaces/HeadlessEvent.d.ts" />
9
10
  /// <reference path="interfaces/HttpEvent.d.ts" />
10
11
  /// <reference path="interfaces/Location.d.ts" />
11
12
  /// <reference path="interfaces/LocationAuthorizationAlert.d.ts" />
@@ -674,33 +675,77 @@ declare module "react-native-background-geolocation" {
674
675
  *
675
676
  * ### ⚠️ Warning:
676
677
  * - You __must__ `registerHeadlessTask` in your application root file (eg: `index.js`).
678
+ *
679
+ * ### ⚠️ Warning:
680
+ * - Your `function` __must__ be declared as `async`. You must `await` all work within your task. Your headless-task will automatically be terminated after executing the last line of your function.
677
681
  *
678
682
  * @example
679
683
  * ```typescript
680
684
  * const BackgroundGeolocationHeadlessTask = async (event) => {
681
- * let params = event.params;
682
- * console.log("[BackgroundGeolocation HeadlessTask] -", event.name, params);
683
- *
684
- * switch (event.name) {
685
- * case "heartbeat":
686
- * // Use await for async tasks
687
- * let location = await BackgroundGeolocation.getCurrentPosition({
688
- * samples: 1,
689
- * persist: false
690
- * });
691
- * console.log("[BackgroundGeolocation HeadlessTask] - getCurrentPosition:", location);
692
- * break;
693
- * }
685
+ * const params = event.params;
686
+ * console.log("[BackgroundGeolocation HeadlessTask] -", event.name, params);
687
+ *
688
+ * switch (event.name) {
689
+ * case "terminate":
690
+ * // Use await for async tasks
691
+ * const location = await BackgroundGeolocation.getCurrentPosition({
692
+ * samples: 1,
693
+ * persist: false
694
+ * });
695
+ * console.log("[BackgroundGeolocation HeadlessTask] - getCurrentPosition:", location);
696
+ * break;
697
+ * }
698
+ * // You must await all work you do in your task.
699
+ * // Headless-tasks are automatically terminated after executing the last line of your function.
700
+ * await doWork();
694
701
  * }
695
702
  *
696
703
  * BackgroundGeolocation.registerHeadlessTask(BackgroundGeolocationHeadlessTask);
697
704
  * ```
698
705
  *
706
+ * ### Debugging
707
+ *
708
+ * While implementing your headless-task It's crucial to observe your Android logs in a terminal via
709
+ *
710
+ * ```bash
711
+ * $ adb logcat *:S TSLocationManager:V ReactNativeJS:V
712
+ *
713
+ * TSLocationManager: [c.t.r.HeadlessTask onHeadlessEvent] 💀 event: connectivitychange
714
+ * TSLocationManager: [c.t.r.HeadlessTask createReactContextAndScheduleTask] initialize ReactContext
715
+ * TSLocationManager: [c.t.r.HeadlessTask onHeadlessEvent] 💀 event: providerchange
716
+ * TSLocationManager: [c.t.r.HeadlessTask onHeadlessEvent] 💀 event: terminate
717
+ * ReactNativeJS: '[BGGeoHeadlessTask] ', 'connectivitychange', taskId: 1
718
+ * TSLocationManager: [c.t.r.HeadlessTask invokeStartTask] taskId: 1
719
+ * TSLocationManager: [c.t.r.HeadlessTask invokeStartTask] taskId: 2
720
+ * TSLocationManager: [c.t.r.HeadlessTask invokeStartTask] taskId: 3
721
+ * ReactNativeJS: '[BGGeoHeadlessTask] ', 'providerchange', taskId: 2
722
+ * ReactNativeJS: '[BGGeoHeadlessTask] ', 'terminate', taskId: 3
723
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task start] ⏳ startBackgroundTask: 1
724
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task start] ⏳ startBackgroundTask: 2
725
+ * ReactNativeJS: *** [doWork] START
726
+ * ReactNativeJS: *** [doWork] START
727
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task start] ⏳ startBackgroundTask: 3
728
+ * ReactNativeJS: *** [doWork] START
729
+ * .
730
+ * .
731
+ * .
732
+ * ReactNativeJS: *** [doWork] FINISH
733
+ * ReactNativeJS: *** [doWork] FINISH
734
+ * ReactNativeJS: *** [doWork] FINISH
735
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task stop] ⏳ stopBackgroundTask: 1
736
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task stop] ⏳ stopBackgroundTask: 2
737
+ * TSLocationManager: [c.t.l.u.BackgroundTaskManager$Task stop] ⏳ stopBackgroundTask: 3
738
+ * TSLocationManager: [c.t.r.HeadlessTask$1 onHeadlessJsTaskFinish] taskId: 1
739
+ * TSLocationManager: [c.t.r.HeadlessTask$1 onHeadlessJsTaskFinish] taskId: 2
740
+ * TSLocationManager: [c.t.r.HeadlessTask$1 onHeadlessJsTaskFinish] taskId: 3
741
+ * ```
742
+ *
699
743
  * ### ℹ️ See also:
700
744
  * - 📘 [Android Headless Mode](github:wiki/Android-Headless-Mode).
745
+ * - [[Config.enableHeadless]]
701
746
  *
702
747
  */
703
- static registerHeadlessTask(callback:(event:Object)=> Promise<void>): void;
748
+ static registerHeadlessTask(callback:(event:HeadlessEvent)=> Promise<void>): void;
704
749
 
705
750
  /**
706
751
  *
@@ -1032,6 +1077,12 @@ declare module "react-native-background-geolocation" {
1032
1077
  */
1033
1078
  static finish(taskId: number, success?: Function, failure?: Function): Promise<number>;
1034
1079
 
1080
+ /**
1081
+ * @private
1082
+ * __[Android-only]__ Signals completion of an Android headless-task (see [[Config.enableHeadless]])
1083
+ */
1084
+ static finishHeadlessTask(taskId: number, success?: Function, failure?: Function): Promise<number>;
1085
+
1035
1086
  /**
1036
1087
  * Retrieves the current [[Location]].
1037
1088
  *
@@ -2250,13 +2250,15 @@ declare module "react-native-background-geolocation" {
2250
2250
  * __`[Android only]`__ Enables "Headless" operation allowing you to respond to events after you app has been terminated with [[stopOnTerminate]] __`false`__.
2251
2251
  * @break
2252
2252
  *
2253
- * Defaults to __`false`__. In this Android terminated state, where only the plugin's foreground-service remains running, you can respond to all the plugin's events with your own callback.
2253
+ * Defaults to __`false`__. In this Android terminated state, where only the plugin's foreground-service remains running, you can respond to all the plugin's events with your own callback. For more information, see [[BackgroundGeolocation.registerHeadlessTask]].
2254
2254
  *
2255
2255
  * ### ℹ️ Note:
2256
2256
  * - Requires [[stopOnTerminate]] __`false`__.
2257
2257
  * - If you've configured [[stopOnTerminate]] __`false`__, [[BackgroundGeolocation]] will continue to record locations (and post them to your configured [[url]]) *regardless of* __`enabledHeadless: true`__. You should enable this option *only if* you wish to perform some custom work during the headless state (for example, posting a local notification).
2258
- * - For more information, see the Wiki [Android Headless Mode](github:wiki/Android-Headless-Mode).
2259
2258
  *
2259
+ * ### ℹ️ See also:
2260
+ * - 📘 [Android Headless Mode](github:wiki/Android-Headless-Mode).
2261
+ * - [[BackgroundGeolocation.registerHeadlessTask]]
2260
2262
  */
2261
2263
  enableHeadless?: boolean;
2262
2264
 
@@ -0,0 +1,49 @@
1
+ /// <reference path="../types.d.ts" />
2
+
3
+
4
+ declare module "react-native-background-geolocation" {
5
+ /**
6
+ * This is the event-object provided to Android headless-tasks registered via [[BackgroundGeolocation.registerHeadlessTask]].
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const BackgroundGeolocationHeadlessTask = async (event) => {
11
+ * const params = event.params;
12
+ * console.log("[BackgroundGeolocation HeadlessTask] -", event.name, params);
13
+ *
14
+ * switch (event.name) {
15
+ * case "terminate":
16
+ * // Use await for async tasks
17
+ * const location = await BackgroundGeolocation.getCurrentPosition({
18
+ * samples: 1,
19
+ * persist: false
20
+ * });
21
+ * console.log("[BackgroundGeolocation HeadlessTask] - getCurrentPosition:", location);
22
+ * break;
23
+ * }
24
+ * // You must await all work you do in your task.
25
+ * // Headless-tasks are automatically terminated after executing the last line of your function.
26
+ * await doWork();
27
+ * }
28
+ *
29
+ * BackgroundGeolocation.registerHeadlessTask(BackgroundGeolocationHeadlessTask);
30
+ * ```
31
+ *
32
+ * ### ℹ️ See also:
33
+ * - 📘 [Android Headless Mode](github:wiki/Android-Headless-Mode).
34
+ * - [[BackgroundGeolocation.registerHeadlessTask]]
35
+ * - [[Config.enableHeadless]]
36
+ *
37
+ */
38
+ interface HeadlessEvent {
39
+ /**
40
+ * BackgroundGeolocation event name (eg: `location`, `motionchange`, `terminate`, `http`, etc).
41
+ */
42
+ name: Event;
43
+ /**
44
+ * General event params according to the context of the event name.
45
+ */
46
+ params: Map;
47
+ }
48
+ }
49
+
@@ -157,6 +157,8 @@ declare module "react-native-background-geolocation" {
157
157
 
158
158
  type PersistMode = -1 | 0 | 1 | 2;
159
159
 
160
+ type Map = {[key: string]: string|null|number|boolean|Map|string[]|number[]|number[][]|boolean[]|Map[]};
161
+
160
162
  type Extras = {[key: string]: string|null|number|boolean|Extras|string[]|number[]|number[][]|boolean[]|Extras[]};
161
163
 
162
164
  /**
@@ -185,4 +187,5 @@ declare module "react-native-background-geolocation" {
185
187
  * - See [[onActivityChange]] and [[Location.activity]].
186
188
  */
187
189
  type MotionActivityType = "unknown" | "still" | "walking" | "on_foot" | "running" | "on_bicycle" | "in_vehicle";
190
+
188
191
  }
package/src/index.js CHANGED
@@ -131,13 +131,6 @@ export default class BackgroundGeolocation {
131
131
  return _deviceSettingsInstance;
132
132
  }
133
133
 
134
- /**
135
- * Register HeadlessTask
136
- */
137
- static registerHeadlessTask(task) {
138
- AppRegistry.registerHeadlessTask(TAG, () => task);
139
- }
140
-
141
134
  /**
142
135
  * Core Plugin Control Methods
143
136
  */
@@ -380,6 +373,42 @@ export default class BackgroundGeolocation {
380
373
  static finish(taskId, success, failure) {
381
374
  this.stopBackgroundTask.apply(this, arguments);
382
375
  }
376
+
377
+ /**
378
+ * Register HeadlessTask
379
+ * Have to wrap execution to finish our own headless-task because there's an unknown issue with TurboModules in new arch
380
+ * where RN's HeadlessJsTaskSupport is null. That module can automatically finish RN headless-tasks.
381
+ */
382
+ static registerHeadlessTask(taskProvider) {
383
+ AppRegistry.registerHeadlessTask(TAG, () => {
384
+ // return to RN's AppRegistry a Function that returns a Promise.
385
+ return (event) => {
386
+ return new Promise((resolve, reject) => {
387
+ const taskId = event._transistorHeadlessTaskId;
388
+ delete(event._transistorHeadlessTaskId);
389
+ taskProvider(event).then(() => {
390
+ BackgroundGeolocation.finishHeadlessTask(taskId);
391
+ resolve();
392
+ }).catch(reason => {
393
+ BackgroundGeolocation.finishHeadlessTask(taskId);
394
+ reject(reason);
395
+ });
396
+ });
397
+ }
398
+ });
399
+ }
400
+
401
+ /**
402
+ * @private
403
+ * Signal completion of a react-native headless-task. This helps RN free-up resources allocated to the headless-task execution.
404
+ */
405
+ static finishHeadlessTask(taskId, success, failure) {
406
+ if (arguments.length == 1) {
407
+ return NativeModule.finishHeadlessTask(taskId);
408
+ } else {
409
+ NativeModule.finishHeadlessTask(taskId).then(success).catch(failure);
410
+ }
411
+ }
383
412
  /**
384
413
  * Toggle motion-state between stationary <-> moving
385
414
  */
@@ -1 +0,0 @@
1
- 5941e344c5f1805782c9ab2b3d8d73a4ab248e4c
@@ -1 +0,0 @@
1
- 9ca7098540ac237b9b843c2a365fc9ae4ed1152b7613af9e8a86c1132efb60bc
@@ -1 +0,0 @@
1
- 26b7c825a14409d3106c8327826a5e6b52965533686d33801e951f1ba30ca9bc0f4b451d08bdb02e80da102cb8ee96cef4174ffac825ca91f1cc6e044b11b3d3
@@ -1 +0,0 @@
1
- 02cea8fc14a328cdb0ea3ae1bf24531633f0894e
@@ -1 +0,0 @@
1
- 84d33712aff68004a83fc684edfbc789e75c9f5dee6e518c5d65a26f2470400a
@@ -1 +0,0 @@
1
- 8ac0ece17f7b793e497951b0f3559868b921abf71ec5104f6b03c8cafdd5c8be340a00b3a2c4e4aa7d0aeeeb4b52ffc7c31303a34a8ae9d3b6b18e66893b7ae3
@@ -1 +0,0 @@
1
- b1ff74273787634c743e423601d64f165fcf70ec
@@ -1 +0,0 @@
1
- 52d7b676b1632f68b847821a4c298b5e3f5b92c22f043e404fb6b028cb8caf59
@@ -1 +0,0 @@
1
- ded64b948711582c957b144560e4c5e6d148cbba1b5fdcb5dace23c5c1f5f254190704f194185434dc5c0fd4a5274541e668615a6b5cfc66ed5d8312315acebf
@@ -1 +0,0 @@
1
- 7ba36349cd28cfc7ce6a4850fae8428ca2dccae4
@@ -1 +0,0 @@
1
- 87332ef41c56163ba7b7a03be1f0bd3bfa7acdbcf79ec4abc4f0d445165f27ac
@@ -1 +0,0 @@
1
- bbac4028863c96f7f6dc52e4fbfbe5212b01dee05e0aae5cff08442e907557d8f40c4d04c4c0858fe97f939ee978f38b646c58746addd66f93074ec25257390e