react-native-rook-sdk 4.0.0-beta.1 → 4.0.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.
Files changed (332) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -35
  3. package/android/build.gradle +45 -20
  4. package/android/gradle.properties +5 -5
  5. package/android/src/main/AndroidManifest.xml +2 -1
  6. package/android/src/main/AndroidManifestNew.xml +36 -0
  7. package/android/src/main/java/com/rooksdk/RookSdkModule.kt +263 -11
  8. package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +42 -26
  9. package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +65 -0
  10. package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +70 -0
  11. package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
  12. package/android/src/main/java/com/rooksdk/modules/RookBackgroundSyncModule.kt +99 -0
  13. package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +182 -0
  14. package/android/src/main/java/com/rooksdk/modules/RookLocalData.kt +301 -0
  15. package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +359 -0
  16. package/android/src/main/java/com/rooksdk/modules/RookSourcesModule.kt +102 -0
  17. package/android/src/main/java/com/rooksdk/modules/RookStepsModule.kt +119 -0
  18. package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +551 -0
  19. package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +34 -0
  20. package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
  21. package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +145 -0
  22. package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
  23. package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +17 -0
  24. package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
  25. package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
  26. package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
  27. package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +19 -0
  28. package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
  29. package/android/src/main/res/drawable/ic_health_connect.xml +19 -0
  30. package/android/src/main/res/values/themes.xml +3 -0
  31. package/ios/DateHelper.swift +4 -4
  32. package/ios/EncodableDataSource.swift +3 -2
  33. package/ios/EncodableDataSourceAuthorizer.swift +3 -2
  34. package/ios/{HearRateMapper.swift → EncodableHeartRate.swift} +3 -3
  35. package/ios/EncodableRookDataSource.swift +36 -0
  36. package/ios/EncodableSDKState.swift +94 -0
  37. package/ios/EncodableStatusDataSources.swift +47 -0
  38. package/ios/NutritionMapper.swift +114 -0
  39. package/ios/RookBackground.swift +8 -5
  40. package/ios/RookBackgroundModule.h +5 -0
  41. package/ios/RookBackgroundModule.mm +15 -0
  42. package/ios/RookConfiguration.swift +34 -24
  43. package/ios/RookConfigurationModule.h +5 -0
  44. package/ios/RookConfigurationModule.mm +22 -0
  45. package/ios/RookExternalModule.h +5 -0
  46. package/ios/RookExternalModule.m +31 -0
  47. package/ios/{RookData.swift → RookLocalData.swift} +70 -48
  48. package/ios/RookPermissions.swift +33 -5
  49. package/ios/RookPermissionsModule.h +5 -0
  50. package/ios/RookPermissionsModule.mm +20 -0
  51. package/ios/RookSdk.h +2 -14
  52. package/ios/RookSdk.mm +97 -546
  53. package/ios/RookSources.swift +54 -60
  54. package/ios/RookSourcesModule.h +5 -0
  55. package/ios/RookSourcesModule.mm +18 -0
  56. package/ios/RookSync.h +5 -0
  57. package/ios/RookSync.m +35 -0
  58. package/ios/RookSync.swift +78 -48
  59. package/ios/SwiftTest.swift +18 -0
  60. package/ios/react-native-rook-sdk-Bridging-Header.h +12 -0
  61. package/{src/context/RookSyncGateContext.ts → lib/commonjs/context/RookSyncGateContext.js} +13 -10
  62. package/lib/commonjs/context/RookSyncGateContext.js.map +1 -0
  63. package/lib/commonjs/context/RookSyncGateProvider.js +108 -0
  64. package/lib/commonjs/context/RookSyncGateProvider.js.map +1 -0
  65. package/{src/context/RookSyncGateReducer.ts → lib/commonjs/context/RookSyncGateReducer.js} +44 -13
  66. package/lib/commonjs/context/RookSyncGateReducer.js.map +1 -0
  67. package/lib/commonjs/context/RookSyncGateTypes.js +6 -0
  68. package/lib/commonjs/context/RookSyncGateTypes.js.map +1 -0
  69. package/lib/commonjs/context/index.js +14 -0
  70. package/lib/commonjs/context/index.js.map +1 -0
  71. package/lib/commonjs/hooks/index.js +76 -0
  72. package/lib/commonjs/hooks/index.js.map +1 -0
  73. package/{src/hooks/useRookAPISources.ts → lib/commonjs/hooks/useRookAPISources.js} +36 -40
  74. package/lib/commonjs/hooks/useRookAPISources.js.map +1 -0
  75. package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js +88 -0
  76. package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js.map +1 -0
  77. package/lib/commonjs/hooks/useRookAppleHealth.js +63 -0
  78. package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
  79. package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
  80. package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
  81. package/lib/commonjs/hooks/useRookData.js +116 -0
  82. package/lib/commonjs/hooks/useRookData.js.map +1 -0
  83. package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
  84. package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
  85. package/lib/commonjs/hooks/useRookPermissions.js +211 -0
  86. package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
  87. package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
  88. package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
  89. package/lib/commonjs/hooks/useRookSync.js +148 -0
  90. package/lib/commonjs/hooks/useRookSync.js.map +1 -0
  91. package/lib/commonjs/hooks/useRookVariables.js +93 -0
  92. package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
  93. package/lib/commonjs/index.js +121 -0
  94. package/lib/commonjs/index.js.map +1 -0
  95. package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
  96. package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
  97. package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
  98. package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
  99. package/lib/commonjs/modules/utils/errors.js +12 -0
  100. package/lib/commonjs/modules/utils/errors.js.map +1 -0
  101. package/lib/commonjs/types/ActivityEvent.js +6 -0
  102. package/lib/commonjs/types/ActivityEvent.js.map +1 -0
  103. package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
  104. package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
  105. package/lib/{module/NativeRookSdk.js → commonjs/types/AppleHealthPermissions.js} +7 -45
  106. package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
  107. package/lib/commonjs/types/AuthorizedSources.js +6 -0
  108. package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
  109. package/lib/commonjs/types/BodySummary.js +6 -0
  110. package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
  111. package/lib/commonjs/types/DataSource.js +16 -0
  112. package/lib/commonjs/types/DataSource.js.map +1 -0
  113. package/lib/commonjs/types/DiagnosticState.js +2 -0
  114. package/lib/commonjs/types/DiagnosticState.js.map +1 -0
  115. package/lib/commonjs/types/HCMealData.js +65 -0
  116. package/lib/commonjs/types/HCMealData.js.map +1 -0
  117. package/lib/commonjs/types/HeartRateEvent.js +2 -0
  118. package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
  119. package/lib/commonjs/types/PermissionsType.js +2 -0
  120. package/lib/commonjs/types/PermissionsType.js.map +1 -0
  121. package/lib/commonjs/types/PhysicalSummary.js +6 -0
  122. package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
  123. package/lib/commonjs/types/SDKSources.js +13 -0
  124. package/lib/commonjs/types/SDKSources.js.map +1 -0
  125. package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
  126. package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
  127. package/lib/commonjs/types/SleepSummary.js +6 -0
  128. package/lib/commonjs/types/SleepSummary.js.map +1 -0
  129. package/lib/commonjs/types/SummaryTypes.js +2 -0
  130. package/lib/commonjs/types/SummaryTypes.js.map +1 -0
  131. package/lib/commonjs/types/SyncTypes.js +33 -0
  132. package/lib/commonjs/types/SyncTypes.js.map +1 -0
  133. package/lib/commonjs/types/WriteNutrition.js +18 -0
  134. package/lib/commonjs/types/WriteNutrition.js.map +1 -0
  135. package/lib/commonjs/utils/getNativeModule.js +29 -0
  136. package/lib/commonjs/utils/getNativeModule.js.map +1 -0
  137. package/lib/commonjs/utils/getRookModule.js +28 -0
  138. package/lib/commonjs/utils/getRookModule.js.map +1 -0
  139. package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
  140. package/lib/commonjs/utils/isModuleReady.js.map +1 -0
  141. package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
  142. package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
  143. package/lib/commonjs/utils/isRunningOniOS.js +15 -0
  144. package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
  145. package/lib/commonjs/utils/isValidDate.js +41 -0
  146. package/lib/commonjs/utils/isValidDate.js.map +1 -0
  147. package/lib/commonjs/utils/nativeModules.js +29 -0
  148. package/lib/commonjs/utils/nativeModules.js.map +1 -0
  149. package/lib/commonjs/utils/packageInfo.js +13 -0
  150. package/lib/commonjs/utils/packageInfo.js.map +1 -0
  151. package/lib/module/context/RookSyncGateContext.js +0 -2
  152. package/lib/module/context/RookSyncGateContext.js.map +1 -1
  153. package/lib/module/context/RookSyncGateProvider.js +31 -22
  154. package/lib/module/context/RookSyncGateProvider.js.map +1 -1
  155. package/lib/module/context/RookSyncGateReducer.js +12 -4
  156. package/lib/module/context/RookSyncGateReducer.js.map +1 -1
  157. package/lib/module/context/RookSyncGateTypes.js +0 -2
  158. package/lib/module/context/index.js +2 -0
  159. package/lib/module/context/index.js.map +1 -0
  160. package/lib/module/hooks/index.js +11 -0
  161. package/lib/module/hooks/index.js.map +1 -0
  162. package/lib/module/hooks/useRookAPISources.js +16 -10
  163. package/lib/module/hooks/useRookAPISources.js.map +1 -1
  164. package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
  165. package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
  166. package/lib/module/hooks/useRookAppleHealth.js +10 -9
  167. package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
  168. package/lib/module/hooks/useRookConfiguration.js +34 -10
  169. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  170. package/lib/module/hooks/useRookData.js +45 -31
  171. package/lib/module/hooks/useRookData.js.map +1 -1
  172. package/lib/module/hooks/useRookHealthConnect.js +10 -9
  173. package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
  174. package/lib/module/hooks/useRookPermissions.js +49 -26
  175. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  176. package/lib/module/hooks/useRookSamsungHealth.js +20 -8
  177. package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
  178. package/lib/module/hooks/useRookSync.js +32 -23
  179. package/lib/module/hooks/useRookSync.js.map +1 -1
  180. package/lib/module/hooks/useRookVariables.js +37 -19
  181. package/lib/module/hooks/useRookVariables.js.map +1 -1
  182. package/lib/module/index.js +10 -18
  183. package/lib/module/index.js.map +1 -1
  184. package/lib/module/modules/hook/useRookAutoSync.js +40 -27
  185. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  186. package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
  187. package/lib/module/modules/utils/errors.js +0 -2
  188. package/lib/module/modules/utils/errors.js.map +1 -1
  189. package/lib/module/types/ActivityEvent.js +0 -2
  190. package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
  191. package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
  192. package/lib/module/types/AppleHealthPermissions.js +0 -2
  193. package/lib/module/types/AppleHealthPermissions.js.map +1 -1
  194. package/lib/module/types/AuthorizedSources.js +0 -2
  195. package/lib/module/types/BodySummary.js +0 -2
  196. package/lib/module/types/DataSource.js +0 -2
  197. package/lib/module/types/DataSource.js.map +1 -1
  198. package/lib/module/types/DiagnosticState.js +2 -0
  199. package/lib/module/types/DiagnosticState.js.map +1 -0
  200. package/lib/module/types/HCMealData.js +59 -0
  201. package/lib/module/types/HCMealData.js.map +1 -0
  202. package/lib/module/types/HeartRateEvent.js +1 -1
  203. package/lib/module/types/PermissionsType.js +1 -1
  204. package/lib/module/types/PhysicalSummary.js +0 -2
  205. package/lib/module/types/SDKSources.js +0 -2
  206. package/lib/module/types/SDKSources.js.map +1 -1
  207. package/lib/module/types/SamsungHealthPermissions.js +0 -3
  208. package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
  209. package/lib/module/types/SleepSummary.js +0 -2
  210. package/lib/module/types/SummaryTypes.js +1 -1
  211. package/lib/module/types/SyncTypes.js +0 -2
  212. package/lib/module/types/SyncTypes.js.map +1 -1
  213. package/lib/module/types/WriteNutrition.js +12 -0
  214. package/lib/module/types/WriteNutrition.js.map +1 -0
  215. package/lib/module/utils/getNativeModule.js +23 -0
  216. package/lib/module/utils/getNativeModule.js.map +1 -0
  217. package/lib/module/utils/getRookModule.js +22 -0
  218. package/lib/module/utils/getRookModule.js.map +1 -0
  219. package/lib/module/utils/isModuleReady.js +0 -2
  220. package/lib/module/utils/isModuleReady.js.map +1 -1
  221. package/lib/module/utils/isRunningOnAndroid.js +0 -2
  222. package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
  223. package/lib/module/utils/isRunningOniOS.js +0 -2
  224. package/lib/module/utils/isRunningOniOS.js.map +1 -1
  225. package/lib/module/utils/isValidDate.js +20 -2
  226. package/lib/module/utils/isValidDate.js.map +1 -1
  227. package/lib/module/utils/nativeModules.js +23 -0
  228. package/lib/module/utils/nativeModules.js.map +1 -0
  229. package/lib/module/utils/packageInfo.js +7 -0
  230. package/lib/module/utils/packageInfo.js.map +1 -0
  231. package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
  232. package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
  233. package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
  234. package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
  235. package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
  236. package/lib/typescript/src/context/index.d.ts +2 -0
  237. package/lib/typescript/src/context/index.d.ts.map +1 -0
  238. package/lib/typescript/src/hooks/index.d.ts +11 -0
  239. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  240. package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
  241. package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
  242. package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
  243. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
  244. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  245. package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
  246. package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
  247. package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
  248. package/lib/typescript/src/hooks/useRookPermissions.d.ts +2 -0
  249. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  250. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
  251. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
  252. package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
  253. package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
  254. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
  255. package/lib/typescript/src/index.d.ts +8 -17
  256. package/lib/typescript/src/index.d.ts.map +1 -1
  257. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  258. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
  259. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
  260. package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
  261. package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
  262. package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
  263. package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
  264. package/lib/typescript/src/types/HCMealData.d.ts +60 -0
  265. package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
  266. package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
  267. package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
  268. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
  269. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
  270. package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
  271. package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
  272. package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
  273. package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
  274. package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
  275. package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
  276. package/lib/typescript/src/utils/getRookModule.d.ts +9 -0
  277. package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
  278. package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
  279. package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
  280. package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
  281. package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
  282. package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
  283. package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
  284. package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
  285. package/package.json +98 -94
  286. package/react-native-rook-sdk.podspec +45 -0
  287. package/RNRookSdk.podspec +0 -22
  288. package/ios/Encodable.swift +0 -25
  289. package/ios/RookEntry.swift +0 -61
  290. package/ios/RookSdk-Bridging-Header.h +0 -12
  291. package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
  292. package/lib/module/NativeRookSdk.js.map +0 -1
  293. package/lib/module/package.json +0 -1
  294. package/lib/module/types/Rook.js +0 -2
  295. package/lib/typescript/package.json +0 -1
  296. package/lib/typescript/src/NativeRookSdk.d.ts +0 -190
  297. package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
  298. package/lib/typescript/src/types/Rook.d.ts +0 -9
  299. package/lib/typescript/src/types/Rook.d.ts.map +0 -1
  300. package/src/NativeRookSdk.ts +0 -281
  301. package/src/context/RookSyncGateProvider.tsx +0 -78
  302. package/src/context/RookSyncGateTypes.ts +0 -34
  303. package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
  304. package/src/hooks/useRookAppleHealth.ts +0 -55
  305. package/src/hooks/useRookConfiguration.ts +0 -82
  306. package/src/hooks/useRookData.ts +0 -122
  307. package/src/hooks/useRookHealthConnect.ts +0 -59
  308. package/src/hooks/useRookPermissions.ts +0 -224
  309. package/src/hooks/useRookSamsungHealth.ts +0 -37
  310. package/src/hooks/useRookSync.ts +0 -157
  311. package/src/hooks/useRookVariables.ts +0 -77
  312. package/src/index.tsx +0 -28
  313. package/src/modules/hook/useRookAutoSync.ts +0 -305
  314. package/src/modules/types/sendMessageBroadcast.ts +0 -5
  315. package/src/modules/utils/errors.ts +0 -9
  316. package/src/types/ActivityEvent.ts +0 -159
  317. package/src/types/AppleHealthPermissions.ts +0 -49
  318. package/src/types/AuthorizedSources.ts +0 -33
  319. package/src/types/BodySummary.ts +0 -116
  320. package/src/types/DataSource.ts +0 -16
  321. package/src/types/HeartRateEvent.ts +0 -26
  322. package/src/types/PermissionsType.ts +0 -9
  323. package/src/types/PhysicalSummary.ts +0 -84
  324. package/src/types/Rook.ts +0 -8
  325. package/src/types/SDKSources.ts +0 -5
  326. package/src/types/SamsungHealthPermissions.ts +0 -16
  327. package/src/types/SleepSummary.ts +0 -66
  328. package/src/types/SummaryTypes.ts +0 -70
  329. package/src/types/SyncTypes.ts +0 -63
  330. package/src/utils/isRunningOnAndroid.ts +0 -10
  331. package/src/utils/isRunningOniOS.ts +0 -10
  332. package/src/utils/isValidDate.ts +0 -15
@@ -0,0 +1,70 @@
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 com.rookmotion.rook.sdk.RookPermissionsManager
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
+ */
16
+ class HealthConnectPermissionsReceiverTransmitter: BroadcastReceiver() {
17
+ private var reactApplicationContext: ReactApplicationContext? = null
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
+ */
27
+ override fun onReceive(context: Context?, intent: Intent?) {
28
+ val permissionsGranted = intent?.getBooleanExtra(
29
+ /* name = */ RookPermissionsManager.EXTRA_HEALTH_CONNECT_PERMISSIONS_GRANTED,
30
+ /* defaultValue = */ false
31
+ ) ?: false
32
+
33
+ val partiallyGranted = intent?.getBooleanExtra(
34
+ RookPermissionsManager.EXTRA_HEALTH_CONNECT_PERMISSIONS_PARTIALLY_GRANTED,
35
+ false
36
+ ) ?: false
37
+
38
+ val backgroundReadStatus = intent?.getBooleanExtra(
39
+ RookPermissionsManager.EXTRA_HEALTH_CONNECT_BACKGROUND_PERMISSION_GRANTED,
40
+ false
41
+ ) ?: false
42
+
43
+ reactApplicationContext?.also { reactContext ->
44
+ val events = listOf(
45
+ "ROOK_HEALTH_CONNECT_PERMISSIONS" to permissionsGranted,
46
+ "ROOK_HEALTH_CONNECT_PERMISSIONS_PARTIALLY_GRANTED" to partiallyGranted,
47
+ "ROOK_HEALTH_CONNECT_BACKGROUND_PERMISSIONS" to backgroundReadStatus,
48
+ )
49
+
50
+ val emitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
51
+
52
+ events.forEach { (type, value) ->
53
+ Arguments.createMap().apply {
54
+ putString("type", type)
55
+ putBoolean("value", value)
56
+ emitter.emit("ROOK_NOTIFICATION", this)
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Sets the ReactApplicationContext to be used for emitting events to the React Native side.
64
+ *
65
+ * @param context The ReactApplicationContext provided by React Native.
66
+ */
67
+ fun setReactApplicationContext(context: ReactApplicationContext) {
68
+ this.reactApplicationContext = context
69
+ }
70
+ }
@@ -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
+ }
@@ -0,0 +1,99 @@
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.RookBackgroundSyncManager
8
+ import com.rookmotion.rook.sdk.domain.exception.HCException
9
+ import io.tryrook.api.sources.domain.exception.ApiException
10
+ import kotlinx.coroutines.CoroutineScope
11
+ import kotlinx.coroutines.Dispatchers
12
+ import kotlinx.coroutines.SupervisorJob
13
+ import kotlinx.coroutines.launch
14
+
15
+ class RookBackgroundSyncModule (reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
16
+
17
+ private val backgroundSyncManager = RookBackgroundSyncManager(reactContext)
18
+
19
+ private val scope: CoroutineScope by lazy {
20
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
21
+ }
22
+
23
+ override fun getName(): String {
24
+ return "RookBackgroundModule"
25
+ }
26
+
27
+ /**
28
+ * Schedules the background synchronization of health data using Rook.
29
+ *
30
+ * This function enables automatic background data synchronization with Rook.
31
+ * It ensures that health data is periodically fetched and sent to Rook’s API
32
+ * based on the defined configuration.
33
+ *
34
+ * If the scheduling is successful, the promise resolves with "SUCCESS".
35
+ * If an error occurs, the promise rejects with an error message.
36
+ *
37
+ * @param promise A React Native promise that resolves when the sync is scheduled successfully or rejects with an error.
38
+ */
39
+ @ReactMethod
40
+ fun scheduleBackgroundSync(enableLogs: Boolean, promise: Promise) {
41
+ try {
42
+ backgroundSyncManager.schedule(enableLogs)
43
+ promise.resolve(true)
44
+ }
45
+ catch (e: Exception) {
46
+ if (e is HCException) {
47
+ promise.reject(e.code.toString(), e.message, e)
48
+ } else {
49
+ promise.reject("1001", e.message, e)
50
+ }
51
+ }
52
+
53
+ }
54
+
55
+ /**
56
+ * Cancels the scheduled background synchronization of health data.
57
+ *
58
+ * This function stops the automatic background sync previously scheduled using Rook.
59
+ * It ensures that no further health data is fetched and sent until scheduled again.
60
+ *
61
+ * If the cancellation is successful, the promise resolves with "SUCCESS".
62
+ * If an error occurs, the promise rejects with an error message.
63
+ *
64
+ * @param promise A React Native promise that resolves when the sync is canceled successfully or rejects with an error.
65
+ */
66
+ @ReactMethod
67
+ fun cancelBackgroundSync(promise: Promise) {
68
+ scope.launch {
69
+ try {
70
+ backgroundSyncManager.cancel()
71
+ promise.resolve(true)
72
+ } catch (e: Exception) {
73
+ if (e is HCException) {
74
+ promise.reject(e.code.toString(), e.message, e)
75
+ } else {
76
+ promise.reject("1001", e.message, e)
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ @ReactMethod
83
+ fun isBackgroundSyncEnabled(promise: Promise) {
84
+ scope.launch {
85
+ backgroundSyncManager.isScheduled().fold(
86
+ {
87
+ promise.resolve(it)
88
+ },
89
+ {
90
+ if (it is HCException) {
91
+ promise.reject(it.code.toString(), it.message, it)
92
+ } else {
93
+ promise.reject("1001", it.message, it)
94
+ }
95
+ }
96
+ )
97
+ }
98
+ }
99
+ }
@@ -0,0 +1,182 @@
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.facebook.react.bridge.ReadableArray
8
+ import com.google.gson.Gson
9
+ import com.rookmotion.rook.sdk.RookConfigurationManager
10
+ import com.rookmotion.rook.sdk.domain.exception.HCException
11
+ import com.rooksdk.utils.DatasourcesUtils
12
+ import com.rooksdk.utils.RookGsonBuilder
13
+ import com.rooksdk.utils.SamsungAvailability
14
+ import com.rooksdk.utils.Source
15
+ import io.tryrook.sdk.samsung.RookSamsung
16
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
17
+ import kotlinx.coroutines.CoroutineScope
18
+ import kotlinx.coroutines.Dispatchers
19
+ import kotlinx.coroutines.SupervisorJob
20
+ import kotlinx.coroutines.launch
21
+
22
+ class RookConfigurationModule(
23
+ reactContext: ReactApplicationContext,
24
+ private val rookConfigurationManager: RookConfigurationManager,
25
+ private val rookSamsung: RookSamsung,
26
+ ): ReactContextBaseJavaModule(reactContext) {
27
+
28
+ private val scope: CoroutineScope by lazy {
29
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
30
+ }
31
+
32
+ private val gsonBuilder: Gson by lazy {
33
+ RookGsonBuilder.getGsonBuilder()
34
+ }
35
+ /**
36
+ * Retrieves the currently stored user ID in the Rook SDK configuration.
37
+ * @param promise A promise object to handle the result (resolved with the user ID or rejected with an error).
38
+ */
39
+ @ReactMethod
40
+ fun getUserID(promise: Promise) {
41
+ scope.launch {
42
+ try {
43
+ val user = rookConfigurationManager.getUserID()
44
+ promise.resolve(user)
45
+ }
46
+ catch (it: Exception) {
47
+ if (it is HCException) {
48
+ promise.reject(it.code.toString(), it.message, it)
49
+ } else {
50
+ promise.reject("1001", it.message, it)
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Updates the user ID in the Rook SDK configuration.
58
+ * @param userID The new user ID to be set.
59
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
60
+ */
61
+ @ReactMethod
62
+ fun updateUserID(userID: String, promise: Promise) {
63
+ scope.launch {
64
+ try {
65
+ if (SamsungAvailability.isSamsungAvailable(rookSamsung)) {
66
+ val samsungResult = rookSamsung.updateUserID(userID)
67
+
68
+ if (samsungResult.isFailure) {
69
+ println("We couldn't initiate the user id in Samsung Health")
70
+ }
71
+
72
+ samsungResult.getOrThrow()
73
+ }
74
+
75
+ val healthConnectResult = rookConfigurationManager.updateUserID(userID)
76
+
77
+ if (healthConnectResult.isFailure) {
78
+ println("We couldn't initiate the user id in Health Connect")
79
+ }
80
+
81
+ healthConnectResult.getOrThrow()
82
+
83
+ promise.resolve(true)
84
+ } catch (it: Exception) {
85
+ if (it is HCException) {
86
+ promise.reject(it.code.toString(), it.message, it)
87
+ } else {
88
+ promise.reject("1001", it.message, it)
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Deletes the user data from the Rook platform by removing the user from the system.
96
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
97
+ */
98
+ @ReactMethod
99
+ fun removeUserFromRook(rawSources: ReadableArray, promise: Promise) {
100
+ scope.launch {
101
+ try {
102
+ val sources = DatasourcesUtils.readableArrayToSourceList(rawSources)
103
+
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
+ promise.resolve(true)
115
+ }
116
+ catch (it: Exception) {
117
+ if (it is HCException) {
118
+ promise.reject(it.code.toString(), it.message, it)
119
+ } else {
120
+ promise.reject("1001", it.message, it)
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Synchronizes the user's time zone with the Rook platform to ensure data is processed correctly.
128
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
129
+ */
130
+ @ReactMethod
131
+ fun syncUserTimeZone(promise: Promise) {
132
+ scope.launch {
133
+ val result = rookConfigurationManager.syncUserTimeZone()
134
+
135
+ result.fold({
136
+ promise.resolve(true)
137
+ }, {
138
+ if (it is HCException) {
139
+ promise.reject(it.code.toString(), it.message, it)
140
+ } else {
141
+ promise.reject("1001", it.message, it)
142
+ }
143
+ })
144
+ }
145
+ }
146
+
147
+ @ReactMethod
148
+ fun getHealthConnectDiagnosticState(promise: Promise) {
149
+ scope.launch {
150
+ try {
151
+ val result = rookConfigurationManager.getDiagnosticState().getOrThrow()
152
+ promise.resolve(gsonBuilder.toJson(result))
153
+ } catch (it: Exception) {
154
+ if (it is HCException) {
155
+ promise.reject(it.code.toString(), it.message, it)
156
+ } else {
157
+ promise.reject("1001", it.message, it)
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ @ReactMethod
164
+ fun getSamsungHealthDiagnosticState(promise: Promise) {
165
+ scope.launch {
166
+ try {
167
+ val result = rookSamsung.getDiagnosticState().getOrThrow()
168
+ promise.resolve(gsonBuilder.toJson(result))
169
+ } catch (it: Exception) {
170
+ if (it is HCException) {
171
+ promise.reject(it.code.toString(), it.message, it)
172
+ } else {
173
+ promise.reject("1001", it.message, it)
174
+ }
175
+ }
176
+ }
177
+ }
178
+
179
+ override fun getName(): String {
180
+ return "RookConfigurationModule"
181
+ }
182
+ }
@@ -0,0 +1,301 @@
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.facebook.react.bridge.ReadableMap
8
+ import com.google.gson.Gson
9
+ import com.google.gson.GsonBuilder
10
+ import com.rookmotion.rook.sdk.RookSyncManager
11
+ import com.rookmotion.rook.sdk.RookWriteManager
12
+ import com.rookmotion.rook.sdk.domain.annotation.ExperimentalRookApi
13
+ import com.rookmotion.rook.sdk.domain.exception.HCException
14
+ import com.rookmotion.rook.sdk.domain.model.HCActivityEvent
15
+ import com.rookmotion.rook.sdk.domain.model.HCBodySummary
16
+ import com.rookmotion.rook.sdk.domain.model.HCPhysicalSummary
17
+ import com.rookmotion.rook.sdk.domain.model.HCSleepSummary
18
+ import com.rookmotion.rook.sdk.domain.model.SyncStatusWithData
19
+ import com.rooksdk.utils.ReadableToWritable
20
+ import com.rooksdk.utils.serializers.InstantSerializer
21
+ import com.rooksdk.utils.RookDateTime
22
+ import com.rooksdk.utils.RookGsonBuilder
23
+ import com.rooksdk.utils.serializers.LocalDateSerializer
24
+ import io.tryrook.sdk.samsung.RookSamsung
25
+ import io.tryrook.sdk.samsung.domain.exception.SHException
26
+ import io.tryrook.sdk.samsung.domain.model.SHActivityEvent
27
+ import io.tryrook.sdk.samsung.domain.model.SHBodySummary
28
+ import io.tryrook.sdk.samsung.domain.model.SHPhysicalSummary
29
+ import io.tryrook.sdk.samsung.domain.model.SHSleepSummary
30
+ import io.tryrook.sdk.samsung.domain.model.SHSyncStatusWithData
31
+ import kotlinx.coroutines.CoroutineScope
32
+ import kotlinx.coroutines.Dispatchers
33
+ import kotlinx.coroutines.SupervisorJob
34
+ import kotlinx.coroutines.launch
35
+ import java.time.Instant
36
+ import java.time.LocalDate
37
+
38
+ class RookLocalData (
39
+ private val reactContext: ReactApplicationContext,
40
+ private val rookSamsung: RookSamsung,
41
+ ): ReactContextBaseJavaModule(reactContext){
42
+
43
+ private val scope: CoroutineScope by lazy {
44
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
45
+ }
46
+
47
+ private val rookHealthConnect by lazy {
48
+ RookSyncManager(reactContext)
49
+ }
50
+
51
+ private val gsonBuilder: Gson by lazy {
52
+ RookGsonBuilder.getGsonBuilder()
53
+ }
54
+
55
+ @ReactMethod
56
+ fun getSamsungSleepSummary(date: String, promise: Promise) {
57
+ val localDate = RookDateTime.stringToLocalDate(date)
58
+
59
+ scope.launch {
60
+ rookSamsung.getSleepSummary(localDate).fold(
61
+ {
62
+ when (it) {
63
+ SHSyncStatusWithData.RecordsNotFound -> {
64
+ promise.reject("SamsungSleepSummary", "Records Not Found For Date: $date")
65
+ }
66
+
67
+ is SHSyncStatusWithData.Synced<List<SHSleepSummary>> -> {
68
+ promise.resolve(gsonBuilder.toJson(it.data))
69
+ }
70
+ }
71
+ },
72
+ {
73
+ if (it is SHException) {
74
+ promise.reject(it.code.toString(), it.message, it)
75
+ } else {
76
+ promise.reject("1001", it.message, it)
77
+ }
78
+ },
79
+ )
80
+ }
81
+ }
82
+
83
+ @ReactMethod
84
+ fun getSamsungPhysicalSummary(date: String, promise: Promise) {
85
+ val localDate = RookDateTime.stringToLocalDate(date)
86
+
87
+ scope.launch {
88
+ rookSamsung.getPhysicalSummary(localDate).fold(
89
+ {
90
+ when (it) {
91
+ SHSyncStatusWithData.RecordsNotFound -> {
92
+ promise.reject("SamsungPhysicalSummary", "Records Not Found For Date: $date")
93
+ }
94
+
95
+ is SHSyncStatusWithData.Synced<SHPhysicalSummary> -> {
96
+ promise.resolve(gsonBuilder.toJson(it.data))
97
+ }
98
+ }
99
+ },
100
+ {
101
+ if (it is SHException) {
102
+ promise.reject(it.code.toString(), it.message, it)
103
+ } else {
104
+ promise.reject("1001", it.message, it)
105
+ }
106
+ },
107
+ )
108
+ }
109
+ }
110
+
111
+ @ReactMethod
112
+ fun getSamsungBodySummary(date: String, promise: Promise) {
113
+ val localDate = RookDateTime.stringToLocalDate(date)
114
+
115
+ scope.launch {
116
+ rookSamsung.getBodySummary(localDate).fold(
117
+ {
118
+ when (it) {
119
+ SHSyncStatusWithData.RecordsNotFound -> {
120
+ promise.reject("SamsungBodySummary", "Records Not Found For Date: $date")
121
+ }
122
+
123
+ is SHSyncStatusWithData.Synced<SHBodySummary> -> {
124
+ promise.resolve(gsonBuilder.toJson(it.data))
125
+ }
126
+ }
127
+ },
128
+ {
129
+ if (it is SHException) {
130
+ promise.reject(it.code.toString(), it.message, it)
131
+ } else {
132
+ promise.reject("1001", it.message, it)
133
+ }
134
+ },
135
+ )
136
+ }
137
+ }
138
+
139
+ @ReactMethod
140
+ fun getSamsungActivityEvents(date: String, promise: Promise) {
141
+ val localDate = RookDateTime.stringToLocalDate(date)
142
+
143
+ scope.launch {
144
+ rookSamsung.getActivityEvents(localDate).fold(
145
+ {
146
+ when (it) {
147
+ SHSyncStatusWithData.RecordsNotFound -> {
148
+ promise.reject("SamsungActivityEvents", "Records Not Found For Date: $date")
149
+ }
150
+
151
+ is SHSyncStatusWithData.Synced<List<SHActivityEvent>> -> {
152
+ promise.resolve(gsonBuilder.toJson(it.data))
153
+ }
154
+ }
155
+ },
156
+ {
157
+ if (it is SHException) {
158
+ promise.reject(it.code.toString(), it.message, it)
159
+ } else {
160
+ promise.reject("1001", it.message, it)
161
+ }
162
+ },
163
+ )
164
+ }
165
+ }
166
+
167
+ // Health Connect
168
+ @ReactMethod
169
+ fun getHealthConnectSleepSummary(date: String, promise: Promise) {
170
+ val localDate = RookDateTime.stringToLocalDate(date)
171
+
172
+ scope.launch {
173
+ rookHealthConnect.getSleepSummary(localDate).fold(
174
+ {
175
+ when (it) {
176
+ SyncStatusWithData.RecordsNotFound -> {
177
+ promise.reject("HealthConnectSleepSummary", "Records Not Found For Date: $date")
178
+ }
179
+
180
+ is SyncStatusWithData.Synced<List<HCSleepSummary>> -> {
181
+ promise.resolve(gsonBuilder.toJson(it.data))
182
+ }
183
+ }
184
+ },
185
+ {
186
+ if (it is HCException) {
187
+ promise.reject(it.code.toString(), it.message, it)
188
+ } else {
189
+ promise.reject("1001", it.message, it)
190
+ }
191
+ },
192
+ )
193
+ }
194
+ }
195
+
196
+ @ReactMethod
197
+ fun getHealthConnectPhysicalSummary(date: String, promise: Promise) {
198
+ val localDate = RookDateTime.stringToLocalDate(date)
199
+
200
+ scope.launch {
201
+ rookHealthConnect.getPhysicalSummary(localDate).fold(
202
+ {
203
+ when (it) {
204
+ SyncStatusWithData.RecordsNotFound -> {
205
+ promise.reject("HealthConnectPhysicalSummary", "Records Not Found For Date: $date")
206
+ }
207
+
208
+ is SyncStatusWithData.Synced<HCPhysicalSummary> -> {
209
+ promise.resolve(gsonBuilder.toJson(it.data))
210
+ }
211
+ }
212
+ },
213
+ {
214
+ if (it is HCException) {
215
+ promise.reject(it.code.toString(), it.message, it)
216
+ } else {
217
+ promise.reject("1001", it.message, it)
218
+ }
219
+ },
220
+ )
221
+ }
222
+ }
223
+
224
+ @ReactMethod
225
+ fun getHealthConnectBodySummary(date: String, promise: Promise) {
226
+ val localDate = RookDateTime.stringToLocalDate(date)
227
+
228
+ scope.launch {
229
+ rookHealthConnect.getBodySummary(localDate).fold(
230
+ {
231
+ when (it) {
232
+ SyncStatusWithData.RecordsNotFound -> {
233
+ promise.reject("HealthConnectBodySummary", "Records Not Found For Date: $date")
234
+ }
235
+
236
+ is SyncStatusWithData.Synced<HCBodySummary> -> {
237
+ promise.resolve(gsonBuilder.toJson(it.data))
238
+ }
239
+ }
240
+ },
241
+ {
242
+ if (it is HCException) {
243
+ promise.reject(it.code.toString(), it.message, it)
244
+ } else {
245
+ promise.reject("1001", it.message, it)
246
+ }
247
+ },
248
+ )
249
+ }
250
+ }
251
+
252
+ @ReactMethod
253
+ fun getHealthConnectActivityEvents(date: String, promise: Promise) {
254
+ val localDate = RookDateTime.stringToLocalDate(date)
255
+
256
+ scope.launch {
257
+ rookHealthConnect.getActivityEvents(localDate).fold(
258
+ {
259
+ when (it) {
260
+ SyncStatusWithData.RecordsNotFound -> {
261
+ promise.reject("HealthConnectActivityEvents", "Records Not Found For Date: $date")
262
+ }
263
+
264
+ is SyncStatusWithData.Synced<List<HCActivityEvent>> -> {
265
+ promise.resolve(gsonBuilder.toJson(it.data))
266
+ }
267
+ }
268
+ },
269
+ {
270
+ if (it is HCException) {
271
+ promise.reject(it.code.toString(), it.message, it)
272
+ } else {
273
+ promise.reject("1001", it.message, it)
274
+ }
275
+ },
276
+ )
277
+ }
278
+ }
279
+
280
+ @OptIn(ExperimentalRookApi::class)
281
+ @ReactMethod
282
+ fun writeHealthConnectMealData(data: ReadableMap, promise: Promise){
283
+ val mealData = ReadableToWritable.mapReadableMapToHCMealData(data)
284
+
285
+ scope.launch {
286
+ RookWriteManager.writeNutritionEvent(reactContext, mealData).fold({
287
+ promise.resolve(true)
288
+ }, {
289
+ if (it is HCException) {
290
+ promise.reject(it.code.toString(), it.message, it)
291
+ } else {
292
+ promise.reject("1001", it.message, it)
293
+ }
294
+ })
295
+ }
296
+ }
297
+
298
+ override fun getName(): String {
299
+ return "RookLocalData"
300
+ }
301
+ }