From d1cfb5260178ecb7f6036915d13003b2c1c9f167 Mon Sep 17 00:00:00 2001 From: Chilja Gossow <49635654+chiljamgossow@users.noreply.github.com> Date: Thu, 10 Jun 2021 12:47:42 +0200 Subject: [PATCH] Hot fix faq invalid vc (EXPOSUREAPP-7709) (#3400) * add special dialog with link to faq * move logic Co-authored-by: Matthias Urhahn <matthias.urhahn@sap.com> --- .../InvalidHealthCertificateException.kt | 34 ++++++++++++------- .../ui/scan/VaccinationQrCodeScanFragment.kt | 7 ++++ .../res/values-de/vaccination_strings.xml | 8 +++-- .../main/res/values/vaccination_strings.xml | 6 +++- 4 files changed, 40 insertions(+), 15 deletions(-) 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 700ab2ddc..39061747c 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 48a09d125..849b002be 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 49995e3b2..c5c4922eb 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 36b9bdc95..d990f3044 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> -- GitLab