in Jetsurvey/app/src/main/java/com/example/compose/jetsurvey/survey/SurveyQuestions.kt [84:145]
fun Question(
question: Question,
answer: Answer<*>?,
shouldAskPermissions: Boolean,
onAnswer: (Answer<*>) -> Unit,
onAction: (Int, SurveyActionType) -> Unit,
onDoNotAskForPermissions: () -> Unit,
openSettings: () -> Unit,
modifier: Modifier = Modifier
) {
if (question.permissionsRequired.isEmpty()) {
QuestionContent(question, answer, onAnswer, onAction, modifier)
} else {
val permissionsContentModifier = modifier.padding(horizontal = 20.dp)
val multiplePermissionsState =
rememberMultiplePermissionsState(question.permissionsRequired)
when {
// If all permissions are granted, then show the question
multiplePermissionsState.allPermissionsGranted -> {
QuestionContent(question, answer, onAnswer, onAction, modifier)
}
// If user denied some permissions but a rationale should be shown or the user
// is going to be presented with the permission for the first time. Let's explain
// why we need the permission
multiplePermissionsState.shouldShowRationale ||
!multiplePermissionsState.permissionRequested ->
{
if (!shouldAskPermissions) {
PermissionsDenied(
question.questionText,
openSettings,
permissionsContentModifier
)
} else {
PermissionsRationale(
question,
multiplePermissionsState,
onDoNotAskForPermissions,
permissionsContentModifier
)
}
}
// If the criteria above hasn't been met, the user denied some permission.
else -> {
PermissionsDenied(question.questionText, openSettings, permissionsContentModifier)
// Trigger side-effect to not ask for permissions
LaunchedEffect(true) {
onDoNotAskForPermissions()
}
}
}
// If permissions are denied, inform the caller that can move to the next question
if (!shouldAskPermissions) {
LaunchedEffect(true) {
onAnswer(Answer.PermissionsDenied)
}
}
}
}