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()
}
}