package dev.matinzd.healthconnect.permissions import androidx.activity.ComponentActivity import androidx.activity.result.ActivityResultLauncher import androidx.health.connect.client.PermissionController import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch object HealthConnectPermissionDelegate { private lateinit var requestPermission: ActivityResultLauncher> private val channel = Channel>() private val coroutineScope = CoroutineScope(Dispatchers.IO) fun setPermissionDelegate( activity: ComponentActivity, providerPackageName: String = "com.google.android.apps.healthdata" ) { val contract = PermissionController.createRequestPermissionResultContract(providerPackageName) requestPermission = activity.registerForActivityResult(contract) { coroutineScope.launch { channel.send(it) coroutineContext.cancel() } } } suspend fun launch(permissions: Set): Set { requestPermission.launch(permissions) return channel.receive() } }