mattinger
12/14/2021, 5:07 PM@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun PermissionScaffold(
checkingPermission: Boolean,
onCheckingPermissionChanged: (Boolean) -> Unit,
permissions: List<String>,
onPermisionsGranted: () -> Unit,
onPermissionsDeniedTemporarily: () -> Unit,
onPermissionsDeniedPermanently: () -> Unit,
onShowRationale: @Composable (MultiplePermissionsState) -> Unit,
) {
if (checkingPermission) {
val permissionState = rememberMultiplePermissionsState(permissions = permissions)
when {
permissionState.allPermissionsGranted -> {
SideEffect {
onCheckingPermissionChanged(false)
onPermisionsGranted()
}
}
permissionState.shouldShowRationale && !permissionState.permissionRequested -> {
onShowRationale(permissionState)
}
!permissionState.permissionRequested -> {
SideEffect {
permissionState.launchMultiplePermissionRequest()
}
}
permissionState.shouldShowRationale && permissionState.permissionRequested -> {
SideEffect {
onCheckingPermissionChanged(false)
onPermissionsDeniedTemporarily()
}
}
!permissionState.shouldShowRationale && permissionState.permissionRequested -> {
SideEffect {
onCheckingPermissionChanged(false)
onPermissionsDeniedPermanently()
}
}
}
}
}