From df6462b3dc65cf0885653cba504f2af78acd986c Mon Sep 17 00:00:00 2001 From: Alex Paulescu <alex.paulescu@gmail.com> Date: Wed, 26 May 2021 17:09:17 +0300 Subject: [PATCH] Invalid QR dialog wrong button functions (EXPOSUREAPP-7341) (#3253) * OSD back button does same thing as cancel button. * Make solution isolated * Fix linting * Simplified condition. * Cancel function now works consistently with all invalid QR codes. * Renamed function. Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> Co-authored-by: Alexander Alferov <a.alferov@sap.com> Co-authored-by: Juraj Kusnier <jurajkusnier@users.noreply.github.com> Co-authored-by: Mohamed Metwalli <mohamed.metwalli@sap.com> --- .../scan/SubmissionQRCodeScanFragment.kt | 46 +++++++------------ .../de/rki/coronawarnapp/util/DialogHelper.kt | 16 +++++-- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanFragment.kt index f77d17f36..8f0a5a788 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanFragment.kt @@ -82,9 +82,13 @@ class SubmissionQRCodeScanFragment : Fragment(R.layout.fragment_submission_qr_co viewModel.qrCodeValidationState.observe2(this) { if (QrCodeRegistrationStateProcessor.ValidationState.INVALID == it) { - showInvalidScanDialog() + DialogHelper.showDialog(createInvalidScanDialog()) } } + + viewModel.registrationError.observe2(this) { + DialogHelper.showDialog(buildErrorDialog(it)) + } viewModel.showRedeemedTokenWarning.observe2(this) { val dialog = DialogHelper.DialogInstance( requireActivity(), @@ -128,10 +132,6 @@ class SubmissionQRCodeScanFragment : Fragment(R.layout.fragment_submission_qr_co } }.run { doNavigate(this) } } - - viewModel.registrationError.observe2(this) { - DialogHelper.showDialog(buildErrorDialog(it)) - } } private fun startDecode() { @@ -142,16 +142,7 @@ class SubmissionQRCodeScanFragment : Fragment(R.layout.fragment_submission_qr_co private fun buildErrorDialog(exception: CwaWebException): DialogHelper.DialogInstance { return when (exception) { - is BadRequestException -> DialogHelper.DialogInstance( - requireActivity(), - R.string.submission_qr_code_scan_invalid_dialog_headline, - R.string.submission_qr_code_scan_invalid_dialog_body, - R.string.submission_qr_code_scan_invalid_dialog_button_positive, - R.string.submission_qr_code_scan_invalid_dialog_button_negative, - true, - { startDecode() }, - ::navigateToDispatchScreen - ) + is BadRequestException -> createInvalidScanDialog() is CwaClientError, is CwaServerError -> DialogHelper.DialogInstance( requireActivity(), R.string.submission_error_dialog_web_generic_error_title, @@ -177,20 +168,17 @@ class SubmissionQRCodeScanFragment : Fragment(R.layout.fragment_submission_qr_co SubmissionQRCodeScanFragmentDirections.actionSubmissionQRCodeScanFragmentToSubmissionDispatcherFragment() ) - private fun showInvalidScanDialog() { - val invalidScanDialogInstance = DialogHelper.DialogInstance( - requireActivity(), - R.string.submission_qr_code_scan_invalid_dialog_headline, - R.string.submission_qr_code_scan_invalid_dialog_body, - R.string.submission_qr_code_scan_invalid_dialog_button_positive, - R.string.submission_qr_code_scan_invalid_dialog_button_negative, - true, - ::startDecode, - ::navigateToDispatchScreen - ) - - DialogHelper.showDialog(invalidScanDialogInstance) - } + private fun createInvalidScanDialog() = DialogHelper.DialogInstance( + requireActivity(), + R.string.submission_qr_code_scan_invalid_dialog_headline, + R.string.submission_qr_code_scan_invalid_dialog_body, + R.string.submission_qr_code_scan_invalid_dialog_button_positive, + R.string.submission_qr_code_scan_invalid_dialog_button_negative, + true, + { startDecode() }, + { viewModel.onBackPressed() }, + { viewModel.onBackPressed() } + ) override fun onRequestPermissionsResult( requestCode: Int, diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DialogHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DialogHelper.kt index e8bdab771..8fb8629f2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DialogHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DialogHelper.kt @@ -23,7 +23,8 @@ object DialogHelper { val cancelable: Boolean? = true, val isTextSelectable: Boolean = false, val positiveButtonFunction: () -> Unit? = {}, - val negativeButtonFunction: () -> Unit? = {} + val negativeButtonFunction: () -> Unit? = {}, + val cancelFunction: () -> Unit? = {} ) { constructor( context: Context, @@ -33,7 +34,8 @@ object DialogHelper { negativeButton: Int? = null, cancelable: Boolean? = true, positiveButtonFunction: () -> Unit? = {}, - negativeButtonFunction: () -> Unit? = {} + negativeButtonFunction: () -> Unit? = {}, + cancelFunction: () -> Unit? = {} ) : this( context = context, title = context.resources.getString(title), @@ -42,7 +44,8 @@ object DialogHelper { negativeButton = negativeButton?.let { context.resources.getString(it) }, cancelable = cancelable, positiveButtonFunction = positiveButtonFunction, - negativeButtonFunction = negativeButtonFunction + negativeButtonFunction = negativeButtonFunction, + cancelFunction = cancelFunction ) constructor( @@ -53,7 +56,8 @@ object DialogHelper { negativeButton: Int? = null, cancelable: Boolean? = true, positiveButtonFunction: () -> Unit? = {}, - negativeButtonFunction: () -> Unit? = {} + negativeButtonFunction: () -> Unit? = {}, + cancelFunction: () -> Unit? = {} ) : this( context = context, title = context.resources.getString(title), @@ -62,7 +66,8 @@ object DialogHelper { negativeButton = negativeButton?.let { context.resources.getString(it) }, cancelable = cancelable, positiveButtonFunction = positiveButtonFunction, - negativeButtonFunction = negativeButtonFunction + negativeButtonFunction = negativeButtonFunction, + cancelFunction = cancelFunction ) } @@ -93,6 +98,7 @@ object DialogHelper { dialogInstance.negativeButtonFunction() } } + setOnCancelListener { dialogInstance.cancelFunction() } } builder.create() } -- GitLab