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 51c9fc97be080d39293ba1e9099df08ef45a59db..ec73b7aa81b7d70e37e0512d2da936a714f5453d 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,44 @@ 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 4c4dfe9d46a2baae1b17f866be80b15b6233dc8c..8da604ae85e0f6f7e5235eb8553ce753c9187612 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 3cbaed4af3455d70d20127fd23f56956c8939692..68de331ba5e84c2c4ae0b29d3999bc98f137718a 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/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt index c152e9cea88e1db14230436bfb549331cddbf3d8..7672309236548ea35a4f606bc6b31dc401394883 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt @@ -10,6 +10,7 @@ import android.view.View import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R import de.rki.coronawarnapp.risk.RiskLevelConstants +import de.rki.coronawarnapp.risk.TimeVariables import de.rki.coronawarnapp.util.TimeAndDateExtensions.millisecondsToHMS import java.util.Date @@ -186,22 +187,52 @@ fun formatRiskActiveTracingDaysInRetentionPeriod( return when (riskLevelScore) { RiskLevelConstants.INCREASED_RISK -> { if (showDetails) { + if (activeTracingDaysInRetentionPeriod < TimeVariables.getDefaultRetentionPeriodInDays()) { + appContext.getString( + R.string.risk_card_body_saved_days + ) + .format(activeTracingDaysInRetentionPeriod) + } else { + appContext.getString( + R.string.risk_card_body_saved_days_full + ) + } + } else { + "" + } + } + RiskLevelConstants.LOW_LEVEL_RISK -> + if (activeTracingDaysInRetentionPeriod < TimeVariables.getDefaultRetentionPeriodInDays()) { appContext.getString( R.string.risk_card_body_saved_days ) .format(activeTracingDaysInRetentionPeriod) } else { - "" + appContext.getString( + R.string.risk_card_body_saved_days_full + ) } - } - RiskLevelConstants.LOW_LEVEL_RISK -> appContext.getString( - R.string.risk_card_body_saved_days - ) - .format(activeTracingDaysInRetentionPeriod) + else -> "" } } +/** + * Formats the risk logged period card text display of tracing active duration in days depending on risk level + * Displayed in case riskLevel is High and Low level + * + * @param activeTracingDaysInRetentionPeriod + * @return + */ +fun formatRiskActiveTracingDaysInRetentionPeriodLogged( + activeTracingDaysInRetentionPeriod: Long +): String { + val appContext = CoronaWarnApplication.getAppContext() + return appContext.getString( + R.string.risk_details_information_body_period_logged_assessment) + .format(activeTracingDaysInRetentionPeriod) +} + fun formatRelativeDateTimeString(appContext: Context, date: Date): CharSequence? = DateUtils.getRelativeDateTimeString( appContext, @@ -547,6 +578,18 @@ fun formatVisibilityBehavior(riskLevelScore: Int?): Int = fun formatVisibilityBehaviorIncreasedRisk(riskLevelScore: Int?): Int = formatVisibility(riskLevelScore == RiskLevelConstants.INCREASED_RISK) +/** + * Format the risk details period logged card display depending on risk level + * applied in case of low and high risk levels + * + * @param riskLevelScore + * @return + */ +fun formatVisibilityBehaviorPeriodLogged(riskLevelScore: Int?): Int = + formatVisibility( + riskLevelScore == RiskLevelConstants.INCREASED_RISK || + riskLevelScore == RiskLevelConstants.LOW_LEVEL_RISK) + /** * Formats the risk details suggested behavior icon color depending on risk level * This special handling is required due to light / dark mode differences and switches diff --git a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml index 0cfb4d8f442bf43a51251bdda27219865c71ec95..c7704aa987ce2de32f7c4985deb764c0c909a9f5 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml @@ -120,13 +120,14 @@ <TextView android:id="@+id/risk_details_behavior_headline" style="@style/headline5" - android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_medium" - android:text="@string/risk_details_headline_behavior" + android:layout_marginTop="28dp" + android:accessibilityHeading="true" android:focusable="true" + android:text="@string/risk_details_headline_behavior" app:layout_constraintEnd_toStartOf="@+id/guideline_end" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/risk_details_risk_card" /> @@ -179,6 +180,19 @@ </androidx.constraintlayout.widget.ConstraintLayout> + <include + android:id="@+id/risk_details_period_logged_card" + layout="@layout/include_risk_details_period_logged_card" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" + android:visibility="@{FormatterRiskHelper.formatVisibilityBehaviorPeriodLogged(tracingViewModel.riskLevel)}" + app:layout_constraintEnd_toStartOf="@+id/guideline_end" + app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintTop_toBottomOf="@id/risk_details_behavior_wrapper" + app:tracingViewModel="@{tracingViewModel}" /> + <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/risk_details_body" style="@style/greyBodyBackground" @@ -186,7 +200,7 @@ android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/risk_details_behavior_wrapper"> + app:layout_constraintTop_toBottomOf="@id/risk_details_period_logged_card"> <TextView android:id="@+id/risk_details_information_headline" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml index 151d9c42be85f8a0be11157d0222a65a7dace6f7..80e975524092a9ed1ee1aba5750c2b9d6bbc872b 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml @@ -113,40 +113,18 @@ app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toTopOf="parent" /> - <androidx.constraintlayout.widget.ConstraintLayout + <include android:id="@+id/settings_tracing_status_tracing" - android:layout_width="@dimen/match_constraint" + layout="@layout/include_setting_tracing_period_logged" + android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_tiny" - android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" android:focusable="true" + android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" - app:layout_constraintTop_toTopOf="parent"> - - <TextView - android:id="@+id/settings_tracing_status_tracing_body" - style="@style/body2Medium" - android:layout_width="@dimen/match_constraint" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/spacing_small" - android:text="@{FormatterSettingsHelper.formatTracingStatusBody(tracingViewModel.activeTracingDaysInRetentionPeriod)}" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/settings_tracing_status_tracing_circle_progress" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - <de.rki.coronawarnapp.ui.view.CircleProgress - android:id="@+id/settings_tracing_status_tracing_circle_progress" - android:layout_width="@dimen/spacing_huge" - android:layout_height="@dimen/spacing_huge" - android:importantForAccessibility="no" - app:circleWidth="@dimen/circle_large_width" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:progress="@{tracingViewModel.activeTracingDaysInRetentionPeriod}" /> - - </androidx.constraintlayout.widget.ConstraintLayout> + app:layout_constraintTop_toTopOf="parent" + app:tracingViewModel="@{tracingViewModel}" + app:riskLevel="@{tracingViewModel.riskLevel}" /> <include layout="@layout/merge_guidelines_card" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_card.xml b/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_card.xml new file mode 100644 index 0000000000000000000000000000000000000000..06b18535de76944ebe0e9f54f6b85d114f13671f --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_card.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterRiskHelper" /> + + <variable + name="tracingViewModel" + type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" /> + + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:focusable="true"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/risk_details_period_logged_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_tiny" + android:focusable="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <TextView + android:id="@+id/risk_details_period_logged_headline" + style="@style/headline5" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="false" + android:text="@string/risk_details_headline_period_logged" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/risk_details_period_logged_subtitle" + style="@style/subtitle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_tiny" + android:focusable="false" + android:text="@string/risk_details_subtitle_period_logged" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/risk_details_period_logged_headline" /> + + <TextView + android:id="@+id/risk_details_period_logged_body_notice" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" + android:text="@string/risk_details_information_body_period_logged" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/risk_details_period_logged_subtitle" /> + </androidx.constraintlayout.widget.ConstraintLayout> + + <include + android:id="@+id/risk_details_period_logged_progress" + layout="@layout/include_risk_details_period_logged_progress" + android:layout_width="0dp" + android:layout_marginTop="@dimen/spacing_normal" + android:layout_height="wrap_content" + android:focusable="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/risk_details_period_logged_layout" + app:riskLevel="@{tracingViewModel.riskLevel}" + app:tracingViewModel="@{tracingViewModel}" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_progress.xml b/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_progress.xml new file mode 100644 index 0000000000000000000000000000000000000000..23ad95cdd56678d6d50ed8a243f3ba1bfe9567ca --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_risk_details_period_logged_progress.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterRiskHelper" /> + + <variable + name="riskLevel" + type="Integer" /> + + <variable + name="tracingViewModel" + type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" /> + + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" + app:layout_constraintTop_toTopOf="parent"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/risk_details_behavior_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <de.rki.coronawarnapp.ui.view.CircleProgress + android:id="@+id/risk_details_investigation_period_circle_progress" + android:layout_width="@dimen/spacing_huge" + android:layout_height="@dimen/spacing_huge" + android:importantForAccessibility="no" + app:circleWidth="@dimen/circle_large_width" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:progress="@{tracingViewModel.activeTracingDaysInRetentionPeriod}" /> + </androidx.constraintlayout.widget.ConstraintLayout> + + <TextView + style="@style/subtitle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/spacing_small" + android:text="@{FormatterRiskHelper.formatRiskActiveTracingDaysInRetentionPeriodLogged(tracingViewModel.activeTracingDaysInRetentionPeriod)}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/risk_details_behavior_icon" + app:layout_constraintTop_toTopOf="parent" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/include_setting_tracing_period_logged.xml b/Corona-Warn-App/src/main/res/layout/include_setting_tracing_period_logged.xml new file mode 100644 index 0000000000000000000000000000000000000000..0d07d89b40534f306ed1c8e6d99d386f1c0fc130 --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_setting_tracing_period_logged.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:tools="http://schemas.android.com/tools" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterRiskHelper" /> + + <variable + name="riskLevel" + type="Integer" /> + + <variable + name="tracingViewModel" + type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" /> + + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:focusable="true"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/risk_details_period_logged_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_tiny" + android:focusable="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <TextView + android:id="@+id/risk_details_period_logged_body_notice" + style="@style/subtitleMedium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:focusable="true" + android:text="@string/risk_details_information_body_period_logged" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + </androidx.constraintlayout.widget.ConstraintLayout> + + <include + layout="@layout/include_risk_details_period_logged_progress" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/risk_details_period_logged_layout" + app:riskLevel="@{tracingViewModel.riskLevel}" + app:tracingViewModel="@{tracingViewModel}" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file 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 f66dd130a451889f72eca033fa0cf9c31fe71f55..e3c1c90971371799107a6d796646fe59f4d93eea 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/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 @@ -141,7 +143,9 @@ <item quantity="many">"%1$s Risiko-Begegnungen"</item> </plurals> <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"%1$s von 14 Tagen aktiv"</string> + <string name="risk_card_body_saved_days">"Risiko-Ermittlung war für %1$s der letzten 14 Tage aktiv"</string> + <!-- XTXT: risk card- tracing active for 14 out of 14 days --> + <string name="risk_card_body_saved_days_full">"Risiko-Ermittlung dauerhaft aktiv"</string> <!-- XTXT; risk card - no update done yet --> <string name="risk_card_body_not_yet_fetched">"Begegnungen wurden noch nicht überprüft."</string> <!-- XTXT: risk card - last successful update --> @@ -303,6 +307,14 @@ <string name="risk_details_behavior_increased_body_3">"Ihr Gesundheitsamt"</string> <!-- XHED: risk details - infection risk headline, below behaviors --> <string name="risk_details_headline_infection_risk">"Infektionsrisiko"</string> + <!-- XHED: risk details - infection period logged headling, below behaviors --> + <string name="risk_details_headline_period_logged">"Ermittlungszeitraum"</string> + <!-- XHED: risk details - infection period logged headling, below behaviors --> + <string name="risk_details_subtitle_period_logged">"Dieser Zeitraum wird berücksichtigt"</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged">"Die Berechnung des Infektionsrisikos kann nur für die Zeiträume erfolgen, an denen die Risiko-Ermittlung aktiv war. Die Risiko-Ermittlung sollte daher dauerhaft aktiv sein"</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged_assessment">"Für Ihre Risiko-Ermittlung wird nur der Zeitraum der letzten 14 Tage betrachtet. In diesem Zeitraum war Ihre Risiko-Ermittlung für eine Gesamtdauer von %1$s Tagen aktiv. Ältere Tage werden automatisch gelöscht, da sie aus Sicht des Infektionsschutzes nicht mehr relevant sind."</string> <!-- XHED: risk details - how your risk level was calculated, below behaviors --> <string name="risk_details_subtitle_infection_risk_past">"So wurde Ihr Risiko ermittelt"</string> <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> @@ -331,6 +343,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 6ac5e473c020eb05bc964fa0fa1c1b5889e3d2b6..191f504a11e0df14d69cdc7f7ba6fa6db54c04e8 100644 --- a/Corona-Warn-App/src/main/res/values-en/strings.xml +++ b/Corona-Warn-App/src/main/res/values-en/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 @@ -141,7 +143,9 @@ <item quantity="many">"%1$s exposures"</item> </plurals> <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"%1$s of 14 days active"</string> + <string name="risk_card_body_saved_days">"Exposure logging was active for %1$s of the last 14 days"</string> + <!-- XTXT: risk card- tracing active for 14 out of 14 days --> + <string name="risk_card_body_saved_days_full">Exposure logging permanently active</string> <!-- XTXT; risk card - no update done yet --> <string name="risk_card_body_not_yet_fetched">"Encounters have not yet been checked."</string> <!-- XTXT: risk card - last successful update --> @@ -301,6 +305,14 @@ <string name="risk_details_behavior_increased_body_3">"Your public health authority"</string> <!-- XHED: risk details - infection risk headline, below behaviors --> <string name="risk_details_headline_infection_risk">"Risk of Infection"</string> + <!-- XHED: risk details - infection period logged heading, below behaviors --> + <string name="risk_details_headline_period_logged">"Period logged"</string> + <!-- XHED: risk details - infection period logged subtitle, below behaviors --> + <string name="risk_details_subtitle_period_logged">"This period is included in the calculation."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged">"Your risk of infection can be calculated only for periods during which exposure logging was active. The logging feature should therefore remain active permanently."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged_assessment">"Exposure logging covers the last 14 days. During this time, the logging feature on your device was active for %1$s days. The app automatically deletes older logs, as these are no longer relevant for infection prevention."</string> <!-- XHED: risk details - how your risk level was calculated, below behaviors --> <string name="risk_details_subtitle_infection_risk_past">"This is how your risk was calculated"</string> <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> @@ -329,6 +341,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-tr/strings.xml b/Corona-Warn-App/src/main/res/values-tr/strings.xml index e206399a85f60153c11ee22f7bf493af39941959..3f9f3d558e9272b56f0595884817b8e05bcbbc79 100644 --- a/Corona-Warn-App/src/main/res/values-tr/strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/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 @@ -135,7 +137,9 @@ <item quantity="other">"%1$s maruz kalma"</item> </plurals> <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"%1$s/14 gündür etkin"</string> + <string name="risk_card_body_saved_days">"Maruz kalma günlüğü son 14 günde %1$s etkindi."</string> + <!-- XTXT: risk card- tracing active for 14 out of 14 days --> + <string name="risk_card_body_saved_days_full">Maruz kalma günlüğü sürekli etkin</string> <!-- XTXT; risk card - no update done yet --> <string name="risk_card_body_not_yet_fetched">"Karşılaşmalar henüz kontrol edilmedi."</string> <!-- XTXT: risk card - last successful update --> @@ -291,6 +295,14 @@ <string name="risk_details_behavior_increased_body_3">"Kamu sağlığı yetkiliniz"</string> <!-- XHED: risk details - infection risk headline, below behaviors --> <string name="risk_details_headline_infection_risk">"Enfeksiyon Riski"</string> + <!-- XHED: risk details - infection period logged heading, below behaviors --> + <string name="risk_details_headline_period_logged">"Dönem günlüğe kaydedildi"</string> + <!-- XHED: risk details - infection period logged subtitle, below behaviors --> + <string name="risk_details_subtitle_period_logged">"Bu dönem hesaplamaya dahil edildi."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged">"Enfeksiyon riskiniz yalnızca maruz kalma günlüğünün etkin olduğu dönemler için hesaplanabilir. Bu nedenle günlüğe kaydetme özelliğinin sürekli etkin kalması gerekir."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged_assessment">"Maruz kalma günlüğü son 14 günü kapsar. Bu süre boyunca cihazınızdaki günlüğe kaydetme özelliği %1$s gün etkindi. Uygulama, enfeksiyondan korunma için artık ilgili olmadığından daha eski kayıtları otomatik olarak siler."</string> <!-- XHED: risk details - how your risk level was calculated, below behaviors --> <string name="risk_details_subtitle_infection_risk_past">"Riskiniz bu şekilde hesaplandı"</string> <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> @@ -315,6 +327,10 @@ <!-- XACT: risk details page title --> <string name="risk_details_accessibility_title">"Risk Durumunuz"</string> + <!-- XHED: one time risk explanation dialog title --> + <string name="risk_details_explanation_dialog_title">Daha fazla bilgi için lütfen SSS sayfamıza bakın.</string> + <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information--> + <string name="risk_details_explanation_dialog_faq_body">Maruz kalma işlevi hakkında bilgi.</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 243a484df3f48837237b879d78bf3edf68f7015e..46ee2e7c3b4ef0d67145971db0ee58b100a0e35b 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 @@ -137,7 +139,9 @@ <item quantity="other">"%1$s exposures"</item> </plurals> <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"%1$s of 14 days active"</string> + <string name="risk_card_body_saved_days">"Exposure logging was active for %1$s of the last 14 days"</string> + <!-- XTXT: risk card- tracing active for 14 out of 14 days --> + <string name="risk_card_body_saved_days_full">Exposure logging permanently active</string> <!-- XTXT; risk card - no update done yet --> <string name="risk_card_body_not_yet_fetched">"Encounters have not yet been checked."</string> <!-- XTXT: risk card - last successful update --> @@ -295,6 +299,14 @@ <string name="risk_details_behavior_increased_body_3">"Your public health authority"</string> <!-- XHED: risk details - infection risk headline, below behaviors --> <string name="risk_details_headline_infection_risk">"Risk of Infection"</string> + <!-- XHED: risk details - infection period logged heading, below behaviors --> + <string name="risk_details_headline_period_logged">"Period logged"</string> + <!-- XHED: risk details - infection period logged subtitle, below behaviors --> + <string name="risk_details_subtitle_period_logged">"This period is included in the calculation."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged">"Your risk of infection can be calculated only for periods during which exposure logging was active. The logging feature should therefore remain active permanently."</string> + <!-- XHED: risk details - infection period logged information body, below behaviors --> + <string name="risk_details_information_body_period_logged_assessment">"Exposure logging covers the last 14 days. During this time, the logging feature on your device was active for %1$s days. The app automatically deletes older logs, as these are no longer relevant for infection prevention."</string> <!-- XHED: risk details - how your risk level was calculated, below behaviors --> <string name="risk_details_subtitle_infection_risk_past">"This is how your risk was calculated"</string> <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> @@ -319,6 +331,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 ###################################### -->