Coverage Summary for Class: PermissionsHelper (com.vsevolodganin.clicktrack.utils.android)

Class Method, % Branch, % Line, % Instruction, %
PermissionsHelper 0% (0/3) 0% (0/5) 0% (0/44)
PermissionsHelper$launcher$1 0% (0/1) 0% (0/1) 0% (0/5)
PermissionsHelper$requestPermission$2 0% (0/1) 0% (0/1) 0% (0/24)
PermissionsHelper$requestPermissions$2 0% (0/1) 0% (0/3) 0% (0/38)
PermissionsHelper$requestPermissions$2$resultAsync$1 0% (0/1) 0% (0/1) 0% (0/12)
Total 0% (0/7) 0% (0/11) 0% (0/123)


 package com.vsevolodganin.clicktrack.utils.android
 
 import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions
 import androidx.appcompat.app.AppCompatActivity
 import com.vsevolodganin.clicktrack.di.component.MainControllerScope
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.async
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.coroutineScope
 import me.tatarka.inject.annotations.Inject
 
 @MainControllerScope
 @Inject
 class PermissionsHelper(
     activity: AppCompatActivity,
 ) {
     // FIXME: Fix process restoration case
 
     private val resultChannel = Channel<Map<String, Boolean>>()
     private val launcher = activity.registerForActivityResult(RequestMultiplePermissions(), resultChannel::trySend)
 
     suspend fun requestPermission(permission: String): Boolean? = coroutineScope {
         requestPermissions(arrayOf(permission))[permission]
     }
 
     suspend fun requestPermissions(permissions: Array<String>): Map<String, Boolean> = coroutineScope {
         val resultAsync = async(start = CoroutineStart.UNDISPATCHED) {
             resultChannel.receive()
         }
         launcher.launch(permissions)
         resultAsync.await()
     }
 }