From 59015a7a14efbcb203254d2698ec9cfbc3dc0ef1 Mon Sep 17 00:00:00 2001 From: BMItter <Berndus@gmx.de> Date: Fri, 23 Apr 2021 12:12:07 +0200 Subject: [PATCH] Human friendly QR Dialog Message 9002 (EXPOSUREAPP-6658) (#2919) * Reworked invalid qr code dialog for 2.0 * clean, ktlint, detekt, sourcecheck, Cetegories, reports, Annotations imports etc. * string cleanup * version bump * huge UI change Co-authored-by: Luka Harambasic <luka.harambasic@sap.com> --- .../attendee/checkins/CheckInEvent.kt | 4 ++-- .../attendee/checkins/CheckInsFragment.kt | 14 ++++++++------ .../attendee/checkins/CheckInsViewModel.kt | 9 +++++---- Corona-Warn-App/src/main/res/values-de/strings.xml | 9 +++++++++ Corona-Warn-App/src/main/res/values/strings.xml | 9 +++++++++ gradle.properties | 2 +- 6 files changed, 34 insertions(+), 13 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt index a8c0aba51..6d63a9ad9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInEvent.kt @@ -1,8 +1,8 @@ package de.rki.coronawarnapp.ui.eventregistration.attendee.checkins -import androidx.annotation.StringRes import de.rki.coronawarnapp.eventregistration.checkins.CheckIn import de.rki.coronawarnapp.eventregistration.checkins.qrcode.VerifiedTraceLocation +import de.rki.coronawarnapp.util.ui.LazyString sealed class CheckInEvent { @@ -12,7 +12,7 @@ sealed class CheckInEvent { data class ConfirmCheckIn(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent() - data class InvalidQrCode(@StringRes val errorTextRes: Int) : CheckInEvent() + data class InvalidQrCode(val errorText: LazyString) : CheckInEvent() data class ConfirmCheckInWithoutHistory(val verifiedTraceLocation: VerifiedTraceLocation) : CheckInEvent() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt index d198e93cc..2b82e4dfe 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsFragment.kt @@ -7,7 +7,6 @@ import android.os.Bundle import android.provider.Settings import android.view.View import android.widget.Toast -import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.Toolbar import androidx.core.net.toUri @@ -34,6 +33,7 @@ import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator import de.rki.coronawarnapp.util.lists.diffutil.update import de.rki.coronawarnapp.util.onScroll import de.rki.coronawarnapp.util.tryHumanReadableError +import de.rki.coronawarnapp.util.ui.LazyString import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy @@ -99,7 +99,7 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag ) } - is CheckInEvent.InvalidQrCode -> showInvalidQrCodeInformation(event.errorTextRes) + is CheckInEvent.InvalidQrCode -> showInvalidQrCodeInformation(event.errorText) is CheckInEvent.ConfirmCheckInWithoutHistory -> doNavigate( CheckInsFragmentDirections.actionCheckInsFragmentToConfirmCheckInFragmentCleanHistory( @@ -135,12 +135,14 @@ class CheckInsFragment : Fragment(R.layout.trace_location_attendee_checkins_frag } } - private fun showInvalidQrCodeInformation(@StringRes errorTextRes: Int) = + private fun showInvalidQrCodeInformation(lazyErrorText: LazyString) { MaterialAlertDialogBuilder(requireContext()).apply { - setTitle(R.string.errors_generic_headline) - setMessage(errorTextRes) - setPositiveButton(R.string.errors_generic_button_positive) { _, _ -> } + val errorText = lazyErrorText.get(context) + setTitle(R.string.trace_location_attendee_invalid_qr_code_dialog_title) + setMessage(getString(R.string.trace_location_attendee_invalid_qr_code_dialog_message, errorText)) + setPositiveButton(R.string.trace_location_attendee_invalid_qr_code_dialog_positive_button) { _, _ -> } }.show() + } private fun updateViews(items: List<CheckInsItem>) { checkInsAdapter.update(items) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt index 94c98114e..fcd6b21e0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/eventregistration/attendee/checkins/CheckInsViewModel.kt @@ -10,8 +10,6 @@ import de.rki.coronawarnapp.eventregistration.checkins.CheckIn import de.rki.coronawarnapp.eventregistration.checkins.CheckInRepository import de.rki.coronawarnapp.eventregistration.checkins.qrcode.QRCodeUriParser import de.rki.coronawarnapp.eventregistration.checkins.qrcode.TraceLocationVerifier -import de.rki.coronawarnapp.exception.ExceptionCategory -import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.presencetracing.checkins.checkout.CheckOutHandler import de.rki.coronawarnapp.ui.eventregistration.attendee.checkins.items.ActiveCheckInVH import de.rki.coronawarnapp.ui.eventregistration.attendee.checkins.items.CameraPermissionVH @@ -22,6 +20,8 @@ import de.rki.coronawarnapp.util.coroutine.AppScope import de.rki.coronawarnapp.util.coroutine.DispatcherProvider import de.rki.coronawarnapp.util.flow.intervalFlow import de.rki.coronawarnapp.util.ui.SingleLiveEvent +import de.rki.coronawarnapp.util.ui.toLazyString +import de.rki.coronawarnapp.util.ui.toResolvingString import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.CoroutineScope @@ -153,11 +153,12 @@ class CheckInsViewModel @AssistedInject constructor( CheckInEvent.ConfirmCheckIn(verifyResult.verifiedTraceLocation) ) is TraceLocationVerifier.VerificationResult.Invalid -> - events.postValue(CheckInEvent.InvalidQrCode(verifyResult.errorTextRes)) + events.postValue(CheckInEvent.InvalidQrCode(verifyResult.errorTextRes.toResolvingString())) } } catch (e: Exception) { Timber.d(e, "TraceLocation verification failed") - e.report(ExceptionCategory.INTERNAL) + val msg = e.message ?: "QR-Code was invalid" + events.postValue(CheckInEvent.InvalidQrCode(msg.toLazyString())) } } diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml index 5c3fca699..b47dc88f7 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -1992,4 +1992,13 @@ <string name="trace_location_attendee_consent_dialog_positive_button">Teilen</string> <!-- XBUT: Trace location check-ins consent screen dialog negative button --> <string name="trace_location_attendee_consent_dialog_negative_button">Nicht teilen</string> + + <!-- XHED: Trace location check-ins invalid qr code dialog title --> + <string name="trace_location_attendee_invalid_qr_code_dialog_title">QR-Code nicht gültig</string> + <!-- YTXT: Trace location check-ins invalid qr code dialog message --> + <string name="trace_location_attendee_invalid_qr_code_dialog_message">Der gescannte QR-Code ist nicht gültig.\nBitte scannen Sie einen gültigen QR-Code.\n\n(%1$s)</string> + <!-- XBUT: Trace location check-ins invalid qr code dialog positive button --> + <string name="trace_location_attendee_invalid_qr_code_dialog_positive_button">Ok</string> + <!-- XBUT: Trace location check-ins invalid qr code dialog negative button --> + <string name="trace_location_attendee_invalid_qr_code_dialog_negative_button">Abbrechen</string> </resources> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 621fa7b8e..94cde0a78 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -2000,4 +2000,13 @@ <string name="trace_location_attendee_consent_dialog_positive_button">"Share"</string> <!-- XBUT: Trace location check-ins consent screen dialog negative button --> <string name="trace_location_attendee_consent_dialog_negative_button">"Don’t Share"</string> + + <!-- XHED: Trace location check-ins invalid qr code dialog title --> + <string name="trace_location_attendee_invalid_qr_code_dialog_title">QR-Code nicht gültig</string> + <!-- YTXT: Trace location check-ins invalid qr code dialog message --> + <string name="trace_location_attendee_invalid_qr_code_dialog_message">Der gescannte QR-Code ist nicht gültig.\nBitte scannen Sie einen gültigen QR-Code.\n\n(%1$s)</string> + <!-- XBUT: Trace location check-ins invalid qr code dialog positive button --> + <string name="trace_location_attendee_invalid_qr_code_dialog_positive_button">Ok</string> + <!-- XBUT: Trace location check-ins invalid qr code dialog negative button --> + <string name="trace_location_attendee_invalid_qr_code_dialog_negative_button">Abbrechen</string> </resources> \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index c87a56f93..441ea8235 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,5 +19,5 @@ org.gradle.dependency.verification.console=verbose # Versioning, this is used by the app & pipelines to calculate the current versionCode & versionName VERSION_MAJOR=2 VERSION_MINOR=0 -VERSION_PATCH=3 +VERSION_PATCH=4 VERSION_BUILD=0 -- GitLab