Skip to content

Instantly share code, notes, and snippets.

@FireZenk
Created April 22, 2022 09:46
Show Gist options
  • Save FireZenk/76682842a83aefd7516296c1ac0de887 to your computer and use it in GitHub Desktop.
Save FireZenk/76682842a83aefd7516296c1ac0de887 to your computer and use it in GitHub Desktop.
Android permission request for Compose
@ExperimentalPermissionsApi
@Composable
fun CheckPermissions(permissions: List<String>, launcher: (() -> Unit) -> Unit,
onAllGranted: () -> Unit, onPermissionsNeeded: () -> Unit, ) {
val multiplePermissionsState = rememberMultiplePermissionsState(permissions)
val isAlreadyGranted = remember { mutableStateOf(false) }
launcher { multiplePermissionsState.launchMultiplePermissionRequest() }
val allGranted = multiplePermissionsState.allPermissionsGranted
if (allGranted && !isAlreadyGranted.value) {
isAlreadyGranted.value = true
onAllGranted()
} else if (!allGranted) {
onPermissionsNeeded()
}
}
val permissions = listOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
var permissionLauncher: (() -> Unit)? = null
// Composable
CheckPermissions(
permissions = permissions,
launcher = { permissionLauncher = it },
onAllGranted = { /* Do something on all granted */ },
onPermissionsNeeded = { /* Do something on permisions needed */ }
)
// Run permission check
permissionLauncher?.invoke()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment