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 f77d17f363e3e104a40230fa53be8f44266578c3..8f0a5a788dfdcb1d145b3919a4cd9efa9663c8af 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 e8bdab771a746f50b9c37301ae43828863625ede..8fb8629f214d4b516ce281128428d64f2e416cf1 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() }