react-native-rook-sdk 0.6.2 → 1.0.0-rc.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 +1 -1
- package/android/src/main/AndroidManifestNew.xml +0 -8
- package/android/src/main/java/com/rooksdk/RookSdkModule.kt +94 -580
- package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +17 -1
- package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +54 -0
- package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +53 -0
- package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +108 -0
- package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +160 -0
- package/android/src/main/java/com/rooksdk/modules/RookStepsModule.kt +105 -0
- package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +497 -0
- package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +49 -0
- package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +64 -0
- package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +20 -0
- package/ios/RookSdk.mm +393 -42
- package/lib/commonjs/context/RookSyncGateContext.js +12 -0
- package/lib/commonjs/context/RookSyncGateContext.js.map +1 -1
- package/lib/commonjs/context/RookSyncGateProvider.js +14 -6
- package/lib/commonjs/context/RookSyncGateProvider.js.map +1 -1
- package/lib/commonjs/context/RookSyncGateReducer.js +15 -0
- package/lib/commonjs/context/RookSyncGateReducer.js.map +1 -1
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js +26 -38
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
- package/lib/commonjs/hooks/useRookAppleHealth.js +24 -10
- package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -1
- package/lib/commonjs/hooks/useRookAppleHealthVariables.js +22 -4
- package/lib/commonjs/hooks/useRookAppleHealthVariables.js.map +1 -1
- package/lib/commonjs/hooks/useRookConfiguration.js +32 -16
- package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -1
- package/lib/commonjs/hooks/useRookDataSources.js +30 -5
- package/lib/commonjs/hooks/useRookDataSources.js.map +1 -1
- package/lib/commonjs/hooks/useRookEvents.js +61 -57
- package/lib/commonjs/hooks/useRookEvents.js.map +1 -1
- package/lib/commonjs/hooks/useRookPermissions.js +79 -37
- package/lib/commonjs/hooks/useRookPermissions.js.map +1 -1
- package/lib/commonjs/hooks/useRookSummaries.js +23 -29
- package/lib/commonjs/hooks/useRookSummaries.js.map +1 -1
- package/lib/commonjs/index.js +20 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/modules/hook/useRookAutoSync.js +133 -27
- package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
- package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
- package/lib/commonjs/types/PermissionsType.js +2 -0
- package/lib/commonjs/types/PermissionsType.js.map +1 -0
- package/lib/commonjs/utils/getNativeModule.js +29 -0
- package/lib/commonjs/utils/getNativeModule.js.map +1 -0
- package/lib/commonjs/utils/getRookModule.js +7 -0
- package/lib/commonjs/utils/getRookModule.js.map +1 -1
- package/lib/commonjs/utils/isModuleReady.js +6 -0
- package/lib/commonjs/utils/isModuleReady.js.map +1 -1
- package/lib/commonjs/utils/isValidDate.js +6 -0
- package/lib/commonjs/utils/isValidDate.js.map +1 -1
- package/lib/commonjs/utils/nativeModules.js +19 -0
- package/lib/commonjs/utils/nativeModules.js.map +1 -0
- package/lib/module/context/RookSyncGateContext.js +12 -0
- package/lib/module/context/RookSyncGateContext.js.map +1 -1
- package/lib/module/context/RookSyncGateProvider.js +10 -2
- package/lib/module/context/RookSyncGateProvider.js.map +1 -1
- package/lib/module/context/RookSyncGateReducer.js +15 -0
- package/lib/module/context/RookSyncGateReducer.js.map +1 -1
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js +14 -26
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
- package/lib/module/hooks/useRookAppleHealth.js +15 -2
- package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
- package/lib/module/hooks/useRookAppleHealthVariables.js +20 -2
- package/lib/module/hooks/useRookAppleHealthVariables.js.map +1 -1
- package/lib/module/hooks/useRookConfiguration.js +18 -3
- package/lib/module/hooks/useRookConfiguration.js.map +1 -1
- package/lib/module/hooks/useRookDataSources.js +27 -3
- package/lib/module/hooks/useRookDataSources.js.map +1 -1
- package/lib/module/hooks/useRookEvents.js +32 -28
- package/lib/module/hooks/useRookEvents.js.map +1 -1
- package/lib/module/hooks/useRookPermissions.js +63 -22
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSummaries.js +16 -22
- package/lib/module/hooks/useRookSummaries.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/hook/useRookAutoSync.js +133 -28
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/module/modules/types/sendMessageBroadcast.js +2 -0
- package/lib/module/modules/types/sendMessageBroadcast.js.map +1 -0
- package/lib/module/types/PermissionsType.js +2 -0
- package/lib/module/types/PermissionsType.js.map +1 -0
- package/lib/module/utils/getNativeModule.js +23 -0
- package/lib/module/utils/getNativeModule.js.map +1 -0
- package/lib/module/utils/getRookModule.js +8 -0
- package/lib/module/utils/getRookModule.js.map +1 -1
- package/lib/module/utils/isModuleReady.js +6 -0
- package/lib/module/utils/isModuleReady.js.map +1 -1
- package/lib/module/utils/isValidDate.js +6 -0
- package/lib/module/utils/isValidDate.js.map +1 -1
- package/lib/module/utils/nativeModules.js +13 -0
- package/lib/module/utils/nativeModules.js.map +1 -0
- package/lib/typescript/src/context/RookSyncGateContext.d.ts +7 -0
- package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateReducer.d.ts +15 -0
- package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts +6 -2
- package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAppleHealth.d.ts +1 -1
- package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts +9 -0
- package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts +7 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookDataSources.d.ts +8 -1
- package/lib/typescript/src/hooks/useRookDataSources.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookEvents.d.ts +9 -1
- package/lib/typescript/src/hooks/useRookEvents.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookPermissions.d.ts +16 -3
- package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSummaries.d.ts +6 -6
- package/lib/typescript/src/hooks/useRookSummaries.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts +18 -1
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
- package/lib/typescript/src/modules/types/sendMessageBroadcast.d.ts +6 -0
- package/lib/typescript/src/modules/types/sendMessageBroadcast.d.ts.map +1 -0
- package/lib/typescript/src/types/DataSource.d.ts +1 -0
- package/lib/typescript/src/types/DataSource.d.ts.map +1 -1
- package/lib/typescript/src/types/PermissionsType.d.ts +6 -0
- package/lib/typescript/src/types/PermissionsType.d.ts.map +1 -0
- package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
- package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
- package/lib/typescript/src/utils/getRookModule.d.ts +7 -0
- package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -1
- package/lib/typescript/src/utils/isModuleReady.d.ts +6 -0
- package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
- package/lib/typescript/src/utils/isValidDate.d.ts +6 -0
- package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
- package/lib/typescript/src/utils/nativeModules.d.ts +14 -0
- package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
- package/package.json +1 -1
- package/react-native-rook-sdk.podspec +1 -1
- package/android/src/main/java/com/rooksdk/HealthConnectPermissionsActivity.kt +0 -40
- package/android/src/main/java/com/rooksdk/RookDateTime.kt +0 -12
- package/android/src/main/res/layout/activity_health_connect_permissions.xml +0 -15
- package/lib/commonjs/utils/index.js +0 -69
- package/lib/commonjs/utils/index.js.map +0 -1
- package/lib/module/utils/index.js +0 -9
- package/lib/module/utils/index.js.map +0 -1
- package/lib/typescript/src/utils/index.d.ts +0 -9
- package/lib/typescript/src/utils/index.d.ts.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
package com.rooksdk
|
|
2
2
|
|
|
3
|
+
import android.content.IntentFilter
|
|
4
|
+
import androidx.core.content.ContextCompat
|
|
3
5
|
import com.facebook.react.bridge.Arguments
|
|
4
6
|
import com.facebook.react.bridge.Promise
|
|
5
7
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
@@ -11,47 +13,72 @@ import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
|
11
13
|
import com.rookmotion.rook.sdk.RookConfigurationManager
|
|
12
14
|
import com.rookmotion.rook.sdk.RookDataSources
|
|
13
15
|
import com.rookmotion.rook.sdk.RookEventManager
|
|
14
|
-
import com.rookmotion.rook.sdk.RookHealthPermissionsManager
|
|
15
16
|
import com.rookmotion.rook.sdk.RookHelpers
|
|
17
|
+
import com.rookmotion.rook.sdk.RookPermissionsManager
|
|
16
18
|
import com.rookmotion.rook.sdk.RookStepsManager
|
|
17
|
-
import com.rookmotion.rook.sdk.RookStepsPermissions
|
|
18
19
|
import com.rookmotion.rook.sdk.RookSummaryManager
|
|
19
20
|
import com.rookmotion.rook.sdk.RookYesterdaySyncManager
|
|
20
|
-
import com.rookmotion.rook.sdk.
|
|
21
|
+
import com.rookmotion.rook.sdk.domain.enums.DataSourceType
|
|
22
|
+
import com.rookmotion.rook.sdk.domain.enums.HealthConnectAvailability
|
|
21
23
|
import com.rookmotion.rook.sdk.domain.environment.RookAndroidClass
|
|
22
24
|
import com.rookmotion.rook.sdk.domain.environment.RookEnvironment
|
|
23
25
|
import com.rookmotion.rook.sdk.domain.model.RookConfiguration
|
|
24
26
|
import com.rookmotion.rook.sdk.domain.enums.HealthDataType
|
|
25
|
-
import com.rookmotion.rook.sdk.domain.enums.
|
|
27
|
+
import com.rookmotion.rook.sdk.domain.enums.RequestPermissionsStatus
|
|
26
28
|
import com.rookmotion.rook.sdk.domain.enums.SyncStatus
|
|
27
29
|
import com.rookmotion.rook.sdk.domain.model.DataSource
|
|
28
30
|
import com.rookmotion.rook.sdk.domain.model.SyncStatusWithData
|
|
31
|
+
import com.rooksdk.broadcasts.AndroidPermissionsReceiverTransmitter
|
|
32
|
+
import com.rooksdk.broadcasts.HealthConnectPermissionsReceiverTransmitter
|
|
33
|
+
import com.rooksdk.utils.ReadableToWritable
|
|
34
|
+
import com.rooksdk.utils.RookDateTime
|
|
29
35
|
import kotlinx.coroutines.CoroutineScope
|
|
30
36
|
import kotlinx.coroutines.Dispatchers
|
|
31
37
|
import kotlinx.coroutines.SupervisorJob
|
|
32
38
|
import kotlinx.coroutines.cancel
|
|
33
39
|
import kotlinx.coroutines.launch
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
/**
|
|
42
|
+
* The `RookSdkHealthConnectModule` class is a React Native module that interfaces
|
|
43
|
+
* with the Rook SDK for managing and syncing health data using Android's Health Connect.
|
|
44
|
+
* It provides methods for initializing the SDK, handling user configuration, syncing
|
|
45
|
+
* health data, and managing permissions.
|
|
46
|
+
*
|
|
47
|
+
* Main Responsibilities:
|
|
48
|
+
* - Initialize and configure the Rook SDK.
|
|
49
|
+
* - Manage user-related information such as user ID.
|
|
50
|
+
* - Sync health-related summaries and events (e.g., sleep, body metrics, physical activities).
|
|
51
|
+
* - Handle Health Connect permissions and check availability.
|
|
52
|
+
* - Transmit permission changes through Android and Health Connect.
|
|
53
|
+
* - Provide the ability to listen to permission changes using Android broadcast receivers.
|
|
54
|
+
* - Expose methods to JavaScript for requesting or syncing data.
|
|
55
|
+
*
|
|
56
|
+
* Key Components:
|
|
57
|
+
* - `RookConfigurationManager`: Manages configuration settings for the SDK.
|
|
58
|
+
* - `RookSummaryManager`: Handles syncing health data summaries (e.g., sleep, physical, body).
|
|
59
|
+
* - `RookEventManager`: Manages the synchronization of health-related events (e.g., physical activities, blood pressure, etc.).
|
|
60
|
+
* - `RookPermissionsManager`: Handles permission management and availability checks for Health Connect.
|
|
61
|
+
* - `RookStepsManager`: Manages steps data synchronization.
|
|
62
|
+
* - `CoroutineScope`: Used to launch asynchronous operations.
|
|
63
|
+
*/
|
|
64
|
+
class RookSdkModule(
|
|
65
|
+
reactContext: ReactApplicationContext,
|
|
66
|
+
private val rookConfigurationManager: RookConfigurationManager
|
|
67
|
+
): ReactContextBaseJavaModule(reactContext) {
|
|
37
68
|
|
|
38
|
-
private val rookConfigurationManager = RookConfigurationManager(reactApplicationContext)
|
|
39
|
-
private val rookHealthPermissionsManager = RookHealthPermissionsManager(rookConfigurationManager)
|
|
40
|
-
private val rookSummaryManager = RookSummaryManager(rookConfigurationManager)
|
|
41
|
-
private val rookEventManager = RookEventManager(rookConfigurationManager)
|
|
42
69
|
private var scope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
43
70
|
private var listenerCount = 0
|
|
44
71
|
|
|
45
|
-
private val rookSynManager: RookYesterdaySyncManager by lazy {
|
|
46
|
-
RookYesterdaySyncManager(reactApplicationContext)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
72
|
private val stepsScope: CoroutineScope by lazy {
|
|
50
73
|
CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
51
74
|
}
|
|
52
75
|
|
|
53
|
-
private val
|
|
54
|
-
|
|
76
|
+
private val androidPermissionsReceiverTransmitter: AndroidPermissionsReceiverTransmitter by lazy {
|
|
77
|
+
AndroidPermissionsReceiverTransmitter()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private val hcPermissionsReceiverTransmitter: HealthConnectPermissionsReceiverTransmitter by lazy {
|
|
81
|
+
HealthConnectPermissionsReceiverTransmitter()
|
|
55
82
|
}
|
|
56
83
|
|
|
57
84
|
override fun getName(): String {
|
|
@@ -60,6 +87,25 @@ class RookSdkModule(reactContext: ReactApplicationContext) :
|
|
|
60
87
|
|
|
61
88
|
@ReactMethod
|
|
62
89
|
fun addListener(eventName: String) {
|
|
90
|
+
if (listenerCount == 0) {
|
|
91
|
+
androidPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
|
|
92
|
+
hcPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
|
|
93
|
+
|
|
94
|
+
ContextCompat.registerReceiver(
|
|
95
|
+
reactApplicationContext,
|
|
96
|
+
androidPermissionsReceiverTransmitter,
|
|
97
|
+
IntentFilter(RookPermissionsManager.ACTION_ANDROID_PERMISSIONS),
|
|
98
|
+
ContextCompat.RECEIVER_EXPORTED
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
ContextCompat.registerReceiver(
|
|
102
|
+
reactApplicationContext,
|
|
103
|
+
hcPermissionsReceiverTransmitter,
|
|
104
|
+
IntentFilter(RookPermissionsManager.ACTION_HEALTH_CONNECT_PERMISSIONS),
|
|
105
|
+
ContextCompat.RECEIVER_EXPORTED,
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
63
109
|
listenerCount += 1
|
|
64
110
|
}
|
|
65
111
|
|
|
@@ -68,115 +114,28 @@ class RookSdkModule(reactContext: ReactApplicationContext) :
|
|
|
68
114
|
listenerCount -= count
|
|
69
115
|
if (listenerCount == 0) {
|
|
70
116
|
stepsScope.cancel()
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
private fun determineSummaryValue(summaryString: String): HealthDataType {
|
|
75
|
-
return when (summaryString) {
|
|
76
|
-
"SLEEP" -> HealthDataType.SLEEP_SUMMARY
|
|
77
|
-
"PHYSICAL" -> HealthDataType.PHYSICAL_SUMMARY
|
|
78
|
-
"BODY" -> HealthDataType.BODY_SUMMARY
|
|
79
|
-
"BLOOD_GLUCOSE_EVENT" -> HealthDataType.BLOOD_GLUCOSE_BODY_EVENT
|
|
80
|
-
"BLOOD_PRESSURE_EVENT" -> HealthDataType.BLOOD_PRESSURE_BODY_EVENT
|
|
81
|
-
"BODY_METRICS_EVENT" -> HealthDataType.BODY_METRICS_EVENT
|
|
82
|
-
"HEART_RATE_EVENT" -> HealthDataType.HEART_RATE_BODY_EVENT
|
|
83
|
-
"HYDRATION_EVENT" -> HealthDataType.HYDRATION_BODY_EVENT
|
|
84
|
-
"NUTRITION_EVENT" -> HealthDataType.NUTRITION_BODY_EVENT
|
|
85
|
-
"OXYGENATION_EVENT" -> HealthDataType.OXYGENATION_BODY_EVENT
|
|
86
|
-
"PHYSICAL_EVENT" -> HealthDataType.PHYSICAL_EVENT
|
|
87
|
-
"TEMPERATURE_EVENT" -> HealthDataType.TEMPERATURE_BODY_EVENT
|
|
88
|
-
else -> HealthDataType.SLEEP_SUMMARY
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
private fun dataSourcesToWritableArray(dataSources: List<DataSource>): WritableArray {
|
|
93
|
-
val array = Arguments.createArray()
|
|
94
|
-
for (dataSource in dataSources) {
|
|
95
|
-
val map = Arguments.createMap()
|
|
96
|
-
map.putString("name", dataSource.name)
|
|
97
|
-
map.putString("description", dataSource.description)
|
|
98
|
-
map.putString("image", dataSource.image)
|
|
99
|
-
map.putBoolean("connected", dataSource.connected)
|
|
100
|
-
dataSource.authorizationUrl?.let {
|
|
101
|
-
map.putString("authorizationUrl", it)
|
|
102
|
-
}
|
|
103
|
-
array.pushMap(map)
|
|
104
|
-
}
|
|
105
|
-
return array
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
private fun determineDoEndValue(permissionString: String): SyncInstruction {
|
|
109
|
-
return when (permissionString) {
|
|
110
|
-
"oldest" -> SyncInstruction.SYNC_OLDEST
|
|
111
|
-
"latest" -> SyncInstruction.SYNC_LATEST
|
|
112
|
-
else -> SyncInstruction.NOTHING
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
@ReactMethod
|
|
117
|
-
fun getUserID(promise: Promise) {
|
|
118
|
-
try {
|
|
119
|
-
promise.resolve(rookConfigurationManager.getUserID())
|
|
120
|
-
}
|
|
121
|
-
catch (e: Exception) {
|
|
122
|
-
promise.reject(e)
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
@ReactMethod
|
|
127
|
-
fun updateUserID(userID: String, promise: Promise) {
|
|
128
|
-
scope.launch {
|
|
129
|
-
rookConfigurationManager.updateUserID(userID)
|
|
130
|
-
.fold({
|
|
131
|
-
promise.resolve(true)
|
|
132
|
-
}, {
|
|
133
|
-
promise.reject(it)
|
|
134
|
-
})
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
117
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
scope.launch {
|
|
141
|
-
rookConfigurationManager.clearUserID().fold({
|
|
142
|
-
promise.resolve(true)
|
|
143
|
-
}, {
|
|
144
|
-
promise.reject(it)
|
|
145
|
-
})
|
|
118
|
+
reactApplicationContext.unregisterReceiver(hcPermissionsReceiverTransmitter)
|
|
119
|
+
reactApplicationContext.unregisterReceiver(androidPermissionsReceiverTransmitter)
|
|
146
120
|
}
|
|
147
121
|
}
|
|
148
122
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
promise.resolve(true)
|
|
156
|
-
}, {
|
|
157
|
-
promise.reject(it)
|
|
158
|
-
})
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
@ReactMethod
|
|
163
|
-
fun syncUserTimeZone(promise: Promise) {
|
|
164
|
-
scope.launch {
|
|
165
|
-
val result = rookConfigurationManager.syncUserTimeZone()
|
|
166
|
-
|
|
167
|
-
result.fold({
|
|
168
|
-
promise.resolve(true)
|
|
169
|
-
}, {
|
|
170
|
-
promise.reject(it)
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Initializes the Rook SDK with the specified configuration settings (environment, clientUUID, secretKey).
|
|
125
|
+
* This is required before any data synchronization or user management can occur.
|
|
126
|
+
* @param config A map containing the environment, clientUUID, secretKey, and other settings.
|
|
127
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
128
|
+
*/
|
|
177
129
|
@ReactMethod
|
|
178
130
|
fun initRook(config: ReadableMap,promise: Promise) {
|
|
179
131
|
try {
|
|
132
|
+
val clientUUID = config.getString("clientUUID")?.trim() ?: ""
|
|
133
|
+
val secretKey = config.getString("password")?.trim() ?: ""
|
|
134
|
+
|
|
135
|
+
if (clientUUID.isBlank() || secretKey.isBlank()) {
|
|
136
|
+
promise.reject("Invalid Credentials", "Invalid credentials")
|
|
137
|
+
return
|
|
138
|
+
}
|
|
180
139
|
|
|
181
140
|
var environment = RookEnvironment.SANDBOX
|
|
182
141
|
|
|
@@ -188,8 +147,8 @@ class RookSdkModule(reactContext: ReactApplicationContext) :
|
|
|
188
147
|
|
|
189
148
|
val rookConfiguration = RookConfiguration(
|
|
190
149
|
environment = environment,
|
|
191
|
-
clientUUID =
|
|
192
|
-
secretKey =
|
|
150
|
+
clientUUID = clientUUID,
|
|
151
|
+
secretKey = secretKey
|
|
193
152
|
)
|
|
194
153
|
|
|
195
154
|
val enableLogs = config.getBoolean("enableLogs")
|
|
@@ -216,473 +175,28 @@ class RookSdkModule(reactContext: ReactApplicationContext) :
|
|
|
216
175
|
|
|
217
176
|
}
|
|
218
177
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
@ReactMethod
|
|
228
|
-
fun openHealthConnectSettings(promise: Promise) {
|
|
229
|
-
scope.launch {
|
|
230
|
-
|
|
231
|
-
val result = rookHealthPermissionsManager.openHealthConnectSettings()
|
|
232
|
-
|
|
233
|
-
result.fold({
|
|
234
|
-
promise.resolve(true)
|
|
235
|
-
},{
|
|
236
|
-
promise.reject(it)
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
@ReactMethod
|
|
243
|
-
fun checkPermissions(promise: Promise) {
|
|
244
|
-
scope.launch {
|
|
245
|
-
val result = rookHealthPermissionsManager.checkPermissions();
|
|
246
|
-
|
|
247
|
-
result.fold({
|
|
248
|
-
promise.resolve(it)
|
|
249
|
-
}, {
|
|
250
|
-
promise.reject(it)
|
|
251
|
-
})
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
@ReactMethod
|
|
256
|
-
fun requestPermissions(promise: Promise) {
|
|
257
|
-
val activity = reactApplicationContext.currentActivity
|
|
258
|
-
|
|
259
|
-
if (activity == null) {
|
|
260
|
-
promise.reject(Exception("Error trying to request permissions"))
|
|
261
|
-
return
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
try {
|
|
265
|
-
|
|
266
|
-
HealthConnectPermissionsActivity.launch(activity)
|
|
267
|
-
promise.resolve(true)
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
catch (e: Exception) {
|
|
271
|
-
promise.reject(e)
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
// MARK: - Sync Summaries
|
|
278
|
-
@ReactMethod
|
|
279
|
-
fun shouldSyncFor(summaryString: String, date: String,promise: Promise) {
|
|
280
|
-
scope.launch {
|
|
281
|
-
RookHelpers.shouldSyncFor(
|
|
282
|
-
healthDataType = determineSummaryValue(summaryString),
|
|
283
|
-
localDate = RookDateTime.stringToLocalDate(date)
|
|
284
|
-
).fold({
|
|
285
|
-
promise.resolve(it)
|
|
286
|
-
},{
|
|
287
|
-
promise.reject(it)
|
|
288
|
-
})
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
@ReactMethod
|
|
293
|
-
fun syncSleepSummary(date: String, promise: Promise) {
|
|
294
|
-
scope.launch {
|
|
295
|
-
val result = rookSummaryManager.syncSleepSummary(RookDateTime.stringToLocalDate(date))
|
|
296
|
-
|
|
297
|
-
result.fold({
|
|
298
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
299
|
-
else promise.resolve(false)
|
|
300
|
-
}, {
|
|
301
|
-
promise.reject(it)
|
|
302
|
-
})
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// Body
|
|
178
|
+
/**
|
|
179
|
+
* Sends a broadcast message to the React Native layer.
|
|
180
|
+
* This method emits a message event to the React Native side via the
|
|
181
|
+
* `ROOK_NOTIFICATION` channel, allowing communication from the native module.
|
|
182
|
+
*
|
|
183
|
+
* @param message A ReadableMap containing the message data to send.
|
|
184
|
+
* @param promise A promise object that resolves with true if the message was sent successfully.
|
|
185
|
+
*/
|
|
307
186
|
@ReactMethod
|
|
308
|
-
fun
|
|
309
|
-
|
|
310
|
-
val result = rookSummaryManager.syncBodySummary(RookDateTime.stringToLocalDate(date))
|
|
187
|
+
fun sendMessageToBroadcast(message: ReadableMap, promise: Promise) {
|
|
188
|
+
if (listenerCount <= 0) return
|
|
311
189
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
else promise.resolve(false)
|
|
315
|
-
}, {
|
|
316
|
-
promise.reject(it)
|
|
317
|
-
})
|
|
318
|
-
}
|
|
319
|
-
}
|
|
190
|
+
val hash = ReadableToWritable.readableMapToHashMap(message)
|
|
191
|
+
val writable = ReadableToWritable.hashMapToWritableMap(hash)
|
|
320
192
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
scope.launch {
|
|
325
|
-
val result = rookSummaryManager.syncPhysicalSummary(RookDateTime.stringToLocalDate(date))
|
|
193
|
+
reactApplicationContext
|
|
194
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
195
|
+
.emit("ROOK_NOTIFICATION", writable)
|
|
326
196
|
|
|
327
|
-
result.fold({
|
|
328
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
329
|
-
else promise.resolve(false)
|
|
330
|
-
}, {
|
|
331
|
-
promise.reject(it)
|
|
332
|
-
})
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
@ReactMethod
|
|
337
|
-
fun syncPendingSummaries(promise: Promise) {
|
|
338
|
-
scope.launch {
|
|
339
|
-
val result = rookSummaryManager.syncPendingSummaries()
|
|
340
|
-
|
|
341
|
-
result.fold({
|
|
342
|
-
promise.resolve(true)
|
|
343
|
-
}, {
|
|
344
|
-
promise.reject(it)
|
|
345
|
-
})
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// MARK: - Events
|
|
350
|
-
@ReactMethod
|
|
351
|
-
fun syncPhysicalEvents(date: String, promise: Promise) {
|
|
352
|
-
scope.launch {
|
|
353
|
-
val result = rookEventManager.syncPhysicalEvents(RookDateTime.stringToLocalDate(date))
|
|
354
|
-
|
|
355
|
-
result.fold({
|
|
356
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
357
|
-
else promise.resolve(false)
|
|
358
|
-
}, {
|
|
359
|
-
promise.reject(it)
|
|
360
|
-
})
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
@ReactMethod
|
|
365
|
-
fun syncBloodGlucoseEvents(date: String, promise: Promise) {
|
|
366
|
-
scope.launch {
|
|
367
|
-
val result = rookEventManager.syncBloodGlucoseEvents(RookDateTime.stringToLocalDate(date))
|
|
368
|
-
|
|
369
|
-
result.fold({
|
|
370
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
371
|
-
else promise.resolve(false)
|
|
372
|
-
}, {
|
|
373
|
-
promise.reject(it)
|
|
374
|
-
})
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
@ReactMethod
|
|
379
|
-
fun syncBloodPressureEvents(date: String, promise: Promise) {
|
|
380
|
-
scope.launch {
|
|
381
|
-
val result = rookEventManager.syncBloodPressureEvents(RookDateTime.stringToLocalDate(date))
|
|
382
|
-
|
|
383
|
-
result.fold({
|
|
384
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
385
|
-
else promise.resolve(false)
|
|
386
|
-
}, {
|
|
387
|
-
promise.reject(it)
|
|
388
|
-
})
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
@ReactMethod
|
|
393
|
-
fun syncBodyMetricsEvent(date: String, promise: Promise) {
|
|
394
|
-
scope.launch {
|
|
395
|
-
val result = rookEventManager.syncBodyMetricsEvents(RookDateTime.stringToLocalDate(date))
|
|
396
|
-
|
|
397
|
-
result.fold({
|
|
398
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
399
|
-
else promise.resolve(false)
|
|
400
|
-
}, {
|
|
401
|
-
promise.reject(it)
|
|
402
|
-
})
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
@ReactMethod
|
|
407
|
-
fun syncBodyHeartRateEvent(date: String, promise: Promise) {
|
|
408
|
-
scope.launch {
|
|
409
|
-
val result = rookEventManager.syncBodyHeartRateEvents(RookDateTime.stringToLocalDate(date))
|
|
410
|
-
|
|
411
|
-
result.fold({
|
|
412
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
413
|
-
else promise.resolve(false)
|
|
414
|
-
}, {
|
|
415
|
-
promise.reject(it)
|
|
416
|
-
})
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
@ReactMethod
|
|
421
|
-
fun syncPhysicalHeartRateEvent(date: String, promise: Promise) {
|
|
422
|
-
scope.launch {
|
|
423
|
-
val result = rookEventManager.syncPhysicalHeartRateEvents(RookDateTime.stringToLocalDate(date))
|
|
424
|
-
|
|
425
|
-
result.fold({
|
|
426
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
427
|
-
else promise.resolve(false)
|
|
428
|
-
}, {
|
|
429
|
-
promise.reject(it)
|
|
430
|
-
})
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
@ReactMethod
|
|
435
|
-
fun syncNutritionEvents(date: String, promise: Promise) {
|
|
436
|
-
scope.launch {
|
|
437
|
-
val result = rookEventManager.syncNutritionEvents(RookDateTime.stringToLocalDate(date))
|
|
438
|
-
|
|
439
|
-
result.fold({
|
|
440
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
441
|
-
else promise.resolve(false)
|
|
442
|
-
}, {
|
|
443
|
-
promise.reject(it)
|
|
444
|
-
})
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
@ReactMethod
|
|
449
|
-
fun syncHydrationEvents(date: String, promise: Promise) {
|
|
450
|
-
scope.launch {
|
|
451
|
-
val result = rookEventManager.syncHydrationEvents(RookDateTime.stringToLocalDate(date))
|
|
452
|
-
|
|
453
|
-
result.fold({
|
|
454
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
455
|
-
else promise.resolve(false)
|
|
456
|
-
}, {
|
|
457
|
-
promise.reject(it)
|
|
458
|
-
})
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
@ReactMethod
|
|
462
|
-
fun syncPhysicalOxygenationEvent(date: String, promise: Promise) {
|
|
463
|
-
scope.launch {
|
|
464
|
-
val result = rookEventManager.syncPhysicalOxygenationEvents(RookDateTime.stringToLocalDate(date))
|
|
465
|
-
|
|
466
|
-
result.fold({
|
|
467
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
468
|
-
else promise.resolve(false)
|
|
469
|
-
}, {
|
|
470
|
-
promise.reject(it)
|
|
471
|
-
})
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
@ReactMethod
|
|
476
|
-
fun syncBodyOxygenationEvent(date: String, promise: Promise) {
|
|
477
|
-
scope.launch {
|
|
478
|
-
val result = rookEventManager.syncBodyOxygenationEvents(RookDateTime.stringToLocalDate(date))
|
|
479
|
-
|
|
480
|
-
result.fold({
|
|
481
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
482
|
-
else promise.resolve(false)
|
|
483
|
-
}, {
|
|
484
|
-
promise.reject(it)
|
|
485
|
-
})
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
@ReactMethod
|
|
490
|
-
fun syncTemperatureEvent(date: String, promise: Promise) {
|
|
491
|
-
scope.launch {
|
|
492
|
-
val result = rookEventManager
|
|
493
|
-
.syncTemperatureEvents(RookDateTime.stringToLocalDate(date))
|
|
494
|
-
|
|
495
|
-
result.fold({
|
|
496
|
-
if (it == SyncStatus.SYNCED) promise.resolve(true)
|
|
497
|
-
else promise.resolve(false)
|
|
498
|
-
}, {
|
|
499
|
-
promise.reject(it)
|
|
500
|
-
})
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
@ReactMethod
|
|
505
|
-
fun syncPendingEvents(promise: Promise) {
|
|
506
|
-
scope.launch {
|
|
507
|
-
val result = rookEventManager.syncPendingEvents()
|
|
508
|
-
|
|
509
|
-
result.fold({
|
|
510
|
-
promise.resolve(true)
|
|
511
|
-
}, {
|
|
512
|
-
promise.reject(it)
|
|
513
|
-
})
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
// MARK: - Health Connect Background
|
|
518
|
-
@ReactMethod
|
|
519
|
-
fun scheduleYesterdaySync(config: ReadableMap, promise: Promise) {
|
|
520
|
-
scope.launch {
|
|
521
|
-
try {
|
|
522
|
-
var environment = RookEnvironment.SANDBOX
|
|
523
|
-
|
|
524
|
-
if (config.getString("environment") == "production")
|
|
525
|
-
environment = RookEnvironment.PRODUCTION
|
|
526
|
-
|
|
527
|
-
val doEnd = determineDoEndValue(config.getString("doOnEnd") ?: "")
|
|
528
|
-
|
|
529
|
-
rookSynManager.scheduleYesterdaySync(
|
|
530
|
-
enableLogs = true,
|
|
531
|
-
clientUUID = config.getString("clientUUID") ?: "",
|
|
532
|
-
secretKey = config.getString(",") ?: "",
|
|
533
|
-
environment = environment,
|
|
534
|
-
doOnEnd = doEnd
|
|
535
|
-
)
|
|
536
|
-
|
|
537
|
-
promise.resolve(true)
|
|
538
|
-
|
|
539
|
-
}
|
|
540
|
-
catch (e: Exception) {
|
|
541
|
-
promise.reject(e)
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
@ReactMethod
|
|
548
|
-
fun requestAndroidBackgroundPermissions(promise: Promise) {
|
|
549
|
-
try {
|
|
550
|
-
RookYesterdaySyncPermissions.requestAndroidPermissions(reactApplicationContext)
|
|
551
|
-
promise.resolve(true)
|
|
552
|
-
}
|
|
553
|
-
catch (e: Exception) {
|
|
554
|
-
promise.reject(e)
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
@ReactMethod
|
|
559
|
-
fun hasAndroidBackgroundPermissions(promise: Promise) {
|
|
560
|
-
try {
|
|
561
|
-
val result = RookYesterdaySyncPermissions.hasAndroidPermissions(reactApplicationContext)
|
|
562
|
-
promise.resolve(result)
|
|
563
|
-
}
|
|
564
|
-
catch (e: Exception) {
|
|
565
|
-
promise.reject(e)
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// MARK: - Steps
|
|
570
|
-
@ReactMethod
|
|
571
|
-
fun isStepsAvailable(promise: Promise) {
|
|
572
|
-
promise.resolve(RookStepsPermissions.isAvailable(reactApplicationContext))
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
@ReactMethod
|
|
576
|
-
fun hasStepsPermissions(promise: Promise) {
|
|
577
|
-
promise.resolve(RookStepsPermissions.hasPermissions(reactApplicationContext))
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
@ReactMethod
|
|
581
|
-
fun requestStepsPermissions(promise: Promise) {
|
|
582
|
-
RookStepsPermissions.requestPermissions(reactApplicationContext)
|
|
583
197
|
promise.resolve(true)
|
|
584
198
|
}
|
|
585
199
|
|
|
586
|
-
@ReactMethod
|
|
587
|
-
fun enableBackgroundAndroidSteps(promise: Promise) {
|
|
588
|
-
rookStepsManager.enableBackgroundAndroidSteps().fold({
|
|
589
|
-
promise.resolve(true)
|
|
590
|
-
}, {
|
|
591
|
-
promise.reject(it)
|
|
592
|
-
})
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
@ReactMethod
|
|
596
|
-
fun disableBackgroundAndroidSteps(promise: Promise) {
|
|
597
|
-
rookStepsManager
|
|
598
|
-
.disableBackgroundAndroidSteps()
|
|
599
|
-
.fold({
|
|
600
|
-
stepsScope.cancel()
|
|
601
|
-
promise.resolve(true)
|
|
602
|
-
}, {
|
|
603
|
-
promise.reject(it)
|
|
604
|
-
})
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
@ReactMethod
|
|
608
|
-
fun isBackgroundAndroidStepsActive(promise: Promise) {
|
|
609
|
-
scope.launch {
|
|
610
|
-
val response = rookStepsManager.isBackgroundAndroidStepsActive()
|
|
611
|
-
promise.resolve(response)
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
@ReactMethod
|
|
616
|
-
fun syncTodayAndroidStepsCount(promise: Promise) {
|
|
617
|
-
scope.launch {
|
|
618
|
-
rookStepsManager
|
|
619
|
-
.syncTodayAndroidStepsCount()
|
|
620
|
-
.fold({
|
|
621
|
-
promise.resolve(it.toString())
|
|
622
|
-
}, {
|
|
623
|
-
promise.reject(it)
|
|
624
|
-
})
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
@ReactMethod
|
|
629
|
-
fun syncTodayHealthConnectStepsCount(promise: Promise) {
|
|
630
|
-
scope.launch {
|
|
631
|
-
rookEventManager.syncTodayHealthConnectStepsCount().fold(
|
|
632
|
-
{
|
|
633
|
-
when (it) {
|
|
634
|
-
SyncStatusWithData.RecordsNotFound -> {
|
|
635
|
-
promise.reject("syncTodayHealthConnect", "Records Not Found")
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
is SyncStatusWithData.Synced -> {
|
|
639
|
-
val steps = it.data
|
|
640
|
-
promise.resolve(steps)
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
},
|
|
644
|
-
{
|
|
645
|
-
promise.reject(it)
|
|
646
|
-
}
|
|
647
|
-
)
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
// MARK: - Datasources
|
|
652
|
-
@ReactMethod
|
|
653
|
-
fun getAvailableDataSources(options: ReadableMap?, promise: Promise) {
|
|
654
|
-
val rookDataSources = RookDataSources(reactApplicationContext)
|
|
655
|
-
println(options)
|
|
656
|
-
var redirectURL: String? = null
|
|
657
|
-
|
|
658
|
-
if (options !== null) redirectURL = options.getString("redirectURL")
|
|
659
|
-
|
|
660
|
-
scope.launch {
|
|
661
|
-
rookDataSources.getAvailableDataSources(redirectURL).fold(
|
|
662
|
-
{ dataSources ->
|
|
663
|
-
promise.resolve(dataSourcesToWritableArray(dataSources))
|
|
664
|
-
},
|
|
665
|
-
{
|
|
666
|
-
promise.reject(it)
|
|
667
|
-
},
|
|
668
|
-
)
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
@ReactMethod
|
|
673
|
-
fun presentDataSourceView(options: ReadableMap?, promise: Promise) {
|
|
674
|
-
val rookDataSources = RookDataSources(reactApplicationContext)
|
|
675
|
-
var redirectURL: String? = null
|
|
676
|
-
|
|
677
|
-
if (options !== null) redirectURL = options.getString("redirectURL")
|
|
678
|
-
|
|
679
|
-
rookDataSources.presentDataSourceView(redirectURL).fold({
|
|
680
|
-
promise.resolve(true)
|
|
681
|
-
}, {
|
|
682
|
-
promise.reject(it)
|
|
683
|
-
})
|
|
684
|
-
}
|
|
685
|
-
|
|
686
200
|
companion object {
|
|
687
201
|
const val NAME = "RookSdk"
|
|
688
202
|
}
|