fun Question()

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