react-native-rook-sdk 1.3.1 → 2.0.0-beta.0
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/android/build.gradle +3 -2
- package/android/src/main/java/com/rooksdk/RookSdkModule.kt +66 -15
- package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +10 -5
- package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
- package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +54 -20
- package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +92 -2
- package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +157 -296
- package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +14 -0
- package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
- package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +25 -0
- package/lib/commonjs/hooks/index.js +7 -0
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/useRookAppleHealthVariables.js +1 -0
- package/lib/commonjs/hooks/useRookAppleHealthVariables.js.map +1 -1
- package/lib/commonjs/hooks/useRookConfiguration.js +33 -14
- package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -1
- package/lib/commonjs/hooks/useRookDataSources.js +1 -0
- package/lib/commonjs/hooks/useRookDataSources.js.map +1 -1
- package/lib/commonjs/hooks/useRookPermissions.js +32 -5
- package/lib/commonjs/hooks/useRookPermissions.js.map +1 -1
- package/lib/commonjs/hooks/useRookSync.js +103 -25
- package/lib/commonjs/hooks/useRookSync.js.map +1 -1
- package/lib/commonjs/hooks/useRookVariables.js +69 -0
- package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
- package/lib/commonjs/index.js +17 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/modules/hook/useRookAutoSync.js +25 -2
- package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/commonjs/modules/utils/errors.js +1 -1
- package/lib/commonjs/modules/utils/errors.js.map +1 -1
- package/lib/commonjs/types/SDKSources.js +13 -0
- package/lib/commonjs/types/SDKSources.js.map +1 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
- package/lib/commonjs/types/SyncTypes.js +4 -0
- package/lib/module/hooks/index.js +1 -0
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/useRookAppleHealthVariables.js +1 -0
- package/lib/module/hooks/useRookAppleHealthVariables.js.map +1 -1
- package/lib/module/hooks/useRookConfiguration.js +33 -15
- package/lib/module/hooks/useRookConfiguration.js.map +1 -1
- package/lib/module/hooks/useRookDataSources.js +1 -0
- package/lib/module/hooks/useRookDataSources.js.map +1 -1
- package/lib/module/hooks/useRookPermissions.js +32 -5
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSync.js +103 -25
- package/lib/module/hooks/useRookSync.js.map +1 -1
- package/lib/module/hooks/useRookVariables.js +61 -0
- package/lib/module/hooks/useRookVariables.js.map +1 -0
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/hook/useRookAutoSync.js +25 -2
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/module/modules/utils/errors.js +1 -1
- package/lib/module/modules/utils/errors.js.map +1 -1
- package/lib/module/types/SDKSources.js +7 -0
- package/lib/module/types/SDKSources.js.map +1 -0
- package/lib/module/types/SamsungHealthPermissions.js +17 -0
- package/lib/module/types/SamsungHealthPermissions.js.map +1 -0
- package/lib/module/types/SyncTypes.js +1 -1
- package/lib/typescript/src/hooks/index.d.ts +1 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts +1 -0
- package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts +8 -4
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookDataSources.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookPermissions.d.ts +9 -4
- package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookVariables.d.ts +22 -0
- package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
- package/lib/typescript/src/types/SDKSources.d.ts +6 -0
- package/lib/typescript/src/types/SDKSources.d.ts.map +1 -0
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +16 -0
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -0
- package/lib/typescript/src/types/SyncTypes.d.ts +15 -1
- package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-rook-sdk.podspec +1 -1
package/android/build.gradle
CHANGED
|
@@ -90,8 +90,9 @@ dependencies {
|
|
|
90
90
|
//noinspection GradleDynamicVersion
|
|
91
91
|
implementation "com.facebook.react:react-native:+"
|
|
92
92
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
93
|
-
implementation 'com.google.code.gson:gson:2.
|
|
93
|
+
implementation 'com.google.code.gson:gson:2.13.0'
|
|
94
94
|
|
|
95
|
-
implementation
|
|
95
|
+
implementation("io.tryrook.android:rook-sdk-samsung:1.0.0-beta01")
|
|
96
|
+
implementation 'com.rookmotion.android:rook-sdk:2.1.0'
|
|
96
97
|
}
|
|
97
98
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.rooksdk
|
|
2
2
|
|
|
3
3
|
import android.content.IntentFilter
|
|
4
|
+
import android.util.Log
|
|
4
5
|
import androidx.core.content.ContextCompat
|
|
5
6
|
import com.facebook.react.bridge.Promise
|
|
6
7
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
@@ -17,7 +18,18 @@ import com.rookmotion.rook.sdk.domain.environment.RookEnvironment
|
|
|
17
18
|
import com.rookmotion.rook.sdk.domain.model.RookConfiguration
|
|
18
19
|
import com.rooksdk.broadcasts.AndroidPermissionsReceiverTransmitter
|
|
19
20
|
import com.rooksdk.broadcasts.HealthConnectPermissionsReceiverTransmitter
|
|
21
|
+
import com.rooksdk.broadcasts.SamsungHealthPermissionsReceiverTransmitter
|
|
20
22
|
import com.rooksdk.utils.ReadableToWritable
|
|
23
|
+
import com.rooksdk.utils.SamsungAvailability
|
|
24
|
+
import io.tryrook.sdk.samsung.RookSamsung
|
|
25
|
+
import io.tryrook.sdk.samsung.RookSamsungObject
|
|
26
|
+
import io.tryrook.sdk.samsung.domain.analytics.SHRookAnalytics
|
|
27
|
+
import io.tryrook.sdk.samsung.domain.analytics.SHRookFramework
|
|
28
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
|
|
29
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
|
|
30
|
+
import io.tryrook.sdk.samsung.domain.environment.SHAndroidClass
|
|
31
|
+
import io.tryrook.sdk.samsung.domain.environment.SHEnvironment
|
|
32
|
+
import io.tryrook.sdk.samsung.domain.model.SHConfiguration
|
|
21
33
|
import kotlinx.coroutines.CoroutineScope
|
|
22
34
|
import kotlinx.coroutines.Dispatchers
|
|
23
35
|
import kotlinx.coroutines.SupervisorJob
|
|
@@ -49,7 +61,8 @@ import kotlinx.coroutines.launch
|
|
|
49
61
|
*/
|
|
50
62
|
class RookSdkModule(
|
|
51
63
|
reactContext: ReactApplicationContext,
|
|
52
|
-
private val rookConfigurationManager: RookConfigurationManager
|
|
64
|
+
private val rookConfigurationManager: RookConfigurationManager,
|
|
65
|
+
private val rookSamsung: RookSamsung
|
|
53
66
|
): ReactContextBaseJavaModule(reactContext) {
|
|
54
67
|
|
|
55
68
|
private var scope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
@@ -67,6 +80,10 @@ class RookSdkModule(
|
|
|
67
80
|
HealthConnectPermissionsReceiverTransmitter()
|
|
68
81
|
}
|
|
69
82
|
|
|
83
|
+
private val shHealthPermissionsReceiverTransmitter: SamsungHealthPermissionsReceiverTransmitter by lazy {
|
|
84
|
+
SamsungHealthPermissionsReceiverTransmitter()
|
|
85
|
+
}
|
|
86
|
+
|
|
70
87
|
override fun getName(): String {
|
|
71
88
|
return NAME
|
|
72
89
|
}
|
|
@@ -76,6 +93,7 @@ class RookSdkModule(
|
|
|
76
93
|
if (listenerCount == 0) {
|
|
77
94
|
androidPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
|
|
78
95
|
hcPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
|
|
96
|
+
shHealthPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
|
|
79
97
|
|
|
80
98
|
ContextCompat.registerReceiver(
|
|
81
99
|
reactApplicationContext,
|
|
@@ -90,6 +108,13 @@ class RookSdkModule(
|
|
|
90
108
|
IntentFilter(RookPermissionsManager.ACTION_HEALTH_CONNECT_PERMISSIONS),
|
|
91
109
|
ContextCompat.RECEIVER_EXPORTED,
|
|
92
110
|
)
|
|
111
|
+
|
|
112
|
+
ContextCompat.registerReceiver(
|
|
113
|
+
reactApplicationContext,
|
|
114
|
+
shHealthPermissionsReceiverTransmitter,
|
|
115
|
+
IntentFilter(SamsungHealthPermission.ACTION_SAMSUNG_HEALTH_PERMISSIONS),
|
|
116
|
+
ContextCompat.RECEIVER_EXPORTED
|
|
117
|
+
)
|
|
93
118
|
}
|
|
94
119
|
|
|
95
120
|
listenerCount += 1
|
|
@@ -124,12 +149,12 @@ class RookSdkModule(
|
|
|
124
149
|
}
|
|
125
150
|
|
|
126
151
|
var environment = RookEnvironment.SANDBOX
|
|
152
|
+
var shEnv = SHEnvironment.SANDBOX
|
|
127
153
|
|
|
128
|
-
if (config.getString("environment") == "production")
|
|
154
|
+
if (config.getString("environment") == "production") {
|
|
129
155
|
environment = RookEnvironment.PRODUCTION
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
else RookAndroidClass.disableTest()
|
|
156
|
+
shEnv = SHEnvironment.SANDBOX
|
|
157
|
+
}
|
|
133
158
|
|
|
134
159
|
val rookConfiguration = RookConfiguration(
|
|
135
160
|
environment = environment,
|
|
@@ -137,24 +162,39 @@ class RookSdkModule(
|
|
|
137
162
|
secretKey = secretKey
|
|
138
163
|
)
|
|
139
164
|
|
|
165
|
+
val shConfig = SHConfiguration(
|
|
166
|
+
environment = shEnv,
|
|
167
|
+
clientUUID = clientUUID,
|
|
168
|
+
secretKey = secretKey
|
|
169
|
+
)
|
|
170
|
+
|
|
140
171
|
val enableLogs = config.getBoolean("enableLogs")
|
|
141
|
-
if(enableLogs)
|
|
172
|
+
if(enableLogs) {
|
|
173
|
+
rookConfigurationManager.enableLocalLogs()
|
|
174
|
+
rookSamsung.enableLocalLogs()
|
|
175
|
+
}
|
|
142
176
|
|
|
143
177
|
rookConfigurationManager.setConfiguration(rookConfiguration)
|
|
144
178
|
|
|
145
179
|
RookAnalytics.setFramework(RookFramework.REACT_NATIVE)
|
|
180
|
+
SHRookAnalytics.setFramework(SHRookFramework.REACT_NATIVE)
|
|
146
181
|
|
|
147
182
|
scope.launch {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
{
|
|
155
|
-
|
|
183
|
+
try {
|
|
184
|
+
val result = rookConfigurationManager.initRook()
|
|
185
|
+
result.getOrThrow()
|
|
186
|
+
|
|
187
|
+
val availableResult = SamsungAvailability.getSamsungHealthAvailabilityOrDefault(rookSamsung)
|
|
188
|
+
|
|
189
|
+
if (availableResult == SamsungHealthAvailability.INSTALLED) {
|
|
190
|
+
rookSamsung.initRook(shConfig)
|
|
191
|
+
tryToSetSamsungUserId()
|
|
156
192
|
}
|
|
157
|
-
|
|
193
|
+
|
|
194
|
+
promise.resolve(true)
|
|
195
|
+
} catch (e: Throwable) {
|
|
196
|
+
promise.reject(e)
|
|
197
|
+
}
|
|
158
198
|
}
|
|
159
199
|
}
|
|
160
200
|
catch (e: Exception) {
|
|
@@ -163,6 +203,17 @@ class RookSdkModule(
|
|
|
163
203
|
|
|
164
204
|
}
|
|
165
205
|
|
|
206
|
+
private fun tryToSetSamsungUserId() {
|
|
207
|
+
scope.launch {
|
|
208
|
+
val result = rookConfigurationManager.getUserID()
|
|
209
|
+
|
|
210
|
+
if (result != null) {
|
|
211
|
+
val user = rookSamsung.updateUserID(result)
|
|
212
|
+
user.getOrNull()
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
166
217
|
/**
|
|
167
218
|
* Sends a broadcast message to the React Native layer.
|
|
168
219
|
* This method emits a message event to the React Native side via the
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package com.rooksdk
|
|
2
2
|
|
|
3
|
+
import RookSyncModule
|
|
3
4
|
import com.facebook.react.ReactPackage
|
|
4
5
|
import com.facebook.react.bridge.NativeModule
|
|
5
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
@@ -9,21 +10,25 @@ import com.rooksdk.modules.RookBackgroundSyncModule
|
|
|
9
10
|
import com.rooksdk.modules.RookConfigurationModule
|
|
10
11
|
import com.rooksdk.modules.RookPermissionsModule
|
|
11
12
|
import com.rooksdk.modules.RookStepsModule
|
|
12
|
-
import
|
|
13
|
+
import io.tryrook.sdk.samsung.RookSamsung
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class RookSdkPackage : ReactPackage {
|
|
16
17
|
private var rookConfigurationManager: RookConfigurationManager? = null
|
|
18
|
+
private var rookSamsung: RookSamsung? = null
|
|
17
19
|
|
|
18
20
|
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
19
21
|
if (rookConfigurationManager == null)
|
|
20
22
|
rookConfigurationManager = RookConfigurationManager(reactContext)
|
|
21
23
|
|
|
24
|
+
if (rookSamsung == null)
|
|
25
|
+
rookSamsung = RookSamsung(reactContext)
|
|
26
|
+
|
|
22
27
|
return listOf(
|
|
23
|
-
RookSdkModule(reactContext, rookConfigurationManager!!),
|
|
24
|
-
RookPermissionsModule(reactContext),
|
|
25
|
-
RookConfigurationModule(reactContext, rookConfigurationManager!!),
|
|
26
|
-
RookSyncModule(reactContext,
|
|
28
|
+
RookSdkModule(reactContext, rookConfigurationManager!!, rookSamsung!!),
|
|
29
|
+
RookPermissionsModule(reactContext, rookSamsung!!),
|
|
30
|
+
RookConfigurationModule(reactContext, rookConfigurationManager!!, rookSamsung!!),
|
|
31
|
+
RookSyncModule(reactContext, rookSamsung!!),
|
|
27
32
|
RookBackgroundSyncModule(reactContext),
|
|
28
33
|
RookStepsModule(reactContext)
|
|
29
34
|
)
|
package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package com.rooksdk.broadcasts
|
|
2
|
+
|
|
3
|
+
import android.content.BroadcastReceiver
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import com.facebook.react.bridge.Arguments
|
|
7
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
8
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
9
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
|
|
10
|
+
|
|
11
|
+
class SamsungHealthPermissionsReceiverTransmitter: BroadcastReceiver() {
|
|
12
|
+
private var reactApplicationContext: ReactApplicationContext? = null
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Sets the ReactApplicationContext to be used for emitting events to the React Native side.
|
|
16
|
+
*
|
|
17
|
+
* @param context The ReactApplicationContext provided by React Native.
|
|
18
|
+
*/
|
|
19
|
+
fun setReactApplicationContext(context: ReactApplicationContext) {
|
|
20
|
+
this.reactApplicationContext = context
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun onReceive(conext: Context?, intent: Intent?) {
|
|
24
|
+
val allPermissionsGranted = intent?.getBooleanExtra(
|
|
25
|
+
/* name = */ SamsungHealthPermission.EXTRA_SAMSUNG_HEALTH_PERMISSIONS_GRANTED,
|
|
26
|
+
/* defaultValue = */ false
|
|
27
|
+
) ?: false
|
|
28
|
+
|
|
29
|
+
val permissionsPartiallyGranted = intent?.getBooleanExtra(
|
|
30
|
+
/* name = */ SamsungHealthPermission.EXTRA_SAMSUNG_HEALTH_PERMISSIONS_PARTIALLY_GRANTED,
|
|
31
|
+
/* defaultValue = */ false
|
|
32
|
+
) ?: false
|
|
33
|
+
|
|
34
|
+
reactApplicationContext?.also { reactContext ->
|
|
35
|
+
val events = listOf(
|
|
36
|
+
"ROOK_SAMSUNG_HEALTH_PERMISSIONS" to allPermissionsGranted,
|
|
37
|
+
"ROOK_SAMSUNG_HEALTH_PERMISSIONS_PARTIALLY_GRANTED" to permissionsPartiallyGranted,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
val emitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
41
|
+
|
|
42
|
+
events.forEach { (type, value) ->
|
|
43
|
+
Arguments.createMap().apply {
|
|
44
|
+
putString("type", type)
|
|
45
|
+
putBoolean("value", value)
|
|
46
|
+
emitter.emit("ROOK_NOTIFICATION", this)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -4,7 +4,13 @@ import com.facebook.react.bridge.Promise
|
|
|
4
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
5
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
6
|
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.facebook.react.bridge.ReadableArray
|
|
7
8
|
import com.rookmotion.rook.sdk.RookConfigurationManager
|
|
9
|
+
import com.rooksdk.utils.DatasourcesUtils
|
|
10
|
+
import com.rooksdk.utils.SamsungAvailability
|
|
11
|
+
import com.rooksdk.utils.Source
|
|
12
|
+
import io.tryrook.sdk.samsung.RookSamsung
|
|
13
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
|
|
8
14
|
import kotlinx.coroutines.CoroutineScope
|
|
9
15
|
import kotlinx.coroutines.Dispatchers
|
|
10
16
|
import kotlinx.coroutines.SupervisorJob
|
|
@@ -12,7 +18,8 @@ import kotlinx.coroutines.launch
|
|
|
12
18
|
|
|
13
19
|
class RookConfigurationModule(
|
|
14
20
|
reactContext: ReactApplicationContext,
|
|
15
|
-
private val rookConfigurationManager: RookConfigurationManager
|
|
21
|
+
private val rookConfigurationManager: RookConfigurationManager,
|
|
22
|
+
private val rookSamsung: RookSamsung,
|
|
16
23
|
): ReactContextBaseJavaModule(reactContext) {
|
|
17
24
|
|
|
18
25
|
private val scope: CoroutineScope by lazy {
|
|
@@ -27,7 +34,8 @@ class RookConfigurationModule(
|
|
|
27
34
|
fun getUserID(promise: Promise) {
|
|
28
35
|
scope.launch {
|
|
29
36
|
try {
|
|
30
|
-
|
|
37
|
+
val user = rookConfigurationManager.getUserID()
|
|
38
|
+
promise.resolve(user)
|
|
31
39
|
}
|
|
32
40
|
catch (e: Exception) {
|
|
33
41
|
promise.reject(e)
|
|
@@ -43,11 +51,17 @@ class RookConfigurationModule(
|
|
|
43
51
|
@ReactMethod
|
|
44
52
|
fun updateUserID(userID: String, promise: Promise) {
|
|
45
53
|
scope.launch {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
try {
|
|
55
|
+
if (SamsungAvailability.isSamsungAvailable(rookSamsung)) {
|
|
56
|
+
val r = rookSamsung.updateUserID(userID).getOrNull()
|
|
57
|
+
if (r == null) println("We couldn't initiate the user id in Samsung Health")
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
val result = rookConfigurationManager.updateUserID(userID)
|
|
61
|
+
result.getOrThrow()
|
|
62
|
+
} catch (e: Exception) {
|
|
63
|
+
promise.reject(e)
|
|
64
|
+
}
|
|
51
65
|
}
|
|
52
66
|
}
|
|
53
67
|
|
|
@@ -56,13 +70,24 @@ class RookConfigurationModule(
|
|
|
56
70
|
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
57
71
|
*/
|
|
58
72
|
@ReactMethod
|
|
59
|
-
fun clearUserID(promise: Promise) {
|
|
73
|
+
fun clearUserID(rawSources: ReadableArray, promise: Promise) {
|
|
60
74
|
scope.launch {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
try {
|
|
76
|
+
val sources = DatasourcesUtils.readableArrayToSourceList(rawSources)
|
|
77
|
+
|
|
78
|
+
if(Source.HEALTH_CONNECT in sources) {
|
|
79
|
+
val hcResult = rookConfigurationManager.clearUserID()
|
|
80
|
+
hcResult.getOrThrow()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if(Source.SAMSUNG_HEALTH in sources && SamsungAvailability.isSamsungAvailable(rookSamsung)) {
|
|
84
|
+
val hcResult = rookSamsung.clearUserID()
|
|
85
|
+
hcResult.getOrThrow()
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (e: Exception) {
|
|
89
|
+
promise.reject(e)
|
|
90
|
+
}
|
|
66
91
|
}
|
|
67
92
|
}
|
|
68
93
|
|
|
@@ -71,15 +96,24 @@ class RookConfigurationModule(
|
|
|
71
96
|
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
72
97
|
*/
|
|
73
98
|
@ReactMethod
|
|
74
|
-
fun removeUserFromRook(promise: Promise) {
|
|
99
|
+
fun removeUserFromRook(rawSources: ReadableArray, promise: Promise) {
|
|
75
100
|
scope.launch {
|
|
76
|
-
|
|
101
|
+
try {
|
|
102
|
+
val sources = DatasourcesUtils.readableArrayToSourceList(rawSources)
|
|
77
103
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
104
|
+
if(Source.HEALTH_CONNECT in sources) {
|
|
105
|
+
val hcResult = rookConfigurationManager.deleteUserFromRook()
|
|
106
|
+
hcResult.getOrThrow()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if(Source.SAMSUNG_HEALTH in sources && SamsungAvailability.isSamsungAvailable(rookSamsung)) {
|
|
110
|
+
val hcResult = rookSamsung.deleteUserFromRook()
|
|
111
|
+
hcResult.getOrThrow()
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (e: Exception) {
|
|
115
|
+
promise.reject(e)
|
|
116
|
+
}
|
|
83
117
|
}
|
|
84
118
|
}
|
|
85
119
|
|
|
@@ -4,16 +4,23 @@ import com.facebook.react.bridge.Promise
|
|
|
4
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
5
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
6
|
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.facebook.react.bridge.ReadableArray
|
|
7
8
|
import com.rookmotion.rook.sdk.RookPermissionsManager
|
|
8
9
|
import com.rookmotion.rook.sdk.domain.enums.BackgroundReadStatus
|
|
9
10
|
import com.rookmotion.rook.sdk.domain.enums.HealthConnectAvailability
|
|
10
11
|
import com.rookmotion.rook.sdk.domain.enums.RequestPermissionsStatus
|
|
12
|
+
import com.rooksdk.utils.PermissionConversion
|
|
13
|
+
import com.rooksdk.utils.SamsungAvailability
|
|
14
|
+
import io.tryrook.sdk.samsung.RookSamsung
|
|
15
|
+
import io.tryrook.sdk.samsung.domain.enums.SHRequestPermissionsStatus
|
|
16
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
|
|
17
|
+
import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
|
|
11
18
|
import kotlinx.coroutines.CoroutineScope
|
|
12
19
|
import kotlinx.coroutines.Dispatchers
|
|
13
20
|
import kotlinx.coroutines.SupervisorJob
|
|
14
21
|
import kotlinx.coroutines.launch
|
|
15
22
|
|
|
16
|
-
class RookPermissionsModule(reactContext: ReactApplicationContext):
|
|
23
|
+
class RookPermissionsModule(reactContext: ReactApplicationContext, private val rookSamsung: RookSamsung):
|
|
17
24
|
ReactContextBaseJavaModule(reactContext) {
|
|
18
25
|
|
|
19
26
|
private val rookPermissionsManager: RookPermissionsManager by lazy {
|
|
@@ -24,6 +31,27 @@ class RookPermissionsModule(reactContext: ReactApplicationContext):
|
|
|
24
31
|
CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
25
32
|
}
|
|
26
33
|
|
|
34
|
+
@ReactMethod
|
|
35
|
+
fun checkSamsungAvailability(promise: Promise) {
|
|
36
|
+
scope.launch {
|
|
37
|
+
rookSamsung.checkSamsungHealthAvailability().fold(
|
|
38
|
+
{ availability ->
|
|
39
|
+
when (availability) {
|
|
40
|
+
SamsungHealthAvailability.INSTALLED -> promise.resolve("INSTALLED")
|
|
41
|
+
SamsungHealthAvailability.NOT_INSTALLED -> promise.resolve("NOT_INSTALLED")
|
|
42
|
+
SamsungHealthAvailability.OUTDATED -> promise.resolve("OUTDATED")
|
|
43
|
+
SamsungHealthAvailability.DISABLED -> promise.resolve("DISABLED")
|
|
44
|
+
SamsungHealthAvailability.NOT_READY -> promise.resolve("NOT_READY")
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
promise.reject(it)
|
|
49
|
+
},
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
27
55
|
/**
|
|
28
56
|
* Checks the availability of Health Connect on the device (whether it is installed, not installed, or not supported).
|
|
29
57
|
* @param promise A promise object to handle the result (resolved with the availability status or rejected on failure).
|
|
@@ -58,8 +86,46 @@ class RookPermissionsModule(reactContext: ReactApplicationContext):
|
|
|
58
86
|
}
|
|
59
87
|
}
|
|
60
88
|
|
|
89
|
+
@ReactMethod
|
|
90
|
+
fun checkSamsungHealthPermissions(promise: Promise){
|
|
91
|
+
scope.launch {
|
|
92
|
+
if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
|
|
93
|
+
promise.reject(Throwable("Samsung health is not available"))
|
|
94
|
+
return@launch
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
rookSamsung.checkSamsungHealthPermissions(SamsungHealthPermission.entries.toSet()).fold(
|
|
98
|
+
{ hasAllPermissions ->
|
|
99
|
+
promise.resolve(hasAllPermissions)
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
promise.reject(it)
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@ReactMethod
|
|
109
|
+
fun checkSamsungHealthPermissionsPartially(promise: Promise){
|
|
110
|
+
scope.launch {
|
|
111
|
+
if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
|
|
112
|
+
promise.reject(Throwable("Samsung health is not available"))
|
|
113
|
+
return@launch
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
rookSamsung.checkSamsungHealthPermissionsPartially(SamsungHealthPermission.entries.toSet()).fold(
|
|
117
|
+
{ hasAllPermissions ->
|
|
118
|
+
promise.resolve(hasAllPermissions)
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
promise.reject(it)
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
61
127
|
/**
|
|
62
|
-
* Checks the current permissions granted by Health
|
|
128
|
+
* Checks the current permissions granted by Health Conect to ensure the application has the necessary access.
|
|
63
129
|
* @param promise A promise object to handle the result (resolved with permission status or rejected on failure).
|
|
64
130
|
*/
|
|
65
131
|
@ReactMethod
|
|
@@ -110,6 +176,30 @@ class RookPermissionsModule(reactContext: ReactApplicationContext):
|
|
|
110
176
|
}
|
|
111
177
|
}
|
|
112
178
|
|
|
179
|
+
@ReactMethod
|
|
180
|
+
fun requestSamsungPermissions(permissions: ReadableArray, promise: Promise) {
|
|
181
|
+
val shPermissions = PermissionConversion.parseSamsungPermissions(permissions)
|
|
182
|
+
|
|
183
|
+
scope.launch {
|
|
184
|
+
if (!SamsungAvailability.isSamsungAvailable(rookSamsung)) {
|
|
185
|
+
promise.reject(Throwable("Samsung Health is not available"))
|
|
186
|
+
return@launch
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
rookSamsung.requestSamsungHealthPermissions(shPermissions).fold(
|
|
190
|
+
{
|
|
191
|
+
when (it) {
|
|
192
|
+
SHRequestPermissionsStatus.ALREADY_GRANTED -> promise.resolve("ALREADY_GRANTED")
|
|
193
|
+
SHRequestPermissionsStatus.REQUEST_SENT -> promise.resolve("REQUEST_SENT")
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
promise.reject(it)
|
|
198
|
+
}
|
|
199
|
+
)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
113
203
|
/**
|
|
114
204
|
* Checks if the SDK has permissions to use background permissions
|
|
115
205
|
* */
|