From 1fc6e1873869de8287f1fb4f62241b4c926a6f62 Mon Sep 17 00:00:00 2001
From: Philipp Woessner <philipp.woessner@sap.com>
Date: Tue, 14 Jul 2020 16:09:47 +0200
Subject: [PATCH] added onetime dialog explaining the risk calculation

---
 .../ui/main/MainFragment.kt                   | 50 +++++++++++++++++++
 .../ui/main/MainFragment.kt                   | 50 +++++++++++++++++++
 .../de/rki/coronawarnapp/storage/LocalData.kt | 28 +++++++++++
 .../src/main/res/values-de/strings.xml        |  5 ++
 .../src/main/res/values-en/strings.xml        |  4 ++
 .../src/main/res/values/strings.xml           |  7 +++
 6 files changed, 144 insertions(+)

diff --git a/Corona-Warn-App/src/device/java/de.rki.coronawarnapp/ui/main/MainFragment.kt b/Corona-Warn-App/src/device/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
index 51c9fc97b..aee7b60c0 100644
--- a/Corona-Warn-App/src/device/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
+++ b/Corona-Warn-App/src/device/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
@@ -8,15 +8,22 @@ import android.view.accessibility.AccessibilityEvent
 import android.widget.PopupMenu
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.lifecycleScope
 import androidx.navigation.fragment.findNavController
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentMainBinding
+import de.rki.coronawarnapp.risk.TimeVariables
+import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.timer.TimerHelper
 import de.rki.coronawarnapp.ui.doNavigate
 import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel
 import de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel
 import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel
+import de.rki.coronawarnapp.util.DialogHelper
 import de.rki.coronawarnapp.util.ExternalActionHelper
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 
 /**
  * After the user has finished the onboarding this fragment will be the heart of the application.
@@ -62,6 +69,8 @@ class MainFragment : Fragment() {
         super.onViewCreated(view, savedInstanceState)
         setButtonOnClickListener()
         setContentDescription()
+        
+        showOneTimeTracingExplanationDialog()
     }
 
     override fun onResume() {
@@ -169,4 +178,45 @@ class MainFragment : Fragment() {
         }
         popup.show()
     }
+
+    private fun showOneTimeTracingExplanationDialog() {
+
+        // check if the dialog explaining the tracing time was already shown
+        if (!LocalData.tracingExplanationDialogWasShown()) {
+
+
+            val activity = this.requireActivity()
+
+            lifecycleScope.launch {
+
+                // get all text strings and the current active tracing time
+                val infoPeriodLogged =
+                    getString(R.string.risk_details_information_body_period_logged)
+                val infoPeriodLoggedAssessment =
+                    getString(
+                        R.string.risk_details_information_body_period_logged_assessment,
+                        (TimeVariables.getActiveTracingDaysInRetentionPeriod()).toString()
+                    )
+                val infoFAQ = getString(R.string.risk_details_explanation_dialog_faq_body)
+
+                withContext(Dispatchers.Main) {
+
+                    // display the dialog
+                    DialogHelper.showDialog(
+                        DialogHelper.DialogInstance(
+                            activity,
+                            getString(R.string.risk_details_explanation_dialog_title),
+                            "$infoPeriodLogged\n\n$infoPeriodLoggedAssessment\n\n$infoFAQ",
+                            getString(R.string.errors_generic_button_positive),
+                            null,
+                            null,
+                            {
+                                LocalData.tracingExplanationDialogWasShown(true)
+                            },
+                            {}
+                        ))
+                }
+            }
+        }
+    }
 }
diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
index 4c4dfe9d4..8da604ae8 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt
@@ -8,15 +8,22 @@ import android.view.accessibility.AccessibilityEvent
 import android.widget.PopupMenu
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.lifecycleScope
 import androidx.navigation.fragment.findNavController
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentMainBinding
+import de.rki.coronawarnapp.risk.TimeVariables
+import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.timer.TimerHelper
 import de.rki.coronawarnapp.ui.doNavigate
 import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel
 import de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel
 import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel
+import de.rki.coronawarnapp.util.DialogHelper
 import de.rki.coronawarnapp.util.ExternalActionHelper
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 
 /**
  * After the user has finished the onboarding this fragment will be the heart of the application.
@@ -61,6 +68,8 @@ class MainFragment : Fragment() {
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setButtonOnClickListener()
+
+        showOneTimeTracingExplanationDialog()
     }
 
     override fun onResume() {
@@ -174,4 +183,45 @@ class MainFragment : Fragment() {
         }
         popup.show()
     }
+
+    private fun showOneTimeTracingExplanationDialog() {
+
+        // check if the dialog explaining the tracing time was already shown
+        if (!LocalData.tracingExplanationDialogWasShown()) {
+
+
+            val activity = this.requireActivity()
+
+            lifecycleScope.launch {
+
+                // get all text strings and the current active tracing time
+                val infoPeriodLogged =
+                    getString(R.string.risk_details_information_body_period_logged)
+                val infoPeriodLoggedAssessment =
+                    getString(
+                        R.string.risk_details_information_body_period_logged_assessment,
+                        (TimeVariables.getActiveTracingDaysInRetentionPeriod()).toString()
+                    )
+                val infoFAQ = getString(R.string.risk_details_explanation_dialog_faq_body)
+
+                withContext(Dispatchers.Main) {
+
+                    // display the dialog
+                    DialogHelper.showDialog(
+                        DialogHelper.DialogInstance(
+                            activity,
+                            getString(R.string.risk_details_explanation_dialog_title),
+                            "$infoPeriodLogged\n\n$infoPeriodLoggedAssessment\n\n$infoFAQ",
+                            getString(R.string.errors_generic_button_positive),
+                            null,
+                            null,
+                            {
+                                LocalData.tracingExplanationDialogWasShown(true)
+                            },
+                            {}
+                        ))
+                }
+            }
+        }
+    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
index 802451cdb..feb1b22d4 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
@@ -300,6 +300,34 @@ object LocalData {
             )
         }
 
+    /**
+     * Gets the boolean if the user has seen the explanation dialog for the
+     * risk level tracing days
+     * from the EncryptedSharedPrefs
+     *
+     * @return boolean if user is onboarded
+     */
+    fun tracingExplanationDialogWasShown(): Boolean = getSharedPreferenceInstance().getBoolean(
+        CoronaWarnApplication.getAppContext()
+            .getString(R.string.preference_risk_days_explanation_shown),
+        false
+    )
+
+    /**
+     * Sets the boolean if the user has seen the explanation dialog for the
+     * risk level tracing days
+     * from the EncryptedSharedPrefs
+     *
+     * @param value boolean if onboarding was completed
+     */
+    fun tracingExplanationDialogWasShown(value: Boolean) =
+        getSharedPreferenceInstance().edit(true) {
+            putBoolean(
+                CoronaWarnApplication.getAppContext()
+                    .getString(R.string.preference_risk_days_explanation_shown), value
+            )
+        }
+
     /****************************************************
      * SERVER FETCH DATA
      ****************************************************/
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 8bbd25371..212f6cd6c 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -325,6 +325,11 @@
     <!-- XACT: risk details page title -->
     <string name="risk_details_accessibility_title">"Ihr Risikostatus"</string>
 
+    <!-- XHED: one time risk explanation dialog title  -->
+    <string name="risk_details_explanation_dialog_title">Information zur Funktionsweise der Risiko-Ermittlung</string>
+    <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information-->
+    <string name="risk_details_explanation_dialog_faq_body">Weitere Informationen finden Sie in den FAQ.</string>
+
     <!-- ####################################
               Onboarding
     ###################################### -->
diff --git a/Corona-Warn-App/src/main/res/values-en/strings.xml b/Corona-Warn-App/src/main/res/values-en/strings.xml
index cddf433e1..4b3a3abf7 100644
--- a/Corona-Warn-App/src/main/res/values-en/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-en/strings.xml
@@ -325,6 +325,10 @@
     <!-- XACT: risk details page title -->
     <string name="risk_details_accessibility_title">"Your Risk Status"</string>
 
+    <!-- XHED: one time risk explanation dialog title  -->
+    <string name="risk_details_explanation_dialog_title">Information about exposure logging functionality</string>
+    <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information-->
+    <string name="risk_details_explanation_dialog_faq_body">For further information, please see our FAQ page.</string>
     <!-- ####################################
               Onboarding
     ###################################### -->
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index cddf433e1..d99a84a7c 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -69,6 +69,8 @@
     <string name="preference_polling_test_result_started"><xliff:g id="preference">"preference_polling_test_result_started"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_test_result_notification"><xliff:g id="preference">"preference_test_result_notification"</xliff:g></string>
+    <!-- NOTR -->
+    <string name="preference_risk_days_explanation_shown"><xliff:g id="preference">"preference_risk_days_explanation_shown"</xliff:g></string>
 
     <!-- ####################################
                      Generics
@@ -325,6 +327,11 @@
     <!-- XACT: risk details page title -->
     <string name="risk_details_accessibility_title">"Your Risk Status"</string>
 
+    <!-- XHED: one time risk explanation dialog title  -->
+    <string name="risk_details_explanation_dialog_title">Information about exposure logging functionality</string>
+    <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information-->
+    <string name="risk_details_explanation_dialog_faq_body">For further information, please see our FAQ page.</string>
+
     <!-- ####################################
               Onboarding
     ###################################### -->
-- 
GitLab