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
@@ -14,7 +14,7 @@ def DEFAULT_TARGET_SDK_VERSION = 30
14
14
  def DEFAULT_APP_COMPAT_VERSION = "1.6.1"
15
15
 
16
16
  // Plugin dependencies
17
- def DEFAULT_PLAY_SERVICES_LOCATION_VERSION = "20.0.0"
17
+ def DEFAULT_PLAY_SERVICES_LOCATION_VERSION = "20.0.0"
18
18
  def DEFAULT_HMS_LOCATION_VERSION = "6.9.0.300"
19
19
  def DEFAULT_OK_HTTP_VERSION = "3.12.13"
20
20
  def DEFAULT_ANDROID_PERMISSIONS_VERSION = "2.1.6"
@@ -42,9 +42,14 @@ android {
42
42
  defaultConfig {
43
43
  minSdkVersion safeExtGet('minSdkVersion', 16)
44
44
  targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
45
+ consumerProguardFiles 'proguard-rules.pro'
45
46
  versionCode 1
46
47
  versionName "1.0"
47
48
  }
49
+ compileOptions {
50
+ sourceCompatibility JavaVersion.VERSION_1_8
51
+ targetCompatibility JavaVersion.VERSION_1_8
52
+ }
48
53
  }
49
54
 
50
55
  repositories{
@@ -98,4 +103,5 @@ dependencies {
98
103
  def workVersion = safeExtGet('workVersion', DEFAULT_WORK_VERSION)
99
104
  def concurrentFuturesVersion = safeExtGet('concurrentFuturesVersion', DEFAULT_CONCURRENT_FUTURES_VERSION)
100
105
  implementation "androidx.work:work-runtime:$workVersion"
101
- implementation "androidx.concurrent:concurrent-futures:$concurrentFuturesVersion"}
106
+ implementation "androidx.concurrent:concurrent-futures:$concurrentFuturesVersion"
107
+ }
@@ -0,0 +1 @@
1
+ d8523b683cf9d70e53317362389b81bebe6f1d9f
@@ -0,0 +1 @@
1
+ 328f8a4a248f6d9d5ae95fad7d996eca1470e7e0d56bad5cba04d0fabf8c6632
@@ -0,0 +1 @@
1
+ 18b6dea8cdb386ac662f7bbeff3a0061fa4855ae63e717db14a6009ed3027090407cc6c0ed97b566a260b57e1f8facbcdeb8b4424c47a27c237d6985878d75dd
@@ -4,6 +4,6 @@
4
4
  <modelVersion>4.0.0</modelVersion>
5
5
  <groupId>com.transistorsoft</groupId>
6
6
  <artifactId>tslocationmanager</artifactId>
7
- <version>3.6.3</version>
7
+ <version>3.6.4</version>
8
8
  <packaging>aar</packaging>
9
9
  </project>
@@ -0,0 +1 @@
1
+ d4c0e936144e9629f09726d231ffb65382d117f8
@@ -0,0 +1 @@
1
+ 29f18c0813aab1f46f264aae982c92a937c752f9d347371d0504db62885c615a
@@ -0,0 +1 @@
1
+ 1710cfc5d6b4638db7eca4ba894a346d024f6041c79cbcdd165c3da68939eac4e1e1cb5c5b4ea7d933d6576fab4db08e79301efb42073186349a90bf00b283ed
@@ -3,14 +3,15 @@
3
3
  <groupId>com.transistorsoft</groupId>
4
4
  <artifactId>tslocationmanager</artifactId>
5
5
  <versioning>
6
- <latest>3.6.3</latest>
7
- <release>3.6.3</release>
6
+ <latest>3.6.4</latest>
7
+ <release>3.6.4</release>
8
8
  <versions>
9
9
  <version>3.6.0</version>
10
10
  <version>3.6.1</version>
11
11
  <version>3.6.2</version>
12
12
  <version>3.6.3</version>
13
+ <version>3.6.4</version>
13
14
  </versions>
14
- <lastUpdated>20241112183131</lastUpdated>
15
+ <lastUpdated>20241203042324</lastUpdated>
15
16
  </versioning>
16
17
  </metadata>
@@ -0,0 +1 @@
1
+ 961d0d90ccb09bf5731a3a297c4e7fbacb9f24d20bdaa9dabc79b729d5a109eb
@@ -0,0 +1 @@
1
+ 01e530f5a7f3db6a9d9d436f345093e5538421d16b663daf9682317829d67bb9a80d4a58de10e485235744793ae039267335c0dc680c54bdc814a7bc31d4f01f
@@ -4,6 +4,6 @@
4
4
  <modelVersion>4.0.0</modelVersion>
5
5
  <groupId>com.transistorsoft</groupId>
6
6
  <artifactId>tslocationmanager-v21</artifactId>
7
- <version>3.6.3</version>
7
+ <version>3.6.4</version>
8
8
  <packaging>aar</packaging>
9
9
  </project>
@@ -0,0 +1 @@
1
+ 7e76a8d9ad740486eed08130a444e02a80959b615d0ae87899af8e85a3e0aa8b
@@ -0,0 +1 @@
1
+ 56a88d4d6a4ca5061f3061bd5bd950a0c6afa271c6bdc5cfa960d77c39092d902736ffc32c53c99c2e55c02ea85f27aeec646e1cc3baceb48160a54dd86fe9b2
@@ -3,14 +3,15 @@
3
3
  <groupId>com.transistorsoft</groupId>
4
4
  <artifactId>tslocationmanager-v21</artifactId>
5
5
  <versioning>
6
- <latest>3.6.3</latest>
7
- <release>3.6.3</release>
6
+ <latest>3.6.4</latest>
7
+ <release>3.6.4</release>
8
8
  <versions>
9
9
  <version>3.6.0</version>
10
10
  <version>3.6.1</version>
11
11
  <version>3.6.2</version>
12
12
  <version>3.6.3</version>
13
+ <version>3.6.4</version>
13
14
  </versions>
14
- <lastUpdated>20241112183131</lastUpdated>
15
+ <lastUpdated>20241203042324</lastUpdated>
15
16
  </versioning>
16
17
  </metadata>
@@ -1,4 +1,20 @@
1
1
  -keepnames class com.facebook.react.ReactActivity
2
+
3
+ # for react-native Headless on new architecture
4
+ -keep class com.facebook.react.defaults.DefaultNewArchitectureEntryPoint {
5
+ public <methods>;
6
+ }
7
+ -keep class com.facebook.react.ReactApplication {
8
+ public <methods>;
9
+ }
10
+ -keep class com.facebook.react.ReactHost {
11
+ public <methods>;
12
+ }
13
+ -keep class * extends com.facebook.react.ReactHost {
14
+ public <methods>;
15
+ }
16
+ -keep class com.facebook.react.fabric.** { *; }
17
+
2
18
  -keepnames class com.transistorsoft.rnbackgroundgeolocation.RNBackgroundGeolocation
3
19
 
4
20
  -keep class com.transistorsoft** { *; }
@@ -1,6 +1,3 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
- package="com.transistorsoft.rnbackgroundgeolocation">
3
-
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
4
2
  <application android:label="@string/app_name"></application>
5
-
6
3
  </manifest>
@@ -1,22 +1,12 @@
1
1
  package com.transistorsoft.rnbackgroundgeolocation;
2
2
 
3
- import android.content.Context;
4
- import android.os.Handler;
5
- import android.os.Looper;
6
-
7
- import com.facebook.react.ReactApplication;
8
- import com.facebook.react.ReactInstanceManager;
9
- import com.facebook.react.bridge.ReactContext;
10
- import com.facebook.react.bridge.UiThreadUtil;
11
3
  import com.facebook.react.bridge.WritableMap;
12
4
  import com.facebook.react.bridge.WritableNativeMap;
13
- import com.facebook.react.jstasks.HeadlessJsTaskConfig;
14
- import com.facebook.react.jstasks.HeadlessJsTaskContext;
15
- import com.facebook.react.jstasks.HeadlessJsTaskEventListener;
16
5
 
17
6
  import org.greenrobot.eventbus.Subscribe;
18
7
 
19
8
  import com.transistorsoft.locationmanager.adapter.BackgroundGeolocation;
9
+ import com.transistorsoft.locationmanager.event.FinishHeadlessTaskEvent;
20
10
  import com.transistorsoft.locationmanager.event.HeadlessEvent;
21
11
  import com.transistorsoft.locationmanager.logger.TSLog;
22
12
 
@@ -24,20 +14,23 @@ import org.greenrobot.eventbus.ThreadMode;
24
14
  import org.json.JSONException;
25
15
  import org.json.JSONObject;
26
16
 
27
- import java.util.ArrayList;
28
- import java.util.List;
29
-
30
17
  /**
18
+ * The BackgroundGeolocation SDK creates a single instance of this class (via reflection upon Config.headlessJobService)
19
+ * The SDK delivers events to this instance by dropping them onto EventBus (see @Subscribe). Because this instance is subscribed
20
+ * into EventBus, it's protected from GC.
21
+ *
31
22
  * Created by chris on 2018-01-23.
32
23
  */
33
24
 
34
25
  public class HeadlessTask {
35
- private static String HEADLESS_TASK_NAME = "BackgroundGeolocation";
36
- // Hard-coded time-limit for headless-tasks is 30000 @todo configurable?
37
- private static int TASK_TIMEOUT = 30000;
38
-
39
- private final List<Integer> mTasks = new ArrayList<>();
26
+ private static final String HEADLESS_TASK_NAME = "BackgroundGeolocation";
27
+ // Hard-coded time-limit for headless-tasks is 60000 @todo configurable?
28
+ private static final int TASK_TIMEOUT = 60000 * 2;
40
29
 
30
+ /**
31
+ * EventBus receiver for a HeadlessTask HeadlessEvent
32
+ * @param event
33
+ */
41
34
  @Subscribe(threadMode = ThreadMode.MAIN)
42
35
  public void onHeadlessEvent(HeadlessEvent event) {
43
36
  String name = event.getName();
@@ -95,81 +88,43 @@ public class HeadlessTask {
95
88
  } catch (JSONException e) {
96
89
  clientEvent.putNull("params");
97
90
  clientEvent.putString("error", e.getMessage());
98
- TSLog.logger.error(TSLog.error(e.getMessage()));
99
- e.printStackTrace();
91
+ TSLog.logger.error(TSLog.error(e.getMessage()), e);
100
92
  }
101
93
  }
102
94
 
103
- HeadlessJsTaskConfig config = new HeadlessJsTaskConfig(HEADLESS_TASK_NAME, clientEvent, TASK_TIMEOUT);
104
95
  try {
105
- startTask(event.getContext(), config);
106
- } catch (AssertionError e) {
107
- TSLog.logger.warn(TSLog.warn("Failed invoke HeadlessTask " + name + ". Task ignored." + e.getMessage()));
96
+ HeadlessTaskManager.getInstance().startTask(event.getContext(), new HeadlessTaskManager.Task.Builder()
97
+ .setName(HEADLESS_TASK_NAME)
98
+ .setParams(clientEvent)
99
+ .setTimeout(TASK_TIMEOUT)
100
+ .setOnInvokeCallback((reactContext, task) -> {
101
+ //TSLog.logger.debug("*** onInvoke: " + task.getId());
102
+ })
103
+ .setOnFinishCallback(taskId -> {
104
+ //TSLog.logger.debug("*** onFinish: " + taskId);
105
+ })
106
+ .setOnErrorCallback((task, e) -> {
107
+ TSLog.logger.warn("⚠\uFE0F HeadlessTaskError: " + e.getMessage() + ": " + task.toString());
108
+ })
109
+ .build()
110
+ );
111
+ } catch (Exception e) {
112
+ TSLog.logger.warn(TSLog.warn("Failed invoke HeadlessTask " + name + ". Task ignored: " + e.getMessage()));
113
+ e.printStackTrace();
108
114
  }
109
115
  }
110
116
 
111
117
  /**
112
- * Start a task. This method handles starting a new React instance if required.
113
- *
114
- * Has to be called on the UI thread.
115
- *
116
- * @param taskConfig describes what task to start and the parameters to pass to it
118
+ * EventBus Receiver. Called when developer runs BackgroundGeolocation.finishHeadlessTask(taskId) from within their registered HeadlessTask.
119
+ * Calls RN's HeadlessJsTaskContext.finishTask(taskId);
120
+ * @param event
117
121
  */
118
- private void startTask(Context context, final HeadlessJsTaskConfig taskConfig) throws AssertionError {
119
- ReactApplication reactApplication = ((ReactApplication) context);
120
-
121
- UiThreadUtil.assertOnUiThread();
122
- final ReactInstanceManager reactInstanceManager = reactApplication.getReactNativeHost().getReactInstanceManager();
123
-
124
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
125
- if (reactContext == null) {
126
- reactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
127
- @Override public void onReactContextInitialized(final ReactContext reactContext) {
128
- // Hack to fix unknown problem executing asynchronous BackgroundTask when ReactContext is created *first time*. Fixed by adding short delay before #invokeStartTask
129
- new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
130
- @Override
131
- public void run() {
132
- invoke(reactContext, taskConfig);
133
- }
134
- }, 500);
135
- reactInstanceManager.removeReactInstanceEventListener(this);
136
- }
137
- });
138
- if (!reactInstanceManager.hasStartedCreatingInitialContext()) {
139
- reactInstanceManager.createReactContextInBackground();
140
- }
141
- } else {
142
- invoke(reactContext, taskConfig);
143
- }
144
- }
145
-
146
- private void invoke(ReactContext reactContext, final HeadlessJsTaskConfig taskConfig) {
147
- final HeadlessJsTaskContext headlessJsTaskContext = HeadlessJsTaskContext.getInstance(reactContext);
148
-
149
- synchronized(mTasks) {
150
- if (mTasks.isEmpty()) {
151
- headlessJsTaskContext.addTaskEventListener(new HeadlessJsTaskEventListener() {
152
- @Override public void onHeadlessJsTaskStart(int taskId) {
153
- TSLog.logger.debug("taskId: " + taskId);
154
- }
155
- @Override public void onHeadlessJsTaskFinish(int taskId) {
156
- TSLog.logger.debug("taskId: " + taskId);
157
- synchronized (mTasks) {
158
- if (!mTasks.isEmpty()) {
159
- mTasks.remove(0);
160
- }
161
- if (mTasks.isEmpty()) {
162
- headlessJsTaskContext.removeTaskEventListener(this);
163
- }
164
- }
165
- }
166
- });
167
- }
168
- try {
169
- mTasks.add(headlessJsTaskContext.startTask(taskConfig));
170
- } catch (IllegalStateException e) {
171
- TSLog.logger.error(TSLog.error(e.getMessage()));
172
- }
122
+ @Subscribe(threadMode = ThreadMode.MAIN)
123
+ public void onFinishHeadlessTask(FinishHeadlessTaskEvent event) {
124
+ try {
125
+ HeadlessTaskManager.getInstance().finishTask(event.getContext(), event.getTaskId());
126
+ } catch (Exception e) {
127
+ TSLog.logger.warn(TSLog.warn(e.getMessage()));
173
128
  }
174
129
  }
175
130
  }