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