react-native-rook-sdk 4.0.0-beta.2 → 4.1.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 (339) 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 +382 -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 +189 -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 +83 -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/useRookAndroidStepCounter.js +56 -0
  78. package/lib/commonjs/hooks/useRookAndroidStepCounter.js.map +1 -0
  79. package/lib/commonjs/hooks/useRookAppleHealth.js +63 -0
  80. package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
  81. package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
  82. package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
  83. package/lib/commonjs/hooks/useRookData.js +116 -0
  84. package/lib/commonjs/hooks/useRookData.js.map +1 -0
  85. package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
  86. package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
  87. package/lib/commonjs/hooks/useRookPermissions.js +223 -0
  88. package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
  89. package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
  90. package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
  91. package/lib/commonjs/hooks/useRookSync.js +148 -0
  92. package/lib/commonjs/hooks/useRookSync.js.map +1 -0
  93. package/lib/commonjs/hooks/useRookVariables.js +93 -0
  94. package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
  95. package/lib/commonjs/index.js +121 -0
  96. package/lib/commonjs/index.js.map +1 -0
  97. package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
  98. package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
  99. package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
  100. package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
  101. package/lib/commonjs/modules/utils/errors.js +12 -0
  102. package/lib/commonjs/modules/utils/errors.js.map +1 -0
  103. package/lib/commonjs/types/ActivityEvent.js +6 -0
  104. package/lib/commonjs/types/ActivityEvent.js.map +1 -0
  105. package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
  106. package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
  107. package/lib/commonjs/types/AppleHealthPermissions.js +57 -0
  108. package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
  109. package/lib/commonjs/types/AuthorizedSources.js +6 -0
  110. package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
  111. package/lib/commonjs/types/BodySummary.js +6 -0
  112. package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
  113. package/lib/commonjs/types/DataSource.js +16 -0
  114. package/lib/commonjs/types/DataSource.js.map +1 -0
  115. package/lib/commonjs/types/DiagnosticState.js +2 -0
  116. package/lib/commonjs/types/DiagnosticState.js.map +1 -0
  117. package/lib/commonjs/types/HCMealData.js +65 -0
  118. package/lib/commonjs/types/HCMealData.js.map +1 -0
  119. package/lib/commonjs/types/HeartRateEvent.js +2 -0
  120. package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
  121. package/lib/commonjs/types/PermissionsType.js +2 -0
  122. package/lib/commonjs/types/PermissionsType.js.map +1 -0
  123. package/lib/commonjs/types/PhysicalSummary.js +6 -0
  124. package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
  125. package/lib/commonjs/types/SDKSources.js +13 -0
  126. package/lib/commonjs/types/SDKSources.js.map +1 -0
  127. package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
  128. package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
  129. package/lib/commonjs/types/SleepSummary.js +6 -0
  130. package/lib/commonjs/types/SleepSummary.js.map +1 -0
  131. package/lib/commonjs/types/SummaryTypes.js +2 -0
  132. package/lib/commonjs/types/SummaryTypes.js.map +1 -0
  133. package/lib/commonjs/types/SyncTypes.js +33 -0
  134. package/lib/commonjs/types/SyncTypes.js.map +1 -0
  135. package/lib/commonjs/types/WriteNutrition.js +18 -0
  136. package/lib/commonjs/types/WriteNutrition.js.map +1 -0
  137. package/lib/commonjs/utils/getNativeModule.js +29 -0
  138. package/lib/commonjs/utils/getNativeModule.js.map +1 -0
  139. package/lib/commonjs/utils/getRookModule.js +28 -0
  140. package/lib/commonjs/utils/getRookModule.js.map +1 -0
  141. package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
  142. package/lib/commonjs/utils/isModuleReady.js.map +1 -0
  143. package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
  144. package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
  145. package/lib/commonjs/utils/isRunningOniOS.js +15 -0
  146. package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
  147. package/lib/commonjs/utils/isValidDate.js +41 -0
  148. package/lib/commonjs/utils/isValidDate.js.map +1 -0
  149. package/lib/commonjs/utils/nativeModules.js +29 -0
  150. package/lib/commonjs/utils/nativeModules.js.map +1 -0
  151. package/lib/commonjs/utils/packageInfo.js +13 -0
  152. package/lib/commonjs/utils/packageInfo.js.map +1 -0
  153. package/lib/module/context/RookSyncGateContext.js +0 -2
  154. package/lib/module/context/RookSyncGateContext.js.map +1 -1
  155. package/lib/module/context/RookSyncGateProvider.js +31 -22
  156. package/lib/module/context/RookSyncGateProvider.js.map +1 -1
  157. package/lib/module/context/RookSyncGateReducer.js +12 -4
  158. package/lib/module/context/RookSyncGateReducer.js.map +1 -1
  159. package/lib/module/context/RookSyncGateTypes.js +0 -2
  160. package/lib/module/context/index.js +2 -0
  161. package/lib/module/context/index.js.map +1 -0
  162. package/lib/module/hooks/index.js +12 -0
  163. package/lib/module/hooks/index.js.map +1 -0
  164. package/lib/module/hooks/useRookAPISources.js +16 -10
  165. package/lib/module/hooks/useRookAPISources.js.map +1 -1
  166. package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
  167. package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
  168. package/lib/module/hooks/useRookAndroidStepCounter.js +48 -0
  169. package/lib/module/hooks/useRookAndroidStepCounter.js.map +1 -0
  170. package/lib/module/hooks/useRookAppleHealth.js +10 -9
  171. package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
  172. package/lib/module/hooks/useRookConfiguration.js +34 -10
  173. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  174. package/lib/module/hooks/useRookData.js +45 -31
  175. package/lib/module/hooks/useRookData.js.map +1 -1
  176. package/lib/module/hooks/useRookHealthConnect.js +10 -9
  177. package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
  178. package/lib/module/hooks/useRookPermissions.js +63 -28
  179. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  180. package/lib/module/hooks/useRookSamsungHealth.js +20 -8
  181. package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
  182. package/lib/module/hooks/useRookSync.js +32 -23
  183. package/lib/module/hooks/useRookSync.js.map +1 -1
  184. package/lib/module/hooks/useRookVariables.js +37 -19
  185. package/lib/module/hooks/useRookVariables.js.map +1 -1
  186. package/lib/module/index.js +10 -18
  187. package/lib/module/index.js.map +1 -1
  188. package/lib/module/modules/hook/useRookAutoSync.js +40 -27
  189. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  190. package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
  191. package/lib/module/modules/utils/errors.js +0 -2
  192. package/lib/module/modules/utils/errors.js.map +1 -1
  193. package/lib/module/types/ActivityEvent.js +0 -2
  194. package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
  195. package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
  196. package/lib/module/types/AppleHealthPermissions.js +0 -2
  197. package/lib/module/types/AppleHealthPermissions.js.map +1 -1
  198. package/lib/module/types/AuthorizedSources.js +0 -2
  199. package/lib/module/types/BodySummary.js +0 -2
  200. package/lib/module/types/DataSource.js +0 -2
  201. package/lib/module/types/DataSource.js.map +1 -1
  202. package/lib/module/types/DiagnosticState.js +2 -0
  203. package/lib/module/types/DiagnosticState.js.map +1 -0
  204. package/lib/module/types/HCMealData.js +59 -0
  205. package/lib/module/types/HCMealData.js.map +1 -0
  206. package/lib/module/types/HeartRateEvent.js +1 -1
  207. package/lib/module/types/PermissionsType.js +1 -1
  208. package/lib/module/types/PhysicalSummary.js +0 -2
  209. package/lib/module/types/SDKSources.js +0 -2
  210. package/lib/module/types/SDKSources.js.map +1 -1
  211. package/lib/module/types/SamsungHealthPermissions.js +0 -3
  212. package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
  213. package/lib/module/types/SleepSummary.js +0 -2
  214. package/lib/module/types/SummaryTypes.js +1 -1
  215. package/lib/module/types/SyncTypes.js +0 -2
  216. package/lib/module/types/SyncTypes.js.map +1 -1
  217. package/lib/module/types/WriteNutrition.js +12 -0
  218. package/lib/module/types/WriteNutrition.js.map +1 -0
  219. package/lib/module/utils/getNativeModule.js +23 -0
  220. package/lib/module/utils/getNativeModule.js.map +1 -0
  221. package/lib/module/utils/getRookModule.js +22 -0
  222. package/lib/module/utils/getRookModule.js.map +1 -0
  223. package/lib/module/utils/isModuleReady.js +0 -2
  224. package/lib/module/utils/isModuleReady.js.map +1 -1
  225. package/lib/module/utils/isRunningOnAndroid.js +0 -2
  226. package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
  227. package/lib/module/utils/isRunningOniOS.js +0 -2
  228. package/lib/module/utils/isRunningOniOS.js.map +1 -1
  229. package/lib/module/utils/isValidDate.js +20 -2
  230. package/lib/module/utils/isValidDate.js.map +1 -1
  231. package/lib/module/utils/nativeModules.js +23 -0
  232. package/lib/module/utils/nativeModules.js.map +1 -0
  233. package/lib/module/utils/packageInfo.js +7 -0
  234. package/lib/module/utils/packageInfo.js.map +1 -0
  235. package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
  236. package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
  237. package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
  238. package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
  239. package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
  240. package/lib/typescript/src/context/index.d.ts +2 -0
  241. package/lib/typescript/src/context/index.d.ts.map +1 -0
  242. package/lib/typescript/src/hooks/index.d.ts +12 -0
  243. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  244. package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
  245. package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
  246. package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts +9 -0
  247. package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts.map +1 -0
  248. package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
  249. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
  250. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  251. package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
  252. package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
  253. package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
  254. package/lib/typescript/src/hooks/useRookPermissions.d.ts +6 -2
  255. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  256. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
  257. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
  258. package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
  259. package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
  260. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
  261. package/lib/typescript/src/index.d.ts +8 -17
  262. package/lib/typescript/src/index.d.ts.map +1 -1
  263. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  264. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
  265. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
  266. package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
  267. package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
  268. package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
  269. package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
  270. package/lib/typescript/src/types/HCMealData.d.ts +60 -0
  271. package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
  272. package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
  273. package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
  274. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
  275. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
  276. package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
  277. package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
  278. package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
  279. package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
  280. package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
  281. package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
  282. package/lib/typescript/src/utils/getRookModule.d.ts +9 -0
  283. package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
  284. package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
  285. package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
  286. package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
  287. package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
  288. package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
  289. package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
  290. package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
  291. package/package.json +98 -94
  292. package/react-native-rook-sdk.podspec +45 -0
  293. package/RNRookSdk.podspec +0 -22
  294. package/ios/Encodable.swift +0 -25
  295. package/ios/RookEntry.swift +0 -61
  296. package/ios/RookSdk-Bridging-Header.h +0 -12
  297. package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
  298. package/lib/module/NativeRookSdk.js +0 -13
  299. package/lib/module/NativeRookSdk.js.map +0 -1
  300. package/lib/module/package.json +0 -1
  301. package/lib/module/types/Rook.js +0 -2
  302. package/lib/typescript/package.json +0 -1
  303. package/lib/typescript/src/NativeRookSdk.d.ts +0 -116
  304. package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
  305. package/lib/typescript/src/types/Rook.d.ts +0 -9
  306. package/lib/typescript/src/types/Rook.d.ts.map +0 -1
  307. package/src/NativeRookSdk.ts +0 -274
  308. package/src/context/RookSyncGateProvider.tsx +0 -78
  309. package/src/context/RookSyncGateTypes.ts +0 -34
  310. package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
  311. package/src/hooks/useRookAppleHealth.ts +0 -55
  312. package/src/hooks/useRookConfiguration.ts +0 -82
  313. package/src/hooks/useRookData.ts +0 -122
  314. package/src/hooks/useRookHealthConnect.ts +0 -59
  315. package/src/hooks/useRookPermissions.ts +0 -224
  316. package/src/hooks/useRookSamsungHealth.ts +0 -37
  317. package/src/hooks/useRookSync.ts +0 -157
  318. package/src/hooks/useRookVariables.ts +0 -77
  319. package/src/index.tsx +0 -28
  320. package/src/modules/hook/useRookAutoSync.ts +0 -305
  321. package/src/modules/types/sendMessageBroadcast.ts +0 -5
  322. package/src/modules/utils/errors.ts +0 -9
  323. package/src/types/ActivityEvent.ts +0 -159
  324. package/src/types/AppleHealthPermissions.ts +0 -49
  325. package/src/types/AuthorizedSources.ts +0 -33
  326. package/src/types/BodySummary.ts +0 -116
  327. package/src/types/DataSource.ts +0 -16
  328. package/src/types/HeartRateEvent.ts +0 -26
  329. package/src/types/PermissionsType.ts +0 -9
  330. package/src/types/PhysicalSummary.ts +0 -84
  331. package/src/types/Rook.ts +0 -8
  332. package/src/types/SDKSources.ts +0 -5
  333. package/src/types/SamsungHealthPermissions.ts +0 -16
  334. package/src/types/SleepSummary.ts +0 -66
  335. package/src/types/SummaryTypes.ts +0 -70
  336. package/src/types/SyncTypes.ts +0 -63
  337. package/src/utils/isRunningOnAndroid.ts +0 -10
  338. package/src/utils/isRunningOniOS.ts +0 -10
  339. package/src/utils/isValidDate.ts +0 -15
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 ROOK
3
+ Copyright (c) 2024 Rook
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
6
6
  in the Software without restriction, including without limitation the rights
package/README.md CHANGED
@@ -1,37 +1,5 @@
1
- # react-native-rook-sdk
1
+ # Rook SDK
2
2
 
3
- Extract health data from health connect, apple health and samsung health to transform to a RookScore
3
+ This SDK enables apps to extract and upload data from Health Connect, with this sdk you will be able to extract and upload data from health connect, [if you need check our app demo](https://github.com/RookeriesDevelopment/rook_demo_app_android_react_native_rook_sdk/tree/main)
4
4
 
5
- ## Installation
6
-
7
-
8
- ```sh
9
- npm install react-native-rook-sdk
10
- ```
11
-
12
-
13
- ## Usage
14
-
15
-
16
- ```js
17
- import { multiply } from 'react-native-rook-sdk';
18
-
19
- // ...
20
-
21
- const result = multiply(3, 7);
22
- ```
23
-
24
-
25
- ## Contributing
26
-
27
- - [Development workflow](CONTRIBUTING.md#development-workflow)
28
- - [Sending a pull request](CONTRIBUTING.md#sending-a-pull-request)
29
- - [Code of conduct](CODE_OF_CONDUCT.md)
30
-
31
- ## License
32
-
33
- MIT
34
-
35
- ---
36
-
37
- Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
5
+ If you need more information please refer to the [official documentation](https://docs.tryrook.io/docs/category/reactnative)
@@ -1,42 +1,66 @@
1
1
  buildscript {
2
- ext.getExtOrDefault = {name ->
3
- return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['RNRookSdk_' + name]
4
- }
2
+ // Buildscript is evaluated before everything else so we can't use getExtOrDefault
3
+ def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["RookSdk_kotlinVersion"]
5
4
 
6
5
  repositories {
7
6
  google()
8
7
  mavenCentral()
8
+ mavenLocal()
9
9
  }
10
10
 
11
11
  dependencies {
12
- classpath "com.android.tools.build:gradle:8.7.2"
12
+ classpath "com.android.tools.build:gradle:8.9.3"
13
13
  // noinspection DifferentKotlinGradleVersion
14
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
14
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
15
15
  }
16
16
  }
17
17
 
18
+ def isNewArchitectureEnabled() {
19
+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
20
+ }
18
21
 
19
22
  apply plugin: "com.android.library"
20
23
  apply plugin: "kotlin-android"
24
+ apply plugin: "kotlin-parcelize"
21
25
 
22
- apply plugin: "com.facebook.react"
26
+ if (isNewArchitectureEnabled()) {
27
+ apply plugin: "com.facebook.react"
28
+ }
29
+
30
+ def getExtOrDefault(name) {
31
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["RookSdk_" + name]
32
+ }
23
33
 
24
34
  def getExtOrIntegerDefault(name) {
25
35
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["RookSdk_" + name]).toInteger()
26
36
  }
27
37
 
38
+ def supportsNamespace() {
39
+ def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
40
+ def major = parsed[0].toInteger()
41
+ def minor = parsed[1].toInteger()
42
+
43
+ // Namespace support was added in 7.3.0
44
+ return (major == 7 && minor >= 3) || major >= 8
45
+ }
46
+
28
47
  android {
29
- namespace "com.rooksdk"
48
+ if (supportsNamespace()) {
49
+ namespace "com.rooksdk"
50
+
51
+ sourceSets {
52
+ main {
53
+ manifest.srcFile "src/main/AndroidManifestNew.xml"
54
+ }
55
+ }
56
+ }
30
57
 
31
58
  compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
32
59
 
33
60
  defaultConfig {
34
61
  minSdkVersion getExtOrIntegerDefault("minSdkVersion")
35
62
  targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
36
- }
37
63
 
38
- buildFeatures {
39
- buildConfig true
40
64
  }
41
65
 
42
66
  buildTypes {
@@ -53,25 +77,26 @@ android {
53
77
  sourceCompatibility JavaVersion.VERSION_1_8
54
78
  targetCompatibility JavaVersion.VERSION_1_8
55
79
  }
56
-
57
- sourceSets {
58
- main {
59
- java.srcDirs += [
60
- "generated/java",
61
- "generated/jni"
62
- ]
63
- }
64
- }
65
80
  }
66
81
 
67
82
  repositories {
68
83
  mavenCentral()
69
84
  google()
85
+ mavenLocal()
70
86
  }
71
87
 
72
88
  def kotlin_version = getExtOrDefault("kotlinVersion")
73
89
 
74
90
  dependencies {
75
- implementation "com.facebook.react:react-android"
91
+ // For < 0.71, this will be from the local maven repo
92
+ // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
93
+ //noinspection GradleDynamicVersion
94
+ implementation "com.facebook.react:react-native:+"
76
95
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
96
+ implementation 'com.google.code.gson:gson:2.13.2'
97
+
98
+ implementation("io.tryrook.android:rook-sdk-samsung:4.0.0")
99
+ implementation 'io.tryrook.android:rook-api-sources:4.0.0'
100
+ implementation 'com.rookmotion.android:rook-sdk:4.1.0-alpha01'
77
101
  }
102
+
@@ -1,5 +1,5 @@
1
- RookSdk_kotlinVersion=2.0.21
2
- RookSdk_minSdkVersion=24
3
- RookSdk_targetSdkVersion=34
4
- RookSdk_compileSdkVersion=35
5
- RookSdk_ndkVersion=27.1.12297006
1
+ RookSdk_kotlinVersion=2.1.21
2
+ RookSdk_minSdkVersion=29
3
+ RookSdk_targetSdkVersion=36
4
+ RookSdk_compileSdkVersion=36
5
+ RookSdk_ndkversion=21.4.7075529
@@ -1,2 +1,3 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android">
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ package="com.rooksdk">
2
3
  </manifest>
@@ -0,0 +1,36 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <queries>
3
+ <package android:name="com.google.android.apps.healthdata"/>
4
+ </queries>
5
+
6
+ <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
7
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
8
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH"/>
9
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
10
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
11
+
12
+ <uses-permission android:name="android.permission.health.READ_SLEEP"/>
13
+ <uses-permission android:name="android.permission.health.READ_STEPS"/>
14
+ <uses-permission android:name="android.permission.health.READ_DISTANCE"/>
15
+ <uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED"/>
16
+ <uses-permission android:name="android.permission.health.READ_ELEVATION_GAINED"/>
17
+ <uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION"/>
18
+ <uses-permission android:name="android.permission.health.READ_VO2_MAX"/>
19
+ <uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
20
+ <uses-permission android:name="android.permission.health.READ_ACTIVE_CALORIES_BURNED"/>
21
+ <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
22
+ <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE"/>
23
+ <uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY"/>
24
+ <uses-permission android:name="android.permission.health.READ_EXERCISE"/>
25
+ <uses-permission android:name="android.permission.health.READ_SPEED"/>
26
+ <uses-permission android:name="android.permission.health.READ_WEIGHT"/>
27
+ <uses-permission android:name="android.permission.health.READ_HEIGHT"/>
28
+ <uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE"/>
29
+ <uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE"/>
30
+ <uses-permission android:name="android.permission.health.READ_HYDRATION"/>
31
+ <uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE"/>
32
+ <uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE"/>
33
+ <uses-permission android:name="android.permission.health.READ_NUTRITION"/>
34
+ <uses-permission android:name="android.permission.health.READ_MENSTRUATION"/>
35
+ <uses-permission android:name="android.permission.health.READ_POWER"/>
36
+ </manifest>
@@ -1,28 +1,280 @@
1
1
  package com.rooksdk
2
2
 
3
+ import android.content.IntentFilter
4
+ import android.util.Log
5
+ import androidx.core.content.ContextCompat
3
6
  import com.facebook.react.bridge.Promise
4
7
  import com.facebook.react.bridge.ReactApplicationContext
5
- import com.facebook.react.module.annotations.ReactModule
8
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
9
+ import com.facebook.react.bridge.ReactMethod
10
+ import com.facebook.react.bridge.ReadableMap
11
+ import com.facebook.react.modules.core.DeviceEventManagerModule
12
+ import com.rookmotion.rook.sdk.RookConfigurationManager
13
+ import com.rookmotion.rook.sdk.RookPermissionsManager
14
+ import com.rookmotion.rook.sdk.domain.analytics.HCRookAnalytics
15
+ import com.rookmotion.rook.sdk.domain.analytics.HCRookFramework
16
+ import com.rookmotion.rook.sdk.domain.environment.RookEnvironment
17
+ import com.rookmotion.rook.sdk.domain.exception.HCException
18
+ import com.rookmotion.rook.sdk.domain.model.RookConfiguration
19
+ import com.rooksdk.broadcasts.AndroidPermissionsReceiverTransmitter
20
+ import com.rooksdk.broadcasts.HealthConnectPermissionsReceiverTransmitter
21
+ import com.rooksdk.broadcasts.SamsungHealthPermissionsReceiverTransmitter
22
+ import com.rooksdk.utils.ReadableToWritable
23
+ import com.rooksdk.utils.SamsungAvailability
24
+ import io.tryrook.api.sources.RookApiSources
25
+ import io.tryrook.api.sources.domain.environment.ApiEnvironment
26
+ import io.tryrook.api.sources.domain.model.ApiConfiguration
27
+ import io.tryrook.sdk.samsung.RookSamsung
28
+ import io.tryrook.sdk.samsung.domain.analytics.SHRookAnalytics
29
+ import io.tryrook.sdk.samsung.domain.analytics.SHRookFramework
30
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
31
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
32
+ import io.tryrook.sdk.samsung.domain.environment.SHEnvironment
33
+ import io.tryrook.sdk.samsung.domain.exception.SHException
34
+ import io.tryrook.sdk.samsung.domain.model.SHConfiguration
35
+ import kotlinx.coroutines.CoroutineScope
36
+ import kotlinx.coroutines.Dispatchers
37
+ import kotlinx.coroutines.SupervisorJob
38
+ import kotlinx.coroutines.cancel
39
+ import kotlinx.coroutines.launch
6
40
 
7
- @ReactModule(name = RookSdkModule.NAME)
8
- class RookSdkModule(reactContext: ReactApplicationContext) :
9
- NativeRookSdkSpec(reactContext) {
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
+ private val rookSamsung: RookSamsung,
68
+ private val rookApiSources: RookApiSources,
69
+ ): ReactContextBaseJavaModule(reactContext) {
70
+
71
+ private var scope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
72
+ private var listenerCount = 0
73
+
74
+ private val stepsScope: CoroutineScope by lazy {
75
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
76
+ }
77
+
78
+ private val androidPermissionsReceiverTransmitter: AndroidPermissionsReceiverTransmitter by lazy {
79
+ AndroidPermissionsReceiverTransmitter()
80
+ }
81
+
82
+ private val hcPermissionsReceiverTransmitter: HealthConnectPermissionsReceiverTransmitter by lazy {
83
+ HealthConnectPermissionsReceiverTransmitter()
84
+ }
85
+
86
+ private val shHealthPermissionsReceiverTransmitter: SamsungHealthPermissionsReceiverTransmitter by lazy {
87
+ SamsungHealthPermissionsReceiverTransmitter()
88
+ }
10
89
 
11
90
  override fun getName(): String {
12
91
  return NAME
13
92
  }
14
93
 
15
- // Example method
16
- // See https://reactnative.dev/docs/native-modules-android
17
- override fun multiply(a: Double, b: Double): Double {
18
- return a * b
94
+ @ReactMethod
95
+ fun addListener(eventName: String) {
96
+ if (listenerCount == 0) {
97
+ androidPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
98
+ hcPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
99
+ shHealthPermissionsReceiverTransmitter.setReactApplicationContext(reactApplicationContext)
100
+
101
+ ContextCompat.registerReceiver(
102
+ reactApplicationContext,
103
+ androidPermissionsReceiverTransmitter,
104
+ IntentFilter(RookPermissionsManager.ACTION_ANDROID_PERMISSIONS),
105
+ ContextCompat.RECEIVER_EXPORTED
106
+ )
107
+
108
+ ContextCompat.registerReceiver(
109
+ reactApplicationContext,
110
+ hcPermissionsReceiverTransmitter,
111
+ IntentFilter(RookPermissionsManager.ACTION_HEALTH_CONNECT_PERMISSIONS),
112
+ ContextCompat.RECEIVER_EXPORTED,
113
+ )
114
+
115
+ ContextCompat.registerReceiver(
116
+ reactApplicationContext,
117
+ shHealthPermissionsReceiverTransmitter,
118
+ IntentFilter(SamsungHealthPermission.ACTION_SAMSUNG_HEALTH_PERMISSIONS),
119
+ ContextCompat.RECEIVER_EXPORTED
120
+ )
121
+ }
122
+
123
+ listenerCount += 1
124
+ }
125
+
126
+ @ReactMethod
127
+ fun removeListeners(count: Int) {
128
+ listenerCount -= count
129
+ if (listenerCount == 0) {
130
+ stepsScope.cancel()
131
+
132
+ reactApplicationContext.unregisterReceiver(hcPermissionsReceiverTransmitter)
133
+ reactApplicationContext.unregisterReceiver(androidPermissionsReceiverTransmitter)
134
+ }
19
135
  }
20
136
 
21
- override fun simplePromise(promise: Promise?) {
22
- TODO("Not yet implemented")
137
+ /**
138
+ * Initializes the Rook SDK with the specified configuration settings (environment, clientUUID, secretKey).
139
+ * This is required before any data synchronization or user management can occur.
140
+ * @param config A map containing the environment, clientUUID, secretKey, and other settings.
141
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
142
+ */
143
+ @ReactMethod
144
+ fun initRook(config: ReadableMap,promise: Promise) {
145
+ try {
146
+ val clientUUID = config.getString("clientUUID")?.trim() ?: ""
147
+ val secret = config.getString("secret")?.trim() ?: ""
148
+ val packageName = config.getString("packageName")?.trim()
149
+
150
+ if (clientUUID.isBlank() || secret.isBlank()) {
151
+ promise.reject("3", "Requested operation needs an authorization level that your clientUUID doesn't have.")
152
+ return
153
+ }
154
+
155
+ var environment = RookEnvironment.SANDBOX
156
+ var shEnv = SHEnvironment.SANDBOX
157
+ var apiEnv = ApiEnvironment.SANDBOX
158
+
159
+ if (config.getString("environment") == "production") {
160
+ environment = RookEnvironment.PRODUCTION
161
+ shEnv = SHEnvironment.SANDBOX
162
+ apiEnv = ApiEnvironment.PRODUCTION
163
+ }
164
+
165
+ val rookConfiguration = RookConfiguration(
166
+ environment = environment,
167
+ clientUUID = clientUUID,
168
+ packageName = packageName,
169
+ secret = secret
170
+ )
171
+
172
+ val shConfig = SHConfiguration(
173
+ environment = shEnv,
174
+ clientUUID = clientUUID,
175
+ packageName = packageName,
176
+ secret = secret
177
+ )
178
+
179
+ val apiConfig = ApiConfiguration(
180
+ environment = apiEnv,
181
+ clientUUID = clientUUID,
182
+ packageName = packageName,
183
+ secret = secret
184
+ )
185
+
186
+ val enableLogs = config.getBoolean("enableLogs")
187
+ if(enableLogs) {
188
+ rookConfigurationManager.enableLocalLogs()
189
+ rookSamsung.enableLocalLogs()
190
+ rookApiSources.enableLocalLogs()
191
+ }
192
+
193
+ rookConfigurationManager.setConfiguration(rookConfiguration)
194
+
195
+ HCRookAnalytics.setFramework(HCRookFramework.REACT_NATIVE)
196
+ SHRookAnalytics.setFramework(SHRookFramework.REACT_NATIVE)
197
+
198
+ scope.launch {
199
+ try {
200
+ val result = rookConfigurationManager.initRook()
201
+ rookApiSources.initRook(apiConfig)
202
+
203
+ result.getOrThrow()
204
+
205
+ val availableResult = SamsungAvailability.getSamsungHealthAvailabilityOrDefault(rookSamsung)
206
+
207
+ if (availableResult == SamsungHealthAvailability.INSTALLED) {
208
+ rookSamsung.initRook(shConfig)
209
+ tryToSetSamsungUserId()
210
+ }
211
+
212
+ promise.resolve(true)
213
+ } catch (e: Throwable) {
214
+ when (e) {
215
+ is HCException -> {
216
+ promise.reject(e.code.toString(), e.message, e)
217
+ }
218
+ is SHException -> {
219
+ promise.reject(e.code.toString(), e.message, e)
220
+ }
221
+ else -> {
222
+ promise.reject("1001", e.message, e)
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ catch (e: Exception) {
229
+ when (e) {
230
+ is HCException -> {
231
+ promise.reject(e.code.toString(), e.message, e)
232
+ }
233
+ is SHException -> {
234
+ promise.reject(e.code.toString(), e.message, e)
235
+ }
236
+ else -> {
237
+ promise.reject("1001", e.message, e)
238
+ }
239
+ }
240
+ }
241
+
242
+ }
243
+
244
+ private fun tryToSetSamsungUserId() {
245
+ scope.launch {
246
+ val result = rookConfigurationManager.getUserID()
247
+
248
+ if (result != null) {
249
+ val user = rookSamsung.updateUserID(result)
250
+ user.getOrNull()
251
+ }
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Sends a broadcast message to the React Native layer.
257
+ * This method emits a message event to the React Native side via the
258
+ * `ROOK_NOTIFICATION` channel, allowing communication from the native module.
259
+ *
260
+ * @param message A ReadableMap containing the message data to send.
261
+ * @param promise A promise object that resolves with true if the message was sent successfully.
262
+ */
263
+ @ReactMethod
264
+ fun sendMessageToBroadcast(message: ReadableMap, promise: Promise) {
265
+ if (listenerCount <= 0) return
266
+
267
+ val hash = ReadableToWritable.readableMapToHashMap(message)
268
+ val writable = ReadableToWritable.hashMapToWritableMap(hash)
269
+
270
+ reactApplicationContext
271
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
272
+ .emit("ROOK_NOTIFICATION", writable)
273
+
274
+ promise.resolve(true)
23
275
  }
24
276
 
25
277
  companion object {
26
- const val NAME = "RNRookSdk"
278
+ const val NAME = "RookSdk"
27
279
  }
28
280
  }
@@ -1,33 +1,49 @@
1
1
  package com.rooksdk
2
2
 
3
- import com.facebook.react.BaseReactPackage
3
+ import com.facebook.react.ReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
- import com.facebook.react.module.model.ReactModuleInfo
7
- import com.facebook.react.module.model.ReactModuleInfoProvider
8
- import java.util.HashMap
9
-
10
- class RookSdkPackage : BaseReactPackage() {
11
- override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12
- return if (name == RookSdkModule.NAME) {
13
- RookSdkModule(reactContext)
14
- } else {
15
- null
16
- }
17
- }
6
+ import com.facebook.react.uimanager.ViewManager
7
+ import com.rookmotion.rook.sdk.RookConfigurationManager
8
+ import com.rooksdk.modules.RookBackgroundSyncModule
9
+ import com.rooksdk.modules.RookConfigurationModule
10
+ import com.rooksdk.modules.RookLocalData
11
+ import com.rooksdk.modules.RookPermissionsModule
12
+ import com.rooksdk.modules.RookSourcesModule
13
+ import com.rooksdk.modules.RookStepsModule
14
+ import com.rooksdk.modules.RookSyncModule
15
+ import io.tryrook.api.sources.RookApiSources
16
+ import io.tryrook.sdk.samsung.RookSamsung
17
+
18
+
19
+ class RookSdkPackage : ReactPackage {
20
+ private var rookConfigurationManager: RookConfigurationManager? = null
21
+ private var rookSamsung: RookSamsung? = null
22
+ private var rookApiSources: RookApiSources? = null
23
+
24
+ override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
25
+ if (rookConfigurationManager == null)
26
+ rookConfigurationManager = RookConfigurationManager(reactContext)
27
+
28
+ if (rookSamsung == null)
29
+ rookSamsung = RookSamsung(reactContext)
30
+
31
+ if (rookApiSources == null)
32
+ rookApiSources = RookApiSources(reactContext)
33
+
34
+ return listOf(
35
+ RookSdkModule(reactContext, rookConfigurationManager!!, rookSamsung!!, rookApiSources!!),
36
+ RookPermissionsModule(reactContext, rookSamsung!!),
37
+ RookConfigurationModule(reactContext, rookConfigurationManager!!, rookSamsung!!),
38
+ RookSyncModule(reactContext, rookSamsung!!),
39
+ RookBackgroundSyncModule(reactContext),
40
+ RookStepsModule(reactContext),
41
+ RookLocalData(reactContext, rookSamsung!!),
42
+ RookSourcesModule(reactContext),
43
+ )
44
+ }
18
45
 
19
- override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
20
- return ReactModuleInfoProvider {
21
- val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
22
- moduleInfos[RookSdkModule.NAME] = ReactModuleInfo(
23
- RookSdkModule.NAME,
24
- RookSdkModule.NAME,
25
- canOverrideExistingModule = false, // canOverrideExistingModule
26
- needsEagerInit = false, // needsEagerInit
27
- isCxxModule = false, // isCxxModule
28
- isTurboModule = true // isTurboModule
29
- )
30
- moduleInfos
31
- }
46
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
47
+ return emptyList()
32
48
  }
33
49
  }
@@ -0,0 +1,65 @@
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
+ * 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
+ */
16
+ class AndroidPermissionsReceiverTransmitter: 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_ANDROID_PERMISSIONS_GRANTED,
30
+ /* defaultValue = */ false
31
+ ) ?: false
32
+
33
+ val dialogDisplayed = intent?.getBooleanExtra(
34
+ RookPermissionsManager.EXTRA_ANDROID_PERMISSIONS_DIALOG_DISPLAYED,
35
+ false
36
+ ) ?: false
37
+
38
+ reactApplicationContext?.also { reactContext ->
39
+ val events = listOf(
40
+ "ROOK_BACKGROUND_ANDROID_PERMISSIONS" to permissionsGranted,
41
+ "ROOK_BACKGROUND_ANDROID_PERMISSIONS_DIALOG_DISPLAYED" to dialogDisplayed
42
+ )
43
+
44
+ val emitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
45
+
46
+ events.forEach { (type, value) ->
47
+ Arguments.createMap().apply {
48
+ putString("type", type)
49
+ putBoolean("value", value)
50
+ emitter.emit("ROOK_NOTIFICATION", this)
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Sets the ReactApplicationContext to be used for emitting events to the React Native side.
58
+ *
59
+ * @param context The ReactApplicationContext provided by React Native.
60
+ */
61
+ fun setReactApplicationContext(context: ReactApplicationContext) {
62
+ this.reactApplicationContext = context
63
+ }
64
+
65
+ }