From aae3618c5eed562067ac23bf4aee0eb42e2b1688 Mon Sep 17 00:00:00 2001
From: Rituraj Sambherao <54317407+ritsam@users.noreply.github.com>
Date: Mon, 14 Sep 2020 17:17:44 +0100
Subject: [PATCH] Submission: Warning if user cancels submission
 (EXPOSUREAPP-2509) (#1142)

* user warning if keys submission flow is inturrpted / cancelled

* default string values added for pipeline fix

* Warning Dialog strings updated

* applied the changes suggested in review

Co-authored-by: Matthias Urhahn <darken@darken.eu>
Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
---
 ...ssionResultPositiveOtherWarningFragment.kt | 30 ++++++++++++++++++-
 .../src/main/res/values-de/strings.xml        |  9 ++++++
 .../src/main/res/values/strings.xml           |  9 ++++++
 3 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt
index 471d9f48c..07e8fb165 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionResultPositiveOtherWarningFragment.kt
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.view.accessibility.AccessibilityEvent
+import androidx.activity.OnBackPressedCallback
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.lifecycle.Observer
@@ -39,6 +40,14 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
     private lateinit var internalExposureNotificationPermissionHelper:
             InternalExposureNotificationPermissionHelper
 
+    // Overrides default back behaviour
+    private val backCallback: OnBackPressedCallback =
+        object : OnBackPressedCallback(true) {
+            override fun handleOnBackPressed() {
+                handleSubmissionCancellation()
+            }
+        }
+
     override fun onResume() {
         super.onResume()
         binding.submissionPositiveOtherPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT)
@@ -53,6 +62,7 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
         internalExposureNotificationPermissionHelper =
             InternalExposureNotificationPermissionHelper(this, this)
         _binding = FragmentSubmissionPositiveOtherWarningBinding.inflate(inflater)
+        requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backCallback)
         binding.submissionViewModel = submissionViewModel
         binding.lifecycleOwner = this
         return binding.root
@@ -139,10 +149,28 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(),
             initiateWarningOthers()
         }
         binding.submissionPositiveOtherWarningHeader.headerButtonBack.buttonIcon.setOnClickListener {
-            navigateToSubmissionResultFragment()
+            handleSubmissionCancellation()
         }
     }
 
+    /**
+    * Opens a Dialog that warns user
+    * when they're about to cancel the submission flow
+    * @see DialogHelper
+    * @see navigateToSubmissionResultFragment
+    */
+    fun handleSubmissionCancellation() {
+        DialogHelper.showDialog(DialogHelper.DialogInstance(
+            requireActivity(),
+            R.string.submission_error_dialog_confirm_cancellation_title,
+            R.string.submission_error_dialog_confirm_cancellation_body,
+            R.string.submission_error_dialog_confirm_cancellation_button_positive,
+            R.string.submission_error_dialog_confirm_cancellation_button_negative,
+            true,
+            ::navigateToSubmissionResultFragment
+        ))
+    }
+
     private fun navigateToSubmissionResultFragment() =
         findNavController().doNavigate(
             SubmissionResultPositiveOtherWarningFragmentDirections
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 bd30d1371..dcd6de079 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -770,6 +770,15 @@
     <!-- XBUT: Positive button for submission tan redeemed -->
     <string name="submission_error_dialog_web_tan_redeemed_button_positive">"OK"</string>
 
+    <!-- XHED: Dialog title for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_title">"Wollen Sie wirklich abbrechen?"</string>
+    <!-- XMSG: Dialog body for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_body">"Ihre bisherigen Angaben werden nicht gespeichert."</string>
+    <!-- XBUT: Positive button for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_button_positive">"Ja"</string>
+    <!-- XBUT: Negative button for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_button_negative">"Nein"</string>
+
     <!-- Permission Rationale Dialog -->
     <!-- XHED: Dialog headline QR Scan permission rationale  -->
     <string name="submission_qr_code_scan_permission_rationale_dialog_headline">"Kamera-Zugriff benötigt"</string>
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index dd547438d..859d05a8b 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -772,6 +772,15 @@
     <!-- XBUT: Positive button for submission tan redeemed -->
     <string name="submission_error_dialog_web_tan_redeemed_button_positive">"OK"</string>
 
+    <!-- XHED: Dialog title for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_title">"Wollen Sie wirklich abbrechen?"</string>
+    <!-- XMSG: Dialog body for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_body">"Ihre bisherigen Angaben werden nicht gespeichert."</string>
+    <!-- XBUT: Positive button for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_button_positive">"Ja"</string>
+    <!-- XBUT: Negative button for keys submission process cancellation -->
+    <string name="submission_error_dialog_confirm_cancellation_button_negative">"Nein"</string>
+
     <!-- Permission Rationale Dialog -->
     <!-- XHED: Dialog headline QR Scan permission rationale  -->
     <string name="submission_qr_code_scan_permission_rationale_dialog_headline">"Camera authorization required"</string>
-- 
GitLab