package life.thephage.healthkit
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.health.connect.client.PermissionController
class HealthConnectActivity : AppCompatActivity() {
companion object {
const val PERMISSIONS_EXTRA = "permissions"
const val RESULT_EXTRA_PREFIX = "health_connect."
const val RESULT_GRANTED_PERMISSIONS = "granted_permissions"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Intentから権限リストを取得
val permissions = intent.getStringArrayExtra(PERMISSIONS_EXTRA)?.toSet() ?: emptySet()
if (permissions.isEmpty()) {
// 権限リストが空の場合は何もせずに終了
finishWithResult(emptySet())
return
}
// 権限リクエストを実行
val contract = PermissionController.createRequestPermissionResultContract()
val launcher = registerForActivityResult(contract) { grantedPermissions ->
// 結果を返してActivityを終了
finishWithResult(grantedPermissions)
}
// Activityが再生成された場合は再度launchしない(結果は自動的にコールバックに届く)
if (savedInstanceState == null) {
launcher.launch(permissions)
}
}
private fun finishWithResult(grantedPermissions: Set<String>) {
val intent = Intent()
val prefix = RESULT_EXTRA_PREFIX
// 短い識別子のリストに変換
val shortNames = HealthPermissionUtil.toShortNames(grantedPermissions)
// 結果をIntentに格納
intent.putExtra(prefix + RESULT_GRANTED_PERMISSIONS, shortNames.toTypedArray())
// 結果を設定して終了
setResult(Activity.RESULT_OK, intent)
finish()
}
}