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.
- package/LICENSE +1 -1
- package/README.md +3 -35
- package/android/build.gradle +45 -20
- package/android/gradle.properties +5 -5
- package/android/src/main/AndroidManifest.xml +2 -1
- package/android/src/main/AndroidManifestNew.xml +36 -0
- package/android/src/main/java/com/rooksdk/RookSdkModule.kt +263 -11
- package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +42 -26
- package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +65 -0
- package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +70 -0
- package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
- package/android/src/main/java/com/rooksdk/modules/RookBackgroundSyncModule.kt +99 -0
- package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +182 -0
- package/android/src/main/java/com/rooksdk/modules/RookLocalData.kt +301 -0
- package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +359 -0
- package/android/src/main/java/com/rooksdk/modules/RookSourcesModule.kt +102 -0
- package/android/src/main/java/com/rooksdk/modules/RookStepsModule.kt +119 -0
- package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +551 -0
- package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +34 -0
- package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +145 -0
- package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
- package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +17 -0
- package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
- package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +19 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
- package/android/src/main/res/drawable/ic_health_connect.xml +19 -0
- package/android/src/main/res/values/themes.xml +3 -0
- package/ios/DateHelper.swift +4 -4
- package/ios/EncodableDataSource.swift +3 -2
- package/ios/EncodableDataSourceAuthorizer.swift +3 -2
- package/ios/{HearRateMapper.swift → EncodableHeartRate.swift} +3 -3
- package/ios/EncodableRookDataSource.swift +36 -0
- package/ios/EncodableSDKState.swift +94 -0
- package/ios/EncodableStatusDataSources.swift +47 -0
- package/ios/NutritionMapper.swift +114 -0
- package/ios/RookBackground.swift +8 -5
- package/ios/RookBackgroundModule.h +5 -0
- package/ios/RookBackgroundModule.mm +15 -0
- package/ios/RookConfiguration.swift +34 -24
- package/ios/RookConfigurationModule.h +5 -0
- package/ios/RookConfigurationModule.mm +22 -0
- package/ios/RookExternalModule.h +5 -0
- package/ios/RookExternalModule.m +31 -0
- package/ios/{RookData.swift → RookLocalData.swift} +70 -48
- package/ios/RookPermissions.swift +33 -5
- package/ios/RookPermissionsModule.h +5 -0
- package/ios/RookPermissionsModule.mm +20 -0
- package/ios/RookSdk.h +2 -14
- package/ios/RookSdk.mm +97 -546
- package/ios/RookSources.swift +54 -60
- package/ios/RookSourcesModule.h +5 -0
- package/ios/RookSourcesModule.mm +18 -0
- package/ios/RookSync.h +5 -0
- package/ios/RookSync.m +35 -0
- package/ios/RookSync.swift +78 -48
- package/ios/SwiftTest.swift +18 -0
- package/ios/react-native-rook-sdk-Bridging-Header.h +12 -0
- package/{src/context/RookSyncGateContext.ts → lib/commonjs/context/RookSyncGateContext.js} +13 -10
- package/lib/commonjs/context/RookSyncGateContext.js.map +1 -0
- package/lib/commonjs/context/RookSyncGateProvider.js +108 -0
- package/lib/commonjs/context/RookSyncGateProvider.js.map +1 -0
- package/{src/context/RookSyncGateReducer.ts → lib/commonjs/context/RookSyncGateReducer.js} +44 -13
- package/lib/commonjs/context/RookSyncGateReducer.js.map +1 -0
- package/lib/commonjs/context/RookSyncGateTypes.js +6 -0
- package/lib/commonjs/context/RookSyncGateTypes.js.map +1 -0
- package/lib/commonjs/context/index.js +14 -0
- package/lib/commonjs/context/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +76 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/{src/hooks/useRookAPISources.ts → lib/commonjs/hooks/useRookAPISources.js} +36 -40
- package/lib/commonjs/hooks/useRookAPISources.js.map +1 -0
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js +88 -0
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js.map +1 -0
- package/lib/commonjs/hooks/useRookAppleHealth.js +63 -0
- package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
- package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
- package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
- package/lib/commonjs/hooks/useRookData.js +116 -0
- package/lib/commonjs/hooks/useRookData.js.map +1 -0
- package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
- package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
- package/lib/commonjs/hooks/useRookPermissions.js +211 -0
- package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
- package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
- package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
- package/lib/commonjs/hooks/useRookSync.js +148 -0
- package/lib/commonjs/hooks/useRookSync.js.map +1 -0
- package/lib/commonjs/hooks/useRookVariables.js +93 -0
- package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
- package/lib/commonjs/index.js +121 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
- package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
- package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
- package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
- package/lib/commonjs/modules/utils/errors.js +12 -0
- package/lib/commonjs/modules/utils/errors.js.map +1 -0
- package/lib/commonjs/types/ActivityEvent.js +6 -0
- package/lib/commonjs/types/ActivityEvent.js.map +1 -0
- package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
- package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
- package/lib/{module/NativeRookSdk.js → commonjs/types/AppleHealthPermissions.js} +7 -45
- package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
- package/lib/commonjs/types/AuthorizedSources.js +6 -0
- package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
- package/lib/commonjs/types/BodySummary.js +6 -0
- package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
- package/lib/commonjs/types/DataSource.js +16 -0
- package/lib/commonjs/types/DataSource.js.map +1 -0
- package/lib/commonjs/types/DiagnosticState.js +2 -0
- package/lib/commonjs/types/DiagnosticState.js.map +1 -0
- package/lib/commonjs/types/HCMealData.js +65 -0
- package/lib/commonjs/types/HCMealData.js.map +1 -0
- package/lib/commonjs/types/HeartRateEvent.js +2 -0
- package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
- package/lib/commonjs/types/PermissionsType.js +2 -0
- package/lib/commonjs/types/PermissionsType.js.map +1 -0
- package/lib/commonjs/types/PhysicalSummary.js +6 -0
- package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
- package/lib/commonjs/types/SDKSources.js +13 -0
- package/lib/commonjs/types/SDKSources.js.map +1 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
- package/lib/commonjs/types/SleepSummary.js +6 -0
- package/lib/commonjs/types/SleepSummary.js.map +1 -0
- package/lib/commonjs/types/SummaryTypes.js +2 -0
- package/lib/commonjs/types/SummaryTypes.js.map +1 -0
- package/lib/commonjs/types/SyncTypes.js +33 -0
- package/lib/commonjs/types/SyncTypes.js.map +1 -0
- package/lib/commonjs/types/WriteNutrition.js +18 -0
- package/lib/commonjs/types/WriteNutrition.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 +28 -0
- package/lib/commonjs/utils/getRookModule.js.map +1 -0
- package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
- package/lib/commonjs/utils/isModuleReady.js.map +1 -0
- package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
- package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
- package/lib/commonjs/utils/isRunningOniOS.js +15 -0
- package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
- package/lib/commonjs/utils/isValidDate.js +41 -0
- package/lib/commonjs/utils/isValidDate.js.map +1 -0
- package/lib/commonjs/utils/nativeModules.js +29 -0
- package/lib/commonjs/utils/nativeModules.js.map +1 -0
- package/lib/commonjs/utils/packageInfo.js +13 -0
- package/lib/commonjs/utils/packageInfo.js.map +1 -0
- package/lib/module/context/RookSyncGateContext.js +0 -2
- package/lib/module/context/RookSyncGateContext.js.map +1 -1
- package/lib/module/context/RookSyncGateProvider.js +31 -22
- package/lib/module/context/RookSyncGateProvider.js.map +1 -1
- package/lib/module/context/RookSyncGateReducer.js +12 -4
- package/lib/module/context/RookSyncGateReducer.js.map +1 -1
- package/lib/module/context/RookSyncGateTypes.js +0 -2
- package/lib/module/context/index.js +2 -0
- package/lib/module/context/index.js.map +1 -0
- package/lib/module/hooks/index.js +11 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useRookAPISources.js +16 -10
- package/lib/module/hooks/useRookAPISources.js.map +1 -1
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
- package/lib/module/hooks/useRookAppleHealth.js +10 -9
- package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
- package/lib/module/hooks/useRookConfiguration.js +34 -10
- package/lib/module/hooks/useRookConfiguration.js.map +1 -1
- package/lib/module/hooks/useRookData.js +45 -31
- package/lib/module/hooks/useRookData.js.map +1 -1
- package/lib/module/hooks/useRookHealthConnect.js +10 -9
- package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
- package/lib/module/hooks/useRookPermissions.js +49 -26
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSamsungHealth.js +20 -8
- package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
- package/lib/module/hooks/useRookSync.js +32 -23
- package/lib/module/hooks/useRookSync.js.map +1 -1
- package/lib/module/hooks/useRookVariables.js +37 -19
- package/lib/module/hooks/useRookVariables.js.map +1 -1
- package/lib/module/index.js +10 -18
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/hook/useRookAutoSync.js +40 -27
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
- package/lib/module/modules/utils/errors.js +0 -2
- package/lib/module/modules/utils/errors.js.map +1 -1
- package/lib/module/types/ActivityEvent.js +0 -2
- package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
- package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
- package/lib/module/types/AppleHealthPermissions.js +0 -2
- package/lib/module/types/AppleHealthPermissions.js.map +1 -1
- package/lib/module/types/AuthorizedSources.js +0 -2
- package/lib/module/types/BodySummary.js +0 -2
- package/lib/module/types/DataSource.js +0 -2
- package/lib/module/types/DataSource.js.map +1 -1
- package/lib/module/types/DiagnosticState.js +2 -0
- package/lib/module/types/DiagnosticState.js.map +1 -0
- package/lib/module/types/HCMealData.js +59 -0
- package/lib/module/types/HCMealData.js.map +1 -0
- package/lib/module/types/HeartRateEvent.js +1 -1
- package/lib/module/types/PermissionsType.js +1 -1
- package/lib/module/types/PhysicalSummary.js +0 -2
- package/lib/module/types/SDKSources.js +0 -2
- package/lib/module/types/SDKSources.js.map +1 -1
- package/lib/module/types/SamsungHealthPermissions.js +0 -3
- package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
- package/lib/module/types/SleepSummary.js +0 -2
- package/lib/module/types/SummaryTypes.js +1 -1
- package/lib/module/types/SyncTypes.js +0 -2
- package/lib/module/types/SyncTypes.js.map +1 -1
- package/lib/module/types/WriteNutrition.js +12 -0
- package/lib/module/types/WriteNutrition.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 +22 -0
- package/lib/module/utils/getRookModule.js.map +1 -0
- package/lib/module/utils/isModuleReady.js +0 -2
- package/lib/module/utils/isModuleReady.js.map +1 -1
- package/lib/module/utils/isRunningOnAndroid.js +0 -2
- package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
- package/lib/module/utils/isRunningOniOS.js +0 -2
- package/lib/module/utils/isRunningOniOS.js.map +1 -1
- package/lib/module/utils/isValidDate.js +20 -2
- package/lib/module/utils/isValidDate.js.map +1 -1
- package/lib/module/utils/nativeModules.js +23 -0
- package/lib/module/utils/nativeModules.js.map +1 -0
- package/lib/module/utils/packageInfo.js +7 -0
- package/lib/module/utils/packageInfo.js.map +1 -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.map +1 -1
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
- package/lib/typescript/src/context/index.d.ts +2 -0
- package/lib/typescript/src/context/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +11 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
- package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookPermissions.d.ts +2 -0
- package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
- package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
- package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +8 -17
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
- package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
- package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
- package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
- package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
- package/lib/typescript/src/types/HCMealData.d.ts +60 -0
- package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
- package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
- package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
- package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
- package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
- package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
- package/lib/typescript/src/types/WriteNutrition.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 +9 -0
- package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
- package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
- package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
- package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
- package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
- package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
- package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
- package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
- package/package.json +98 -94
- package/react-native-rook-sdk.podspec +45 -0
- package/RNRookSdk.podspec +0 -22
- package/ios/Encodable.swift +0 -25
- package/ios/RookEntry.swift +0 -61
- package/ios/RookSdk-Bridging-Header.h +0 -12
- package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
- package/lib/module/NativeRookSdk.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/types/Rook.js +0 -2
- package/lib/typescript/package.json +0 -1
- package/lib/typescript/src/NativeRookSdk.d.ts +0 -190
- package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
- package/lib/typescript/src/types/Rook.d.ts +0 -9
- package/lib/typescript/src/types/Rook.d.ts.map +0 -1
- package/src/NativeRookSdk.ts +0 -281
- package/src/context/RookSyncGateProvider.tsx +0 -78
- package/src/context/RookSyncGateTypes.ts +0 -34
- package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
- package/src/hooks/useRookAppleHealth.ts +0 -55
- package/src/hooks/useRookConfiguration.ts +0 -82
- package/src/hooks/useRookData.ts +0 -122
- package/src/hooks/useRookHealthConnect.ts +0 -59
- package/src/hooks/useRookPermissions.ts +0 -224
- package/src/hooks/useRookSamsungHealth.ts +0 -37
- package/src/hooks/useRookSync.ts +0 -157
- package/src/hooks/useRookVariables.ts +0 -77
- package/src/index.tsx +0 -28
- package/src/modules/hook/useRookAutoSync.ts +0 -305
- package/src/modules/types/sendMessageBroadcast.ts +0 -5
- package/src/modules/utils/errors.ts +0 -9
- package/src/types/ActivityEvent.ts +0 -159
- package/src/types/AppleHealthPermissions.ts +0 -49
- package/src/types/AuthorizedSources.ts +0 -33
- package/src/types/BodySummary.ts +0 -116
- package/src/types/DataSource.ts +0 -16
- package/src/types/HeartRateEvent.ts +0 -26
- package/src/types/PermissionsType.ts +0 -9
- package/src/types/PhysicalSummary.ts +0 -84
- package/src/types/Rook.ts +0 -8
- package/src/types/SDKSources.ts +0 -5
- package/src/types/SamsungHealthPermissions.ts +0 -16
- package/src/types/SleepSummary.ts +0 -66
- package/src/types/SummaryTypes.ts +0 -70
- package/src/types/SyncTypes.ts +0 -63
- package/src/utils/isRunningOnAndroid.ts +0 -10
- package/src/utils/isRunningOniOS.ts +0 -10
- package/src/utils/isValidDate.ts +0 -15
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
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
|
-
#
|
|
1
|
+
# Rook SDK
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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)
|
package/android/build.gradle
CHANGED
|
@@ -1,42 +1,66 @@
|
|
|
1
1
|
buildscript {
|
|
2
|
-
|
|
3
|
-
|
|
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.
|
|
12
|
+
classpath "com.android.tools.build:gradle:8.9.3"
|
|
13
13
|
// noinspection DifferentKotlinGradleVersion
|
|
14
|
-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.0.0'
|
|
77
101
|
}
|
|
102
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
RookSdk_kotlinVersion=2.
|
|
2
|
-
RookSdk_minSdkVersion=
|
|
3
|
-
RookSdk_targetSdkVersion=
|
|
4
|
-
RookSdk_compileSdkVersion=
|
|
5
|
-
|
|
1
|
+
RookSdk_kotlinVersion=2.1.21
|
|
2
|
+
RookSdk_minSdkVersion=29
|
|
3
|
+
RookSdk_targetSdkVersion=36
|
|
4
|
+
RookSdk_compileSdkVersion=36
|
|
5
|
+
RookSdk_ndkversion=21.4.7075529
|
|
@@ -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.
|
|
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
|
-
|
|
8
|
-
class
|
|
9
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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 = "
|
|
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.
|
|
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.
|
|
7
|
-
import com.
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
20
|
-
return
|
|
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
|
+
}
|