react-native-rook-sdk 0.7.0 → 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/src/main/java/com/rooksdk/RookSdkModule.kt +51 -597
- package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +17 -1
- package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +18 -0
- package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +18 -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 +20 -0
- package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +8 -0
- package/ios/RookSdk.mm +296 -8
- package/lib/commonjs/context/RookSyncGateContext.js +12 -0
- package/lib/commonjs/context/RookSyncGateContext.js.map +1 -1
- package/lib/commonjs/context/RookSyncGateProvider.js +12 -5
- 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 -41
- 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 +18 -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 +59 -28
- package/lib/commonjs/hooks/useRookPermissions.js.map +1 -1
- package/lib/commonjs/hooks/useRookSummaries.js +23 -30
- package/lib/commonjs/hooks/useRookSummaries.js.map +1 -1
- package/lib/commonjs/modules/hook/useRookAutoSync.js +100 -32
- package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -1
- 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 +8 -1
- 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 -29
- 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 +14 -2
- 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 +39 -9
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSummaries.js +16 -23
- package/lib/module/hooks/useRookSummaries.js.map +1 -1
- package/lib/module/modules/hook/useRookAutoSync.js +100 -33
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- 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 +6 -0
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookDataSources.d.ts +6 -0
- 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 +10 -0
- 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/modules/hook/useRookAutoSync.d.ts +16 -0
- package/lib/typescript/src/modules/hook/useRookAutoSync.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/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
package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt
CHANGED
|
@@ -8,9 +8,22 @@ import com.facebook.react.bridge.ReactApplicationContext
|
|
|
8
8
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
9
9
|
import com.rookmotion.rook.sdk.RookPermissionsManager
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* AndroidPermissionsReceiverTransmitter is a custom BroadcastReceiver used to listen for updates
|
|
13
|
+
* on Android permission changes and transmit them back to the React Native layer.
|
|
14
|
+
* It listens for a broadcast containing permission status, then emits a corresponding event to JavaScript.
|
|
15
|
+
*/
|
|
11
16
|
class AndroidPermissionsReceiverTransmitter: BroadcastReceiver() {
|
|
12
17
|
private var reactApplicationContext: ReactApplicationContext? = null
|
|
13
18
|
|
|
19
|
+
/**
|
|
20
|
+
* This method is called when a broadcast is received.
|
|
21
|
+
* It checks whether the broadcast includes the permission status and emits an event to the React Native
|
|
22
|
+
* JavaScript layer with the results.
|
|
23
|
+
*
|
|
24
|
+
* @param context The context in which the receiver is running.
|
|
25
|
+
* @param intent The intent containing permission-related data.
|
|
26
|
+
*/
|
|
14
27
|
override fun onReceive(context: Context?, intent: Intent?) {
|
|
15
28
|
val permissionsGranted = intent?.getBooleanExtra(
|
|
16
29
|
/* name = */ RookPermissionsManager.EXTRA_ANDROID_PERMISSIONS_GRANTED,
|
|
@@ -29,6 +42,11 @@ class AndroidPermissionsReceiverTransmitter: BroadcastReceiver() {
|
|
|
29
42
|
.emit("ROOK_NOTIFICATION", params)
|
|
30
43
|
}
|
|
31
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Sets the ReactApplicationContext to be used for emitting events to the React Native side.
|
|
47
|
+
*
|
|
48
|
+
* @param context The ReactApplicationContext provided by React Native.
|
|
49
|
+
*/
|
|
32
50
|
fun setReactApplicationContext(context: ReactApplicationContext) {
|
|
33
51
|
this.reactApplicationContext = context
|
|
34
52
|
}
|
package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt
CHANGED
|
@@ -8,9 +8,22 @@ import com.facebook.react.bridge.ReactApplicationContext
|
|
|
8
8
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
9
9
|
import com.rookmotion.rook.sdk.RookPermissionsManager
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* HealthConnectPermissionsReceiverTransmitter is a custom BroadcastReceiver used to listen for updates
|
|
13
|
+
* on Android permission changes and transmit them back to the React Native layer.
|
|
14
|
+
* It listens for a broadcast containing permission status, then emits a corresponding event to JavaScript.
|
|
15
|
+
*/
|
|
11
16
|
class HealthConnectPermissionsReceiverTransmitter: BroadcastReceiver() {
|
|
12
17
|
private var reactApplicationContext: ReactApplicationContext? = null
|
|
13
18
|
|
|
19
|
+
/**
|
|
20
|
+
* This method is called when a broadcast is received.
|
|
21
|
+
* It checks whether the broadcast includes the permission status and emits an event to the React Native
|
|
22
|
+
* JavaScript layer with the results.
|
|
23
|
+
*
|
|
24
|
+
* @param context The context in which the receiver is running.
|
|
25
|
+
* @param intent The intent containing permission-related data.
|
|
26
|
+
*/
|
|
14
27
|
override fun onReceive(context: Context?, intent: Intent?) {
|
|
15
28
|
val permissionsGranted = intent?.getBooleanExtra(
|
|
16
29
|
/* name = */ RookPermissionsManager.EXTRA_HEALTH_CONNECT_PERMISSIONS_GRANTED,
|
|
@@ -29,6 +42,11 @@ class HealthConnectPermissionsReceiverTransmitter: BroadcastReceiver() {
|
|
|
29
42
|
.emit("ROOK_NOTIFICATION", params)
|
|
30
43
|
}
|
|
31
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Sets the ReactApplicationContext to be used for emitting events to the React Native side.
|
|
47
|
+
*
|
|
48
|
+
* @param context The ReactApplicationContext provided by React Native.
|
|
49
|
+
*/
|
|
32
50
|
fun setReactApplicationContext(context: ReactApplicationContext) {
|
|
33
51
|
this.reactApplicationContext = context
|
|
34
52
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
package com.rooksdk.modules
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.rookmotion.rook.sdk.RookConfigurationManager
|
|
8
|
+
import kotlinx.coroutines.CoroutineScope
|
|
9
|
+
import kotlinx.coroutines.Dispatchers
|
|
10
|
+
import kotlinx.coroutines.SupervisorJob
|
|
11
|
+
import kotlinx.coroutines.launch
|
|
12
|
+
|
|
13
|
+
class RookConfigurationModule(
|
|
14
|
+
reactContext: ReactApplicationContext,
|
|
15
|
+
private val rookConfigurationManager: RookConfigurationManager
|
|
16
|
+
): ReactContextBaseJavaModule(reactContext) {
|
|
17
|
+
|
|
18
|
+
private val scope: CoroutineScope by lazy {
|
|
19
|
+
CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Retrieves the currently stored user ID in the Rook SDK configuration.
|
|
24
|
+
* @param promise A promise object to handle the result (resolved with the user ID or rejected with an error).
|
|
25
|
+
*/
|
|
26
|
+
@ReactMethod
|
|
27
|
+
fun getUserID(promise: Promise) {
|
|
28
|
+
scope.launch {
|
|
29
|
+
try {
|
|
30
|
+
promise.resolve(rookConfigurationManager.getUserID())
|
|
31
|
+
}
|
|
32
|
+
catch (e: Exception) {
|
|
33
|
+
promise.reject(e)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Updates the user ID in the Rook SDK configuration.
|
|
40
|
+
* @param userID The new user ID to be set.
|
|
41
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
42
|
+
*/
|
|
43
|
+
@ReactMethod
|
|
44
|
+
fun updateUserID(userID: String, promise: Promise) {
|
|
45
|
+
scope.launch {
|
|
46
|
+
rookConfigurationManager.updateUserID(userID).fold({
|
|
47
|
+
promise.resolve(true)
|
|
48
|
+
}, {
|
|
49
|
+
promise.reject(it)
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Clears the user ID stored in the Rook SDK configuration.
|
|
56
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
57
|
+
*/
|
|
58
|
+
@ReactMethod
|
|
59
|
+
fun clearUserID(promise: Promise) {
|
|
60
|
+
scope.launch {
|
|
61
|
+
rookConfigurationManager.clearUserID().fold({
|
|
62
|
+
promise.resolve(true)
|
|
63
|
+
}, {
|
|
64
|
+
promise.reject(it)
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Deletes the user data from the Rook platform by removing the user from the system.
|
|
71
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
72
|
+
*/
|
|
73
|
+
@ReactMethod
|
|
74
|
+
fun removeUserFromRook(promise: Promise) {
|
|
75
|
+
scope.launch {
|
|
76
|
+
val result = rookConfigurationManager.deleteUserFromRook()
|
|
77
|
+
|
|
78
|
+
result.fold({
|
|
79
|
+
promise.resolve(true)
|
|
80
|
+
}, {
|
|
81
|
+
promise.reject(it)
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Synchronizes the user's time zone with the Rook platform to ensure data is processed correctly.
|
|
88
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
89
|
+
*/
|
|
90
|
+
@ReactMethod
|
|
91
|
+
fun syncUserTimeZone(promise: Promise) {
|
|
92
|
+
scope.launch {
|
|
93
|
+
val result = rookConfigurationManager.syncUserTimeZone()
|
|
94
|
+
|
|
95
|
+
result.fold({
|
|
96
|
+
promise.resolve(true)
|
|
97
|
+
}, {
|
|
98
|
+
promise.reject(it)
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
override fun getName(): String {
|
|
104
|
+
return "RookConfigurationModule"
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
package com.rooksdk.modules
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.rookmotion.rook.sdk.RookPermissionsManager
|
|
8
|
+
import com.rookmotion.rook.sdk.domain.enums.HealthConnectAvailability
|
|
9
|
+
import com.rookmotion.rook.sdk.domain.enums.RequestPermissionsStatus
|
|
10
|
+
import kotlinx.coroutines.CoroutineScope
|
|
11
|
+
import kotlinx.coroutines.Dispatchers
|
|
12
|
+
import kotlinx.coroutines.SupervisorJob
|
|
13
|
+
import kotlinx.coroutines.launch
|
|
14
|
+
|
|
15
|
+
class RookPermissionsModule(reactContext: ReactApplicationContext):
|
|
16
|
+
ReactContextBaseJavaModule(reactContext) {
|
|
17
|
+
|
|
18
|
+
private val rookPermissionsManager: RookPermissionsManager by lazy {
|
|
19
|
+
RookPermissionsManager(reactContext)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private val scope: CoroutineScope by lazy {
|
|
23
|
+
CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks the availability of Health Connect on the device (whether it is installed, not installed, or not supported).
|
|
28
|
+
* @param promise A promise object to handle the result (resolved with the availability status or rejected on failure).
|
|
29
|
+
*/
|
|
30
|
+
@ReactMethod
|
|
31
|
+
fun checkAvailability(promise: Promise) {
|
|
32
|
+
val r = rookPermissionsManager.checkHealthConnectAvailability()
|
|
33
|
+
|
|
34
|
+
when(r) {
|
|
35
|
+
HealthConnectAvailability.INSTALLED -> promise.resolve("INSTALED")
|
|
36
|
+
HealthConnectAvailability.NOT_INSTALLED -> promise.resolve("NOT_INSTALED")
|
|
37
|
+
HealthConnectAvailability.NOT_SUPPORTED -> promise.resolve("NOT_SUPPORTED")
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Opens the Health Connect settings page on the device for the user to manage permissions.
|
|
43
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
44
|
+
*/
|
|
45
|
+
@ReactMethod
|
|
46
|
+
fun openHealthConnectSettings(promise: Promise) {
|
|
47
|
+
scope.launch {
|
|
48
|
+
|
|
49
|
+
val result = rookPermissionsManager.openHealthConnectSettings()
|
|
50
|
+
|
|
51
|
+
result.fold({
|
|
52
|
+
promise.resolve(true)
|
|
53
|
+
},{
|
|
54
|
+
promise.reject(it)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Checks the current permissions granted by Health Connect to ensure the application has the necessary access.
|
|
62
|
+
* @param promise A promise object to handle the result (resolved with permission status or rejected on failure).
|
|
63
|
+
*/
|
|
64
|
+
@ReactMethod
|
|
65
|
+
fun checkPermissions(promise: Promise) {
|
|
66
|
+
scope.launch {
|
|
67
|
+
val result = rookPermissionsManager.checkHealthConnectPermissions()
|
|
68
|
+
|
|
69
|
+
result.fold({
|
|
70
|
+
promise.resolve(it)
|
|
71
|
+
}, {
|
|
72
|
+
promise.reject(it)
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Requests Health Connect permissions from the user if they are not already granted.
|
|
79
|
+
* @param promise A promise object to handle the result (resolved with the permission status or rejected on failure).
|
|
80
|
+
*/
|
|
81
|
+
@ReactMethod
|
|
82
|
+
fun requestAllPermissions(promise: Promise) {
|
|
83
|
+
scope.launch {
|
|
84
|
+
rookPermissionsManager.requestHealthConnectPermissions().fold({
|
|
85
|
+
when(it) {
|
|
86
|
+
RequestPermissionsStatus.REQUEST_SENT -> {
|
|
87
|
+
promise.resolve("REQUEST_SENT")
|
|
88
|
+
}
|
|
89
|
+
RequestPermissionsStatus .ALREADY_GRANTED -> {
|
|
90
|
+
promise.resolve("ALREADY_GRANTED")
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
promise.reject(it)
|
|
95
|
+
})
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Checks if the SDK has permissions to use background permissions
|
|
101
|
+
* */
|
|
102
|
+
@ReactMethod
|
|
103
|
+
fun hasAndroidBackgroundPermissions(promise: Promise) {
|
|
104
|
+
try {
|
|
105
|
+
val result = rookPermissionsManager.checkAndroidPermissions()
|
|
106
|
+
promise.resolve(result)
|
|
107
|
+
}
|
|
108
|
+
catch (e: Exception) {
|
|
109
|
+
promise.reject(e)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Requests Android permissions for step counting if they are not already granted.
|
|
115
|
+
* @param promise A promise object to handle the result (resolved with the permission status or rejected on failure).
|
|
116
|
+
*/
|
|
117
|
+
@ReactMethod
|
|
118
|
+
fun requestAndroidBackgroundPermissions(promise: Promise) {
|
|
119
|
+
try {
|
|
120
|
+
val response = rookPermissionsManager.requestAndroidPermissions()
|
|
121
|
+
|
|
122
|
+
if (response == RequestPermissionsStatus.REQUEST_SENT)
|
|
123
|
+
promise.resolve("REQUEST_SENT")
|
|
124
|
+
else promise.resolve("ALREADY_GRANTED")
|
|
125
|
+
}
|
|
126
|
+
catch (e: Exception) {
|
|
127
|
+
promise.reject(e)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Check if the SDK should request permissions to use android services
|
|
133
|
+
* to show an sticky notification
|
|
134
|
+
* */
|
|
135
|
+
@ReactMethod
|
|
136
|
+
fun shouldRequestAndroidBackgroundPermissions(promise: Promise) {
|
|
137
|
+
val activity = reactApplicationContext.currentActivity
|
|
138
|
+
|
|
139
|
+
if (activity == null) {
|
|
140
|
+
promise.reject(Exception("Error trying to request permissions"))
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
val r = RookPermissionsManager.shouldRequestAndroidPermissions(activity)
|
|
146
|
+
promise.resolve(r)
|
|
147
|
+
}
|
|
148
|
+
catch (e: Exception) {
|
|
149
|
+
promise.reject(e)
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
companion object {
|
|
154
|
+
const val NAME = "RookPermissionsModule"
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
override fun getName(): String {
|
|
158
|
+
return NAME
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
package com.rooksdk.modules
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.rookmotion.rook.sdk.RookStepsManager
|
|
8
|
+
import kotlinx.coroutines.CoroutineScope
|
|
9
|
+
import kotlinx.coroutines.Dispatchers
|
|
10
|
+
import kotlinx.coroutines.SupervisorJob
|
|
11
|
+
import kotlinx.coroutines.cancel
|
|
12
|
+
import kotlinx.coroutines.launch
|
|
13
|
+
|
|
14
|
+
class RookStepsModule(
|
|
15
|
+
reactContext: ReactApplicationContext
|
|
16
|
+
): ReactContextBaseJavaModule(reactContext) {
|
|
17
|
+
|
|
18
|
+
private val scope: CoroutineScope by lazy {
|
|
19
|
+
CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private val rookStepsManager: RookStepsManager by lazy {
|
|
23
|
+
RookStepsManager(reactApplicationContext)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks if step count data is available on the device.
|
|
28
|
+
* @param promise A promise object to handle the result (resolved with true/false).
|
|
29
|
+
*/
|
|
30
|
+
@ReactMethod
|
|
31
|
+
fun isStepsAvailable(promise: Promise) {
|
|
32
|
+
promise.resolve(rookStepsManager.isAvailable())
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Enables background step counting on Android devices, allowing the app to track steps continuously.
|
|
37
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
38
|
+
*/
|
|
39
|
+
@ReactMethod
|
|
40
|
+
fun enableBackgroundAndroidSteps(promise: Promise) {
|
|
41
|
+
rookStepsManager.enableBackgroundAndroidSteps().fold({
|
|
42
|
+
promise.resolve(true)
|
|
43
|
+
}, {
|
|
44
|
+
promise.reject(it)
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Disables background step counting on Android devices.
|
|
50
|
+
* @param promise A promise object to handle the result (resolved on success, rejected on failure).
|
|
51
|
+
*/
|
|
52
|
+
@ReactMethod
|
|
53
|
+
fun disableBackgroundAndroidSteps(promise: Promise) {
|
|
54
|
+
rookStepsManager
|
|
55
|
+
.disableBackgroundAndroidSteps()
|
|
56
|
+
.fold({
|
|
57
|
+
scope.cancel()
|
|
58
|
+
promise.resolve(true)
|
|
59
|
+
}, {
|
|
60
|
+
promise.reject(it)
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Checks whether background step tracking on Android is currently active.
|
|
66
|
+
* This method queries the Rook SDK to determine if background step counting
|
|
67
|
+
* is enabled and active on the device.
|
|
68
|
+
*
|
|
69
|
+
* @param promise A promise object that resolves with a boolean value:
|
|
70
|
+
* - true if background step tracking is active,
|
|
71
|
+
* - false otherwise.
|
|
72
|
+
*/
|
|
73
|
+
@ReactMethod
|
|
74
|
+
fun isBackgroundAndroidStepsActive(promise: Promise) {
|
|
75
|
+
scope.launch {
|
|
76
|
+
val response = rookStepsManager.isBackgroundAndroidStepsActive()
|
|
77
|
+
promise.resolve(response)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Synchronizes the step count for the current day
|
|
83
|
+
* This method queries the Rook SDK to retrieve the number of steps counted today
|
|
84
|
+
* from the Android platform and returns the result to the React Native layer.
|
|
85
|
+
*
|
|
86
|
+
* @param promise A promise object that resolves with the step count as a string
|
|
87
|
+
* or rejects with an error if the synchronization fails.
|
|
88
|
+
*/
|
|
89
|
+
@ReactMethod
|
|
90
|
+
fun syncTodayAndroidStepsCount(promise: Promise) {
|
|
91
|
+
scope.launch {
|
|
92
|
+
rookStepsManager
|
|
93
|
+
.syncTodayAndroidStepsCount()
|
|
94
|
+
.fold({
|
|
95
|
+
promise.resolve(it.toString())
|
|
96
|
+
}, {
|
|
97
|
+
promise.reject(it)
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
override fun getName(): String {
|
|
103
|
+
return "RookStepsModule"
|
|
104
|
+
}
|
|
105
|
+
}
|