diff --git a/android/src/main/java/dev/matinzd/healthconnect/permissions/PermissionUtils.kt b/android/src/main/java/dev/matinzd/healthconnect/permissions/PermissionUtils.kt index 2debd4d..1ab12ad 100644 --- a/android/src/main/java/dev/matinzd/healthconnect/permissions/PermissionUtils.kt +++ b/android/src/main/java/dev/matinzd/healthconnect/permissions/PermissionUtils.kt @@ -4,7 +4,6 @@ import androidx.health.connect.client.PermissionController import androidx.health.connect.client.permission.HealthPermission import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.WritableNativeArray -import com.facebook.react.bridge.WritableNativeMap import dev.matinzd.healthconnect.utils.InvalidRecordType import dev.matinzd.healthconnect.utils.reactRecordTypeToClassMap @@ -31,27 +30,20 @@ class PermissionUtils { fun mapPermissionResult(grantedPermissions: Set): WritableNativeArray { return WritableNativeArray().apply { - grantedPermissions.forEach { - val map = WritableNativeMap() + for ((recordType, recordClass) in reactRecordTypeToClassMap) { + val readPermissionForRecord = HealthPermission.getReadPermission(recordClass) + val writePermissionForRecord = HealthPermission.getWritePermission(recordClass) - val (accessType, recordType) = extractPermissionResult(it) + if (grantedPermissions.contains(readPermissionForRecord)) { + pushMap(ReactPermission(AccessType.READ, recordType).toReadableMap()) + } - map.putString("recordType", snakeToCamel(recordType)) - map.putString("accessType", accessType) - pushMap(map) + if (grantedPermissions.contains(writePermissionForRecord)) { + pushMap(ReactPermission(AccessType.WRITE, recordType).toReadableMap()) + } } } } - private fun extractPermissionResult(it: String): Pair { - val accessType = it.substring(it.lastIndexOf(".") + 1, it.indexOf("_")).lowercase() - val recordType = it.substring(it.indexOf("_") + 1).lowercase() - return Pair(accessType, recordType) - } - - private fun snakeToCamel(word: String): String { - val components = word.split("_") - return components.joinToString("") { it[0].uppercase() + it.substring(1) } - } } } diff --git a/android/src/main/java/dev/matinzd/healthconnect/permissions/ReactPermission.kt b/android/src/main/java/dev/matinzd/healthconnect/permissions/ReactPermission.kt new file mode 100644 index 0000000..43a8325 --- /dev/null +++ b/android/src/main/java/dev/matinzd/healthconnect/permissions/ReactPermission.kt @@ -0,0 +1,23 @@ +package dev.matinzd.healthconnect.permissions + +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.WritableNativeMap + +data class ReactPermission(val accessType: AccessType, val recordType: String) { + fun toReadableMap(): ReadableMap { + val map = WritableNativeMap() + map.putString(ACCESS_TYPE, accessType.reactName) + map.putString(RECORD_TYPE, recordType) + return map + } + + companion object { + private const val ACCESS_TYPE = "accessType" + private const val RECORD_TYPE = "recordType" + } +} + +enum class AccessType(val reactName: String) { + READ("read"), + WRITE("write") +}