diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/certificate/InvalidHealthCertificateException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/certificate/InvalidHealthCertificateException.kt index 700ab2ddce25b728253bd2d58d46cd0ea9e795c6..39061747c4f618f90d15b5d58f4b3a6bf1d3f785 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/certificate/InvalidHealthCertificateException.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/certificate/InvalidHealthCertificateException.kt @@ -48,20 +48,26 @@ class InvalidHealthCertificateException( VC_HC_CWT_NO_ISS("Issuer missing."), } + val showFaqButton: Boolean + get() = errorCode in codesVcInvalid + + private val codesVcInvalid = listOf( + HC_BASE45_DECODING_FAILED, + HC_CBOR_DECODING_FAILED, + HC_COSE_MESSAGE_INVALID, + HC_ZLIB_DECOMPRESSION_FAILED, + HC_COSE_TAG_INVALID, + VC_PREFIX_INVALID, + VC_HC_CWT_NO_DGC, + VC_HC_CWT_NO_EXP, + VC_HC_CWT_NO_HCERT, + VC_HC_CWT_NO_ISS, + VC_JSON_SCHEMA_INVALID + ) + val errorMessage: LazyString get() = when (errorCode) { - HC_BASE45_DECODING_FAILED, - HC_CBOR_DECODING_FAILED, - HC_COSE_MESSAGE_INVALID, - HC_ZLIB_DECOMPRESSION_FAILED, - HC_COSE_TAG_INVALID, - VC_PREFIX_INVALID, - VC_HC_CWT_NO_DGC, - VC_HC_CWT_NO_EXP, - VC_HC_CWT_NO_HCERT, - VC_HC_CWT_NO_ISS, - VC_JSON_SCHEMA_INVALID, - -> CachedString { context -> + in codesVcInvalid -> CachedString { context -> context.getString(ERROR_MESSAGE_VC_INVALID) } VC_NO_VACCINATION_ENTRY -> CachedString { context -> @@ -76,6 +82,10 @@ class InvalidHealthCertificateException( VC_ALREADY_REGISTERED -> CachedString { context -> context.getString(ERROR_MESSAGE_ALREADY_REGISTERED) } + // should never get here + else -> CachedString { context -> + context.getString(ERROR_MESSAGE_VC_INVALID) + } } override fun toHumanReadableError(context: Context): HumanReadableError { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/scan/VaccinationQrCodeScanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/scan/VaccinationQrCodeScanFragment.kt index 48a09d1257473491fbe4bd5167242d3af602a449..849b002be2801efb30bd48fad6cf63c8317fb5d5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/scan/VaccinationQrCodeScanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/scan/VaccinationQrCodeScanFragment.kt @@ -12,6 +12,7 @@ import de.rki.coronawarnapp.R import de.rki.coronawarnapp.bugreporting.ui.toErrorDialogBuilder import de.rki.coronawarnapp.databinding.FragmentScanQrCodeBinding import de.rki.coronawarnapp.util.DialogHelper +import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.permission.CameraPermissionHelper import de.rki.coronawarnapp.util.ui.doNavigate @@ -19,6 +20,7 @@ import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBinding import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import de.rki.coronawarnapp.vaccination.core.certificate.InvalidHealthCertificateException import javax.inject.Inject class VaccinationQrCodeScanFragment : @@ -67,6 +69,11 @@ class VaccinationQrCodeScanFragment : binding.qrCodeScanSpinner.hide() it.toErrorDialogBuilder(requireContext()).apply { setOnDismissListener { popBackStack() } + if (it is InvalidHealthCertificateException && it.showFaqButton) { + setNeutralButton(R.string.error_button_vc_faq) { _, _ -> + openUrl(getString(R.string.error_button_vc_faq_link)) + } + } }.show() } } diff --git a/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml b/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml index 49995e3b236828b20ef2bba82626225d3d6eb574..c5c4922eb4740a2648f10c97063c6810f6103825 100644 --- a/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml @@ -85,7 +85,7 @@ </plurals> <!-- XTXT: Vaccination QR code scan error message--> - <string name="error_vc_invalid">Dieser QR-Code ist kein gültiges Impfzertifikat.</string> + <string name="error_vc_invalid">Dieser QR-Code ist kein gültiges Impfzertifikat.\n\nWeitere Informationen zum Erhalt Ihres Impfzertifikats finden Sie in den FAQ.</string> <!-- XTXT: Vaccination QR code scan error message--> <string name="error_vc_not_yet_supported">Dieses Impfzertifikat wird in Ihrer App-Version noch nicht unterstützt. Bitte aktualisieren Sie Ihre App oder wenden Sie sich an die technische Hotline unter „App-Informationen“.</string> <!-- XTXT: Vaccination QR code scan error message--> @@ -111,5 +111,9 @@ <string name="vaccination_consent_onboarding_legal_information">"Weitere Hinweise finden Sie in der Datenschutzerklärung."</string> <!-- XBUT: Text for vaccination consent accept button --> <string name="vaccination_consent_accept_button">"Weiter"</string> + <!-- XBUT: Text for invalid vaccination certificate error button, linking to FAQ--> + <string name="error_button_vc_faq">FAQ zu Impfzertifikaten</string> + <!-- XTXT: Explains user about vaccination certificate: URL, has to be "translated" into english (relevant for all languages except german) - https://www.coronawarn.app/en/faq/#vac_cert_invalid --> + <string name="error_button_vc_faq_link">https://www.coronawarn.app/de/faq/#vac_cert_invalid</string> -</resources> \ No newline at end of file +</resources> diff --git a/Corona-Warn-App/src/main/res/values/vaccination_strings.xml b/Corona-Warn-App/src/main/res/values/vaccination_strings.xml index 36b9bdc95d905ee11194fcb6efe68bbf5b10ec6e..d990f30441878ebdd3276e7bd041b7825aaee1f7 100644 --- a/Corona-Warn-App/src/main/res/values/vaccination_strings.xml +++ b/Corona-Warn-App/src/main/res/values/vaccination_strings.xml @@ -111,5 +111,9 @@ <string name="vaccination_consent_onboarding_legal_information">"For more information, please refer to the privacy notice."</string> <!-- XBUT: Text for vaccination consent accept button --> <string name="vaccination_consent_accept_button">"Continue"</string> + <!-- XBUT: Text for invalid vaccination certificate error button, linking to FAQ--> + <string name="error_button_vc_faq">FAQ zu Impfzertifikaten</string> + <!-- XTXT: Explains user about vaccination certificate: URL, has to be "translated" into english (relevant for all languages except german) - https://www.coronawarn.app/en/faq/#vac_cert_invalid --> + <string name="error_button_vc_faq_link">https://www.coronawarn.app/en/faq/#vac_cert_invalid</string> -</resources> \ No newline at end of file +</resources>