Skip to content

Commit ae2a1ed

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 09eaadc + 7785bb5 commit ae2a1ed

File tree

10 files changed

+53
-29
lines changed

10 files changed

+53
-29
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ dependencies {
9292
implementation "com.facebook.react:react-native"
9393
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
9494
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
95-
implementation "androidx.health.connect:connect-client:1.1.0-alpha10"
95+
implementation "androidx.health.connect:connect-client:1.1.0-alpha11"
9696
}
9797

9898
if (isNewArchitectureEnabled()) {

android/src/main/java/dev/matinzd/healthconnect/permissions/PermissionUtils.kt

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,34 @@ import dev.matinzd.healthconnect.utils.reactRecordTypeToClassMap
1010
class PermissionUtils {
1111
companion object {
1212
fun parsePermissions(reactPermissions: ReadableArray): Set<String> {
13-
return reactPermissions
14-
.toArrayList()
15-
.mapNotNull {
16-
it as HashMap<*, *>
17-
val recordType = it["recordType"]
18-
val accessType = it["accessType"]
13+
return reactPermissions.toArrayList().mapNotNull {
14+
it as HashMap<*, *>
15+
val recordType = it["recordType"]
16+
val accessType = it["accessType"]
1917

20-
if (accessType == "write" && recordType == "ExerciseRoute") {
21-
return@mapNotNull HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE
22-
}
18+
if (accessType == "write" && recordType == "ExerciseRoute") {
19+
return@mapNotNull HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE
20+
}
2321

24-
if (accessType == "read" && recordType == "BackgroundAccessPermission") {
25-
return@mapNotNull HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
26-
}
22+
if (accessType == "read" && recordType == "ReadHealthDataHistory") {
23+
return@mapNotNull HealthPermission.PERMISSION_READ_HEALTH_DATA_HISTORY
24+
}
2725

28-
val recordClass = reactRecordTypeToClassMap[recordType] ?: throw InvalidRecordType()
26+
if (accessType == "read" && recordType == "BackgroundAccessPermission") {
27+
return@mapNotNull HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
28+
}
2929

30-
when (accessType) {
31-
"write" -> HealthPermission.getWritePermission(recordClass)
32-
"read" -> HealthPermission.getReadPermission(recordClass)
33-
else -> null
34-
}
35-
}
36-
.toSet()
30+
val recordClass = reactRecordTypeToClassMap[recordType] ?: throw InvalidRecordType()
31+
32+
when (accessType) {
33+
"write" -> HealthPermission.getWritePermission(recordClass)
34+
"read" -> HealthPermission.getReadPermission(recordClass)
35+
else -> null
36+
}
37+
}.toSet()
3738
}
3839

39-
suspend fun getGrantedPermissions(
40-
permissionController: PermissionController
41-
): WritableNativeArray {
40+
suspend fun getGrantedPermissions(permissionController: PermissionController): WritableNativeArray {
4241
return mapPermissionResult(permissionController.getGrantedPermissions())
4342
}
4443

android/src/main/java/dev/matinzd/healthconnect/records/ReactHealthRecord.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ReactHealthRecord {
5252
}
5353

5454
fun parseWriteRecords(reactRecords: ReadableArray): List<Record> {
55-
val recordType = reactRecords.getMap(0).getString("recordType")
55+
val recordType = reactRecords.getMap(0)?.getString("recordType")
5656

5757
val recordClass = createReactHealthRecordInstance<Record>(recordType)
5858

android/src/main/java/dev/matinzd/healthconnect/utils/HealthConnectUtils.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ fun convertJsToRecordTypeSet(readableArray: ReadableArray?): Set<KClass<out Reco
6262
fun ReadableArray.toMapList(): List<ReadableMap> {
6363
val list = mutableListOf<ReadableMap>()
6464
for (i in 0 until size()) {
65-
list.add(getMap(i))
65+
val item = getMap(i)
66+
if (null != item) {
67+
list.add(item)
68+
}
6669
}
6770
return list
6871
}

example/android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<uses-permission android:name="android.permission.health.WRITE_EXERCISE"/>
88
<uses-permission android:name="android.permission.health.READ_EXERCISE_ROUTES"/>
99
<uses-permission android:name="android.permission.health.WRITE_EXERCISE_ROUTE"/>
10+
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_HISTORY"/>
1011
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND"/>
1112

1213
<application

example/src/App.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@ export default function App() {
266266
accessType: 'write',
267267
recordType: 'ExerciseRoute',
268268
},
269+
{
270+
accessType: 'read',
271+
recordType: 'ReadHealthDataHistory',
272+
},
269273
]).then((permissions) => {
270274
console.log('Granted permissions on request ', { permissions });
271275
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-health-connect",
3-
"version": "3.3.2",
3+
"version": "3.3.3",
44
"description": "React native library for health connect (Android only)",
55
"funding": "https://github.com/matinzd/react-native-health-connect?sponsor=1",
66
"main": "lib/commonjs/index",

src/NativeHealthConnect.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type {
44
HealthConnectRecord,
55
Permission,
66
WriteExerciseRoutePermission,
7+
ReadHealthDataHistoryPermission,
78
} from './types';
89
import type { ExerciseRoute } from './types/base.types';
910

@@ -23,7 +24,11 @@ export interface Spec extends TurboModule {
2324
openHealthConnectSettings: () => void;
2425
openHealthConnectDataManagement: (providerPackageName?: string) => void;
2526
requestPermission(
26-
permissions: (Permission | WriteExerciseRoutePermission)[]
27+
permissions: (
28+
| Permission
29+
| WriteExerciseRoutePermission
30+
| ReadHealthDataHistoryPermission
31+
)[]
2732
): Promise<Permission[]>;
2833
requestExerciseRoute(recordId: string): Promise<ExerciseRoute>;
2934
getGrantedPermissions(): Promise<Permission[]>;

src/index.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import type {
1616
GetChangesRequest,
1717
GetChangesResults,
1818
WriteExerciseRoutePermission,
19+
ReadHealthDataHistoryPermission,
1920
BackgroundAccessPermission,
2021
RevokeAllPermissionsResponse,
2122
} from './types';
@@ -104,9 +105,15 @@ export function requestPermission(
104105
| Permission
105106
| WriteExerciseRoutePermission
106107
| BackgroundAccessPermission
108+
| ReadHealthDataHistoryPermission
107109
)[]
108110
): Promise<
109-
(Permission | WriteExerciseRoutePermission | BackgroundAccessPermission)[]
111+
(
112+
| Permission
113+
| WriteExerciseRoutePermission
114+
| ReadHealthDataHistoryPermission
115+
| BackgroundAccessPermission
116+
)[]
110117
> {
111118
return HealthConnect.requestPermission(permissions);
112119
}

src/types/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export interface RevokeAllPermissionsResponse {
3232
message?: string;
3333
}
3434

35+
export interface ReadHealthDataHistoryPermission {
36+
accessType: 'read';
37+
recordType: 'ReadHealthDataHistory';
38+
}
39+
3540
export * from './records.types';
3641
export * from './results.types';
3742
export * from './aggregate.types';

0 commit comments

Comments
 (0)