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
|
-
|
|
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"
|
package/android/build.gradle
CHANGED
|
@@ -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.
|
|
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
|
|
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 =
|
|
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
|
-
|
|
378
|
+
SpikeConnection.requestReadAuthorization()
|
|
389
379
|
) {
|
|
390
|
-
|
|
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
|
@@ -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.
|
|
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
|