react-native-spike-sdk 2.2.3 → 2.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,29 +78,29 @@ Add Health Kit permissions descriptions to your `Info.plist` file.
78
78
  First of all you have to add the required health permissions to your "AndroidManifest.xml" file
79
79
 
80
80
  ```xml
81
- <uses-permission android:name="android.permission.health.READ_SLEEP "/>
82
- <uses-permission android:name="android.permission.health.READ_WEIGHT" />
83
- <uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED" />
84
- <uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE" />
85
- <uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE" />
86
- <uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE" />
87
- <uses-permission android:name="android.permission.health.READ_BODY_FAT" />
88
- <uses-permission android:name="android.permission.health.READ_BONE_MASS" />
89
- <uses-permission android:name="android.permission.health.READ_EXERCISE" />
90
- <uses-permission android:name="android.permission.health.READ_DISTANCE" />
91
- <uses-permission android:name="android.permission.health.READ_ELEVATION_GAINED" />
92
- <uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED" />
93
- <uses-permission android:name="android.permission.health.READ_HEART_RATE" />
94
- <uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY" />
95
- <uses-permission android:name="android.permission.health.READ_HEIGHT" />
96
- <uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION" />
97
- <uses-permission android:name="android.permission.health.READ_POWER" />
98
- <uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE" />
99
- <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE" />
100
- <uses-permission android:name="android.permission.health.READ_SPEED" />
101
- <uses-permission android:name="android.permission.health.READ_STEPS" />
102
- <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED" />
103
- <uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE" />
81
+ <uses-permission android:name="android.permission.health.READ_SLEEP" >
82
+ <uses-permission android:name="android.permission.health.READ_WEIGHT"/>
83
+ <uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED"/>
84
+ <uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE"/>
85
+ <uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE"/>
86
+ <uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE"/>
87
+ <uses-permission android:name="android.permission.health.READ_BODY_FAT"/>
88
+ <uses-permission android:name="android.permission.health.READ_BONE_MASS"/>
89
+ <uses-permission android:name="android.permission.health.READ_EXERCISE"/>
90
+ <uses-permission android:name="android.permission.health.READ_DISTANCE"/>
91
+ <uses-permission android:name="android.permission.health.READ_ELEVATION_GAINED"/>
92
+ <uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED"/>
93
+ <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
94
+ <uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY"/>
95
+ <uses-permission android:name="android.permission.health.READ_HEIGHT"/>
96
+ <uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION"/>
97
+ <uses-permission android:name="android.permission.health.READ_POWER"/>
98
+ <uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE"/>
99
+ <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE"/>
100
+ <uses-permission android:name="android.permission.health.READ_SPEED"/>
101
+ <uses-permission android:name="android.permission.health.READ_STEPS"/>
102
+ <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
103
+ <uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE"/>
104
104
  <uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE" />
105
105
  ```
106
106
 
@@ -119,7 +119,9 @@ First of all you have to add the required health permissions to your "AndroidMan
119
119
  <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
120
120
  </intent-filter>
121
121
  ```
122
- *For Android 14 support you also need to add additional intent-filters:
122
+
123
+ \*For Android 14 support you also need to add additional intent-filters:
124
+
123
125
  ```xml
124
126
  <intent-filter>
125
127
  <action
@@ -128,7 +130,9 @@ First of all you have to add the required health permissions to your "AndroidMan
128
130
  android:name="android.intent.category.HEALTH_PERMISSIONS"/>
129
131
  </intent-filter>
130
132
  ```
133
+
131
134
  4. For Android 14 support additional manifest element inside application tag
135
+
132
136
  ```xml
133
137
  <activity-alias
134
138
  android:name="ViewPermissionUsageActivity"
@@ -76,7 +76,7 @@ dependencies {
76
76
  //noinspection GradleDynamicVersion
77
77
  implementation "com.facebook.react:react-android:0.71.3"
78
78
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
79
- implementation 'com.spikeapi.sdk:spike-sdk:3.0.5'
79
+ implementation 'com.spikeapi.sdk:spike-sdk:3.0.8'
80
80
  implementation 'androidx.core:core-ktx:1.9.0'
81
81
  implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
82
82
  implementation 'com.google.code.gson:gson:2.10.1'
@@ -1,19 +1,11 @@
1
1
  package com.spikesdk
2
2
 
3
3
  import android.os.Build
4
- import android.os.Environment
5
- import android.os.Environment.DIRECTORY_DOWNLOADS
6
4
  import androidx.activity.ComponentActivity
7
5
  import androidx.activity.result.ActivityResultCallback
8
6
  import androidx.activity.result.ActivityResultLauncher
9
7
  import androidx.activity.result.contract.ActivityResultContract
10
- import com.facebook.react.bridge.Promise
11
- import com.facebook.react.bridge.ReactApplicationContext
12
- import com.facebook.react.bridge.ReactContext
13
- import com.facebook.react.bridge.ReactContextBaseJavaModule
14
- import com.facebook.react.bridge.ReactMethod
15
- import com.facebook.react.bridge.WritableMap
16
- import com.facebook.react.bridge.WritableNativeMap
8
+ import com.facebook.react.bridge.*
17
9
  import com.facebook.react.modules.core.DeviceEventManagerModule
18
10
  import com.google.gson.GsonBuilder
19
11
  import com.spikeapi.SpikeConnection
@@ -24,8 +16,6 @@ import kotlinx.coroutines.CoroutineScope
24
16
  import kotlinx.coroutines.Dispatchers
25
17
  import kotlinx.coroutines.SupervisorJob
26
18
  import kotlinx.coroutines.launch
27
- import java.io.File
28
- import java.io.IOException
29
19
  import java.time.OffsetDateTime
30
20
  import java.util.UUID
31
21
 
@@ -38,7 +28,7 @@ fun <I, O> ComponentActivity.registerActivityResultLauncher(
38
28
  }
39
29
 
40
30
  class SpikeSdkModule(reactContext: ReactApplicationContext) :
41
- ReactContextBaseJavaModule(reactContext) {
31
+ ReactContextBaseJavaModule(reactContext), LifecycleEventListener {
42
32
 
43
33
  private val connections = mutableMapOf<String, SpikeConnection>()
44
34
 
@@ -50,11 +40,16 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
50
40
  OffsetDateTime::class.java,
51
41
  OffsetDateTimeSerializer()
52
42
  ).create()
43
+ private var checkPermissionsFor: Triple<String, String, Promise>? = null
53
44
 
54
45
  override fun getName(): String {
55
46
  return NAME
56
47
  }
57
48
 
49
+ init {
50
+ reactContext.addLifecycleEventListener(this)
51
+ }
52
+
58
53
  @ReactMethod
59
54
  fun isPackageInstalled(
60
55
  promise: Promise
@@ -199,7 +194,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
199
194
  "Connection not found"
200
195
  ).mapException(), "Connection not found"
201
196
  )
202
- connection.readGrantedPermissions()
203
197
  val result = connection.extractData(
204
198
  dataType = dataType.toSpikeDataType(),
205
199
  from = fromDateMillis.toLong().millisToOffsetDataTime(),
@@ -227,7 +221,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
227
221
  "Connection not found"
228
222
  ).mapException(), "Connection not found"
229
223
  )
230
- connection.readGrantedPermissions()
231
224
  val result = connection.extractAndPostData(
232
225
  dataType = dataType.toSpikeDataType(),
233
226
  from = fromDateMillis.toLong().millisToOffsetDataTime(),
@@ -253,7 +246,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
253
246
  "Connection not found"
254
247
  ).mapException(), "Connection not found"
255
248
  )
256
- connection.readGrantedPermissions()
257
249
  val result = connection.extractData(
258
250
  dataType = dataType.toSpikeDataType()
259
251
  )
@@ -277,7 +269,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
277
269
  "Connection not found"
278
270
  ).mapException(), "Connection not found"
279
271
  )
280
- connection.readGrantedPermissions()
281
272
  val result = connection.extractAndPostData(
282
273
  dataType = dataType.toSpikeDataType()
283
274
  )
@@ -317,7 +308,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
317
308
  )
318
309
  val permissionsGranted: Boolean =
319
310
  connection.hasHealthPermissionsGranted(requiredPermissions)
320
- connection.readGrantedPermissions()
321
311
  promise.resolve(permissionsGranted)
322
312
  } catch (e: SpikeExceptions) {
323
313
  promise.reject(e.mapException(), e.message)
@@ -358,7 +348,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
358
348
  }
359
349
  }
360
350
  }
361
-
362
351
  @ReactMethod
363
352
  fun requestHealthPermissions(connectionUUID: String, dataType: String, promise: Promise) {
364
353
  val connection = connections[connectionUUID] ?: return promise.reject(
@@ -371,7 +360,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
371
360
  connection.getRequiredHealthPermissionsMetadata(dataType.toSpikeDataType())
372
361
 
373
362
  if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.TIRAMISU) {
374
- val intent = connection.requestReadAuthorization().createIntent(
363
+ val intent = SpikeConnection.requestReadAuthorization().createIntent(
375
364
  reactApplicationContext, permissions
376
365
  )
377
366
 
@@ -383,15 +372,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
383
372
  } else {
384
373
  val activity = reactApplicationContext.currentActivity
385
374
  if (activity is ComponentActivity) {
375
+ checkPermissionsFor = Triple(connectionUUID, dataType, promise)
386
376
  val launcher =
387
377
  activity.registerActivityResultLauncher(
388
- connection.requestReadAuthorization()
378
+ SpikeConnection.requestReadAuthorization()
389
379
  ) {
390
- checkPermissionsGranted(connectionUUID, dataType, promise)
380
+
391
381
  }
392
382
 
393
383
  launcher.launch(permissions)
394
- promise.resolve(true)
395
384
  } else {
396
385
  promise.resolve(false)
397
386
  }
@@ -432,10 +421,24 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
432
421
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
433
422
  .emit(eventName, params)
434
423
  }
424
+ override fun onHostResume() {
425
+ checkPermissionsFor?.let {
426
+ checkPermissionsGranted(
427
+ it.first,
428
+ it.second,
429
+ it.third
430
+ )
431
+ }
432
+ checkPermissionsFor = null
433
+ }
434
+
435
+ override fun onHostPause() {
436
+ }
435
437
 
438
+ override fun onHostDestroy() {
439
+ }
436
440
  companion object {
437
441
  const val NAME = "SpikeSdk"
438
442
  const val REQUEST_CODE = 4200
439
443
  }
440
-
441
444
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-spike-sdk",
3
- "version": "2.2.3",
3
+ "version": "2.2.5",
4
4
  "description": "Spike API for health and productivity data from wearables and IoT devices",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -5,7 +5,7 @@ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1
5
5
 
6
6
  Pod::Spec.new do |s|
7
7
  s.name = "react-native-spike-sdk"
8
- s.version = "2.2.3"
8
+ s.version = "2.2.5"
9
9
  s.summary = "Spike API for health and productivity data from wearables and IoT devices"
10
10
 
11
11
  s.description = <<-DESC