Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -82,20 +82,23 @@ internal class ConsentViewModel @Inject constructor(
selectedTabIndex: Int,
): ConsentViewState {
val allowParentalConsent = projectConfig.consent.allowParentalConsent
val isMultiFactorIdEnabled = projectConfig.multifactorId?.allowedExternalCredentials?.isNotEmpty() ?: false

return ConsentViewState(
showLogo = projectConfig.consent.displaySimprintsLogo,
showParentalConsent = allowParentalConsent,
consentTextBuilder = GeneralConsentTextHelper(
projectConfig.consent,
projectConfig.general.modalities,
consentType,
config = projectConfig.consent,
modalities = projectConfig.general.modalities,
consentType = consentType,
isMultiFactorIdEnabled = isMultiFactorIdEnabled,
),
parentalTextBuilder = if (allowParentalConsent) {
ParentalConsentTextHelper(
projectConfig.consent,
projectConfig.general.modalities,
consentType,
config = projectConfig.consent,
modalities = projectConfig.general.modalities,
consentType = consentType,
isMultiFactorIdEnabled = isMultiFactorIdEnabled,
)
} else {
null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,21 @@ internal data class GeneralConsentTextHelper(
private val config: ConsentConfiguration,
private val modalities: List<Modality>,
private val consentType: ConsentType,
private val isMultiFactorIdEnabled: Boolean,
) {
// TODO All the `getString(id).format(arg,arg)` calls should be `getString(id,arg,arg)` one strings are fixed

// First argument in consent text should always be program name, second is modality specific access/use case text
fun assembleText(context: Context) = StringBuilder()
.apply {
val modalityUseCase = getModalitySpecificUseCaseText(context, modalities)
val modalityAccess = getModalitySpecificAccessText(context, modalities)
val modalityAccess =
Comment thread
alexandr-simprints marked this conversation as resolved.
getModalitySpecificAccessText(context, modalities) + getMultiFactorIdAccessText(context, isMultiFactorIdEnabled)

filterAppRequestForConsent(context, consentType, config, modalityUseCase)
filterForDataSharingOptions(context, config, modalityUseCase, modalityAccess)
val requestModalityUseCase = modalityUseCase + getMultiFactorIdUseCaseText(context, isMultiFactorIdEnabled)
val dataSharingModalityUseCase = modalityUseCase + getMultiFactorIdSharingText(context, isMultiFactorIdEnabled)

filterAppRequestForConsent(context, consentType, config, requestModalityUseCase)
filterForDataSharingOptions(context, config, dataSharingModalityUseCase, modalityAccess)
}.toString()

private fun StringBuilder.filterAppRequestForConsent(
Expand Down Expand Up @@ -134,4 +138,42 @@ internal data class GeneralConsentTextHelper(
Modality.FACE -> context.getString(R.string.consent_biometrics_access_face)
Modality.FINGERPRINT -> context.getString(R.string.consent_biometrics_access_fingerprint)
}

private fun getMultiFactorIdUseCaseText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_biometric_concat_modalities),
context.getString(R.string.consent_credentials_general),
).joinToString(separator = " ")
} else {
""
}

private fun getMultiFactorIdAccessText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_credentials_access),
).joinToString(separator = " ")
} else {
""
}

private fun getMultiFactorIdSharingText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_biometric_concat_modalities),
context.getString(R.string.consent_credentials_your_id),
).joinToString(separator = " ")
} else {
""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ internal data class ParentalConsentTextHelper(
private val config: ConsentConfiguration,
private val modalities: List<Modality>,
private val consentType: ConsentType,
private val isMultiFactorIdEnabled: Boolean,
) {
// TODO All the `getString(id).format(arg,arg)` calls should be `getString(id,arg,arg)` one strings are fixed

// First argument in consent text should always be program name, second is modality specific access/use case text
fun assembleText(context: Context): String = StringBuilder()
.apply {
val modalityUseCase = getModalitySpecificUseCaseText(context, modalities)
val modalityAccess = getModalitySpecificAccessText(context, modalities)
val modalityAccess =
getModalitySpecificAccessText(context, modalities) + getMultiFactorIdAccessText(context, isMultiFactorIdEnabled)

filterAppRequestForParentalConsent(context, consentType, config, modalityUseCase)
extractDataSharingOptions(context, config, modalityUseCase, modalityAccess)
val requestModalityUseCase = modalityUseCase + getMultiFactorIdUseCaseText(context, isMultiFactorIdEnabled)
val dataSharingModalityUseCase = modalityUseCase + getMultiFactorIdSharingText(context, isMultiFactorIdEnabled)
filterAppRequestForParentalConsent(context, consentType, config, requestModalityUseCase)
extractDataSharingOptions(context, config, dataSharingModalityUseCase, modalityAccess)
}.toString()

private fun StringBuilder.filterAppRequestForParentalConsent(
Expand Down Expand Up @@ -136,4 +139,42 @@ internal data class ParentalConsentTextHelper(
Modality.FINGERPRINT -> context.getString(R.string.consent_biometrics_access_fingerprint)
else -> ""
}

private fun getMultiFactorIdAccessText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_credentials_parental_access),
).joinToString(separator = " ")
} else {
""
}

private fun getMultiFactorIdUseCaseText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_biometric_concat_modalities),
context.getString(R.string.consent_credentials_parental_general),
).joinToString(separator = " ")
} else {
""
}

private fun getMultiFactorIdSharingText(
context: Context,
isMultiFactorIdEnabled: Boolean,
): String = if (isMultiFactorIdEnabled) {
listOf(
",",
context.getString(R.string.consent_biometric_concat_modalities),
context.getString(R.string.consent_credentials_parental_your_id),
).joinToString(separator = " ")
} else {
""
}
}
Loading