mirror of
https://github.com/bitwarden/android.git
synced 2025-02-17 12:30:00 +03:00
Add method to request multiple permissions at once (#633)
This commit is contained in:
parent
880bdc8826
commit
87ea0da23f
3 changed files with 48 additions and 1 deletions
|
@ -16,11 +16,26 @@ interface PermissionsManager {
|
|||
@Composable
|
||||
fun getLauncher(onResult: (Boolean) -> Unit): ManagedActivityResultLauncher<String, Boolean>
|
||||
|
||||
/**
|
||||
* Method for creating and returning a permissions launcher that can request multiple
|
||||
* permissions at once.
|
||||
*/
|
||||
@Composable
|
||||
fun getPermissionsLauncher(
|
||||
onResult: (Map<String, Boolean>) -> Unit,
|
||||
): ManagedActivityResultLauncher<Array<String>, Map<String, Boolean>>
|
||||
|
||||
/**
|
||||
* Method for checking whether the permission is granted.
|
||||
*/
|
||||
fun checkPermission(permission: String): Boolean
|
||||
|
||||
/**
|
||||
* Method for checking whether the permissions are granted. This returns `true` only if all
|
||||
* permissions have been granted, `false` otherwise.
|
||||
*/
|
||||
fun checkPermissions(permissions: Array<String>): Boolean
|
||||
|
||||
/**
|
||||
* Method for checking if an informative UI should be shown the user.
|
||||
*/
|
||||
|
|
|
@ -7,10 +7,12 @@ import androidx.activity.compose.rememberLauncherForActivityResult
|
|||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
|
||||
|
||||
/**
|
||||
* Primary implementation of [PermissionsManager].
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
class PermissionsManagerImpl(
|
||||
private val activity: Activity,
|
||||
) : PermissionsManager {
|
||||
|
@ -21,7 +23,16 @@ class PermissionsManagerImpl(
|
|||
): ManagedActivityResultLauncher<String, Boolean> =
|
||||
rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.RequestPermission(),
|
||||
onResult,
|
||||
onResult = onResult,
|
||||
)
|
||||
|
||||
@Composable
|
||||
override fun getPermissionsLauncher(
|
||||
onResult: (Map<String, Boolean>) -> Unit,
|
||||
): ManagedActivityResultLauncher<Array<String>, Map<String, Boolean>> =
|
||||
rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.RequestMultiplePermissions(),
|
||||
onResult = onResult,
|
||||
)
|
||||
|
||||
override fun checkPermission(permission: String): Boolean =
|
||||
|
@ -30,6 +41,9 @@ class PermissionsManagerImpl(
|
|||
permission,
|
||||
) == PackageManager.PERMISSION_GRANTED
|
||||
|
||||
override fun checkPermissions(permissions: Array<String>): Boolean =
|
||||
permissions.map { checkPermission(it) }.all { isGranted -> isGranted }
|
||||
|
||||
override fun shouldShouldRequestPermissionRationale(
|
||||
permission: String,
|
||||
): Boolean =
|
||||
|
|
|
@ -20,6 +20,11 @@ class FakePermissionManager : PermissionsManager {
|
|||
*/
|
||||
var getPermissionsResult: Boolean = false
|
||||
|
||||
/**
|
||||
* The value returned when the user is asked for permission.
|
||||
*/
|
||||
var getMultiplePermissionsResult: Map<String, Boolean> = emptyMap()
|
||||
|
||||
/**
|
||||
* * The value for whether a rationale should be shown to the user.
|
||||
*/
|
||||
|
@ -34,10 +39,23 @@ class FakePermissionManager : PermissionsManager {
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun getPermissionsLauncher(
|
||||
onResult: (Map<String, Boolean>) -> Unit,
|
||||
): ManagedActivityResultLauncher<Array<String>, Map<String, Boolean>> {
|
||||
return mockk {
|
||||
every { launch(any()) } answers { onResult.invoke(getMultiplePermissionsResult) }
|
||||
}
|
||||
}
|
||||
|
||||
override fun checkPermission(permission: String): Boolean {
|
||||
return checkPermissionResult
|
||||
}
|
||||
|
||||
override fun checkPermissions(permissions: Array<String>): Boolean {
|
||||
return checkPermissionResult
|
||||
}
|
||||
|
||||
override fun shouldShouldRequestPermissionRationale(
|
||||
permission: String,
|
||||
): Boolean {
|
||||
|
|
Loading…
Add table
Reference in a new issue