package life.thephage.healthkit
import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.*
/**
* HealthConnectの権限に関するユーティリティクラス
*/
object HealthPermissionUtil {
// 権限名と対応するレコードクラスのマッピング
private val permissionMap = mapOf(
// 歩数
"READ_STEPS" to HealthPermission.getReadPermission(StepsRecord::class),
"WRITE_STEPS" to HealthPermission.getWritePermission(StepsRecord::class),
// 心拍数
"READ_HEART_RATE" to HealthPermission.getReadPermission(HeartRateRecord::class),
"WRITE_HEART_RATE" to HealthPermission.getWritePermission(HeartRateRecord::class),
// 体重
"READ_WEIGHT" to HealthPermission.getReadPermission(WeightRecord::class),
"WRITE_WEIGHT" to HealthPermission.getWritePermission(WeightRecord::class),
// 睡眠
"READ_SLEEP" to HealthPermission.getReadPermission(SleepSessionRecord::class),
"WRITE_SLEEP" to HealthPermission.getWritePermission(SleepSessionRecord::class),
// 運動
"READ_EXERCISE" to HealthPermission.getReadPermission(ExerciseSessionRecord::class),
"WRITE_EXERCISE" to HealthPermission.getWritePermission(ExerciseSessionRecord::class)
)
// 逆引きマップ(完全な権限文字列から短い識別子への変換)
private val reversePermissionMap = permissionMap.entries.associateBy({ it.value }, { it.key })
/** 全スコープの一覧 */
val allScopes: List<String> = permissionMap.keys.toList()
/**
* 短い識別子から完全な権限文字列に変換します
* @param shortName 短い権限識別子(例: "READ_STEPS")
* @return 完全な権限文字列、見つからない場合はnull
*/
fun toFullPermission(shortName: String): String? {
return permissionMap[shortName]
}
/**
* 完全な権限文字列から短い識別子に変換します
* @param fullPermission 完全な権限文字列(例: "android.permission.health.READ_STEPS")
* @return 短い権限識別子、見つからない場合はnull
*/
fun toShortName(fullPermission: String): String? {
return reversePermissionMap[fullPermission]
}
/**
* 短い識別子のリストから完全な権限文字列のセットに変換します
* @param shortNames 短い権限識別子のリスト
* @return 完全な権限文字列のセット
*/
fun toFullPermissions(shortNames: List<String>): Set<String> {
return shortNames.mapNotNull { toFullPermission(it) }.toSet()
}
/**
* 完全な権限文字列のセットから短い識別子のリストに変換します
* @param fullPermissions 完全な権限文字列のセット
* @return 短い権限識別子のリスト
*/
fun toShortNames(fullPermissions: Set<String>): List<String> {
return fullPermissions.mapNotNull { toShortName(it) }
}
}