From 65b679e8eba93ea04df9e38cc86c592bfa5172b6 Mon Sep 17 00:00:00 2001 From: harambasicluka <64483219+harambasicluka@users.noreply.github.com> Date: Thu, 11 Jun 2020 23:05:48 +0200 Subject: [PATCH] Fix: a18y (#399) * a18y * add headings, fix silent pages, fix big chunks * a18y * undo changes * onboarding * changed accessibility event * string update * more stuff is focusable * switches bug fix * more stuff is focusable * fix risk levels * fixed switch bug * ktlint format * removed left over onStarts * removed testing value from updateChecker * renaming * focus * header guideline right * fixed wrong constraint * translate url * le Co-authored-by: Queenhymon <quynh.nguyen@sap.com> --- .../TestRiskLevelCalculation.kt | 2 -- .../ui/main/MainFragment.kt | 14 ++-------- .../res/layout/fragment_test_for_a_p_i.xml | 6 ++++ .../fragment_test_risk_level_calculation.xml | 7 +++++ .../information/InformationAboutFragment.kt | 7 +---- .../information/InformationContactFragment.kt | 7 +---- .../ui/information/InformationFragment.kt | 7 +---- .../information/InformationLegalFragment.kt | 7 +---- .../information/InformationPrivacyFragment.kt | 7 +---- .../InformationTechnicalFragment.kt | 7 +---- .../information/InformationTermsFragment.kt | 7 +---- .../ui/main/MainOverviewFragment.kt | 7 +---- .../ui/main/MainShareFragment.kt | 6 ++++ .../ui/onboarding/OnboardingFragment.kt | 7 +---- .../OnboardingNotificationsFragment.kt | 7 +---- .../onboarding/OnboardingPrivacyFragment.kt | 7 +---- .../ui/onboarding/OnboardingTestFragment.kt | 7 +---- .../onboarding/OnboardingTracingFragment.kt | 7 +---- .../ui/riskdetails/RiskDetailsFragment.kt | 7 +---- .../ui/settings/SettingsFragment.kt | 3 ++ .../settings/SettingsNotificationFragment.kt | 16 ++++------- .../ui/settings/SettingsResetFragment.kt | 6 ++++ .../ui/settings/SettingsTracingFragment.kt | 21 +++++++------- .../submission/SubmissionContactFragment.kt | 7 +---- .../SubmissionDispatcherFragment.kt | 7 +---- .../ui/submission/SubmissionDoneFragment.kt | 6 ++++ .../ui/submission/SubmissionIntroFragment.kt | 7 +---- .../SubmissionQRCodeScanFragment.kt | 2 ++ ...ssionResultPositiveOtherWarningFragment.kt | 2 ++ .../ui/submission/SubmissionTanFragment.kt | 7 +---- .../SubmissionTestResultFragment.kt | 2 ++ .../util/formatter/FormatterSettingsHelper.kt | 9 ++++++ .../formatter/FromatterAccessibilityHelper.kt | 17 +++++++++++ .../main/res/layout/fragment_information.xml | 1 + .../res/layout/fragment_information_about.xml | 10 ++++--- .../layout/fragment_information_contact.xml | 7 +++-- .../res/layout/fragment_information_legal.xml | 9 ++++++ .../layout/fragment_information_privacy.xml | 1 + .../layout/fragment_information_technical.xml | 2 +- .../res/layout/fragment_information_terms.xml | 1 + .../src/main/res/layout/fragment_main.xml | 11 ++++++-- .../res/layout/fragment_main_overview.xml | 28 +++++++++++++++---- .../main/res/layout/fragment_main_share.xml | 4 ++- .../fragment_onboarding_notifications.xml | 1 + .../layout/fragment_onboarding_privacy.xml | 1 + .../res/layout/fragment_onboarding_test.xml | 1 + .../layout/fragment_onboarding_tracing.xml | 1 + .../main/res/layout/fragment_risk_details.xml | 23 +++++++-------- .../src/main/res/layout/fragment_settings.xml | 3 ++ .../fragment_settings_notifications.xml | 3 ++ .../res/layout/fragment_settings_reset.xml | 3 ++ .../res/layout/fragment_settings_tracing.xml | 6 ++++ .../res/layout/fragment_submission_done.xml | 2 ++ .../res/layout/fragment_submission_intro.xml | 1 + ...ment_submission_positive_other_warning.xml | 8 ++++-- .../fragment_submission_qr_code_scan.xml | 2 ++ .../fragment_submission_test_result.xml | 2 ++ .../main/res/layout/include_button_icon.xml | 4 ++- .../res/layout/include_dispatcher_card.xml | 1 + .../src/main/res/layout/include_header.xml | 10 ++++++- .../layout/include_information_details.xml | 8 +++++- .../main/res/layout/include_main_faq_card.xml | 2 ++ .../layout/include_main_overview_glossary.xml | 1 + .../layout/include_main_overview_segment.xml | 1 + .../res/layout/include_navigation_row.xml | 3 +- .../main/res/layout/include_onboarding.xml | 18 +++++++----- .../main/res/layout/include_privacy_card.xml | 3 ++ .../res/layout/include_risk_card_header.xml | 1 + .../include_risk_details_behavior_row.xml | 1 - .../layout/include_settings_switch_row.xml | 3 ++ .../layout/include_step_entry_simple_body.xml | 1 + .../res/layout/include_submission_contact.xml | 13 ++++++--- .../layout/include_submission_dispatcher.xml | 5 ++++ .../res/layout/include_submission_done.xml | 4 ++- .../include_submission_done_content.xml | 3 ++ .../include_submission_done_further_info.xml | 3 ++ .../res/layout/include_submission_intro.xml | 14 +++++----- ...lude_submission_positive_other_warning.xml | 3 ++ ...include_submission_status_card_content.xml | 1 + .../include_submission_status_card_done.xml | 1 + ...nclude_submission_status_card_fetching.xml | 1 + ...nclude_submission_status_card_positive.xml | 2 ++ ...de_submission_status_card_unregistered.xml | 1 + .../layout/include_submission_test_result.xml | 1 + ...sion_test_result_negative_further_info.xml | 1 + .../res/layout/include_test_result_card.xml | 2 ++ .../include_test_result_card_positive.xml | 4 ++- .../layout/include_tracing_status_card.xml | 8 +++++- .../src/main/res/values-de/strings.xml | 2 +- .../src/main/res/values/strings.xml | 13 +++++++-- 90 files changed, 311 insertions(+), 204 deletions(-) create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FromatterAccessibilityHelper.kt diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt b/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt index 83b7d857d..76e9833d4 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt @@ -130,9 +130,7 @@ class TestRiskLevelCalculation : Fragment() { } } - startObserving() - } override fun onResume() { 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 502ba7fe7..4c4dfe9d4 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 @@ -61,7 +61,6 @@ class MainFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setButtonOnClickListener() - setContentDescription() } override fun onResume() { @@ -75,21 +74,12 @@ class MainFragment : Fragment() { TimerHelper.checkManualKeyRetrievalTimer() submissionViewModel.refreshDeviceUIState() tracingViewModel.refreshLastSuccessfullyCalculatedScore() - binding.mainScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.mainScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } override fun onStart() { super.onStart() - binding.mainScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - - private fun setContentDescription() { - val shareButtonString: String = getString(R.string.button_share) - val menuButtonString: String = getString(R.string.button_menu) - val mainCardString: String = getString(R.string.hint_external_webpage) - binding.mainHeaderShare.buttonIcon.contentDescription = shareButtonString - binding.mainHeaderOptionsMenu.buttonIcon.contentDescription = menuButtonString - binding.mainAbout.mainCard.contentDescription = mainCardString + binding.mainScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml index c0b516a9f..ba559e601 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml @@ -36,6 +36,7 @@ <TextView android:id="@+id/label_exposure_summary" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/test_api_exposure_summary_headline" /> @@ -97,6 +98,7 @@ <TextView android:id="@+id/label_my_keys" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" @@ -118,6 +120,7 @@ <TextView android:id="@+id/label_other_keys" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/test_api_body_other_keys" /> @@ -209,18 +212,21 @@ <TextView style="@style/headline4" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="headline4" /> <TextView style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="headline5" /> <TextView style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="headline6" /> diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_risk_level_calculation.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_risk_level_calculation.xml index 60c2ee018..a2fe37033 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_risk_level_calculation.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_risk_level_calculation.xml @@ -35,6 +35,7 @@ <TextView style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Preview (no interaction possible)" /> @@ -105,6 +106,7 @@ <TextView android:id="@+id/label_exposure_summary_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" @@ -119,6 +121,7 @@ <TextView android:id="@+id/label_risk_score_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Risk Score" /> @@ -132,6 +135,7 @@ <TextView android:id="@+id/label_backend_parameters_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Backend Parameters" /> @@ -145,6 +149,7 @@ <TextView android:id="@+id/label_formula_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Used Formula" /> @@ -158,6 +163,7 @@ <TextView android:id="@+id/label_exposure_info_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Exposure Information" /> @@ -171,6 +177,7 @@ <TextView android:id="@+id/label_full_config_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Full Backend Configuration" /> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt index d88206e60..6df694a89 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt @@ -39,14 +39,9 @@ class InformationAboutFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationAboutScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationAboutScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationAboutScrollview.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt index fd26db493..6b351030c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt @@ -41,14 +41,9 @@ class InformationContactFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationContactContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationContactContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationContactContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt index bc14cbf4b..173f6b129 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt @@ -43,14 +43,9 @@ class InformationFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt index cbe86b199..053d1bb2f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt @@ -39,14 +39,9 @@ class InformationLegalFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationLegalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationLegalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationLegalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt index d7ee64f53..c445f900f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt @@ -39,14 +39,9 @@ class InformationPrivacyFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt index eeef00278..a4ee75765 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt @@ -39,14 +39,9 @@ class InformationTechnicalFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationTechnicalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationTechnicalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationTechnicalContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt index ad0a09245..98a4079e6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt @@ -39,14 +39,9 @@ class InformationTermsFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.informationTermsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.informationTermsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.informationTermsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainOverviewFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainOverviewFragment.kt index 4de437340..67b6ebbe8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainOverviewFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainOverviewFragment.kt @@ -43,14 +43,9 @@ class MainOverviewFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.mainOverviewContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.mainOverviewContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.mainOverviewContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt index 42077a648..52c0e3df5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import de.rki.coronawarnapp.R @@ -55,4 +56,9 @@ class MainShareFragment : Fragment() { (activity as MainActivity).goBack() } } + + override fun onResume() { + super.onResume() + binding.mainShareContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt index 13925c877..ace481434 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt @@ -44,13 +44,8 @@ class OnboardingFragment : Fragment() { } } - override fun onStart() { - super.onStart() - binding.onboardingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.onboardingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.onboardingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt index a89d179d5..c6768a15f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt @@ -43,14 +43,9 @@ class OnboardingNotificationsFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.onboardingNotificationsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.onboardingNotificationsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.onboardingNotificationsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt index 9e40aefe0..f15cbfbde 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt @@ -40,14 +40,9 @@ class OnboardingPrivacyFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.onboardingPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.onboardingPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.onboardingPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTestFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTestFragment.kt index a95516e58..2923d9ea0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTestFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTestFragment.kt @@ -40,14 +40,9 @@ class OnboardingTestFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.onboardingTestContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.onboardingTestContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.onboardingTestContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt index 21115e916..23f302095 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt @@ -70,14 +70,9 @@ class OnboardingTracingFragment : Fragment(), setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.onboardingTracingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.onboardingTracingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.onboardingTracingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) resetTracing() } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailsFragment.kt index 8f6f5a752..a36fcd300 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailsFragment.kt @@ -54,11 +54,6 @@ class RiskDetailsFragment : Fragment() { setButtonOnClickListeners() } - override fun onStart() { - super.onStart() - binding.riskDetailsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() // refresh required data @@ -66,7 +61,7 @@ class RiskDetailsFragment : Fragment() { tracingViewModel.refreshExposureSummary() tracingViewModel.refreshLastTimeDiagnosisKeysFetchedDate() TimerHelper.checkManualKeyRetrievalTimer() - binding.riskDetailsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.riskDetailsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListeners() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsFragment.kt index 9460bfe99..3c7e49013 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -59,6 +60,8 @@ class SettingsFragment : Fragment() { settingsViewModel.refreshNotificationsEnabled(requireContext()) settingsViewModel.refreshNotificationsRiskEnabled() settingsViewModel.refreshNotificationsTestEnabled() + + binding.settingsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt index 99ca01e18..2baecf127 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import de.rki.coronawarnapp.databinding.FragmentSettingsNotificationsBinding @@ -52,6 +53,7 @@ class SettingsNotificationFragment : Fragment() { override fun onResume() { super.onResume() + binding.settingsNotificationsContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) // refresh required data settingsViewModel.refreshNotificationsEnabled(requireContext()) settingsViewModel.refreshNotificationsRiskEnabled() @@ -70,18 +72,12 @@ class SettingsNotificationFragment : Fragment() { val goBack = binding.settingsNotificationsHeader.headerButtonBack.buttonIcon // Update Risk - updateRiskNotificationSwitch.setOnCheckedChangeListener { _, _ -> - // android calls this listener also on start, so it has to be verified if the user pressed the switch - if (updateRiskNotificationSwitch.isPressed) { - settingsViewModel.toggleNotificationsRiskEnabled() - } + updateRiskNotificationSwitch.setOnClickListener { + settingsViewModel.toggleNotificationsRiskEnabled() } // Update Test - updateTestNotificationSwitch.setOnCheckedChangeListener { _, _ -> - // android calls this listener also on start, so it has to be verified if the user pressed the switch - if (updateTestNotificationSwitch.isPressed) { - settingsViewModel.toggleNotificationsTestEnabled() - } + updateTestNotificationSwitch.setOnClickListener { + settingsViewModel.toggleNotificationsTestEnabled() } goBack.setOnClickListener { (activity as MainActivity).goBack() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt index cb9ddd031..8bf2871c9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import com.google.android.gms.common.api.ApiException @@ -60,6 +61,11 @@ class SettingsResetFragment : Fragment() { } } + override fun onResume() { + super.onResume() + binding.settingsResetContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } + private fun deleteAllAppContent() { lifecycleScope.launch { try { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt index a1842b998..c2390c539 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope @@ -15,7 +16,6 @@ import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient import de.rki.coronawarnapp.nearby.InternalExposureNotificationPermissionHelper import de.rki.coronawarnapp.storage.LocalData -import de.rki.coronawarnapp.ui.ViewBlocker import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel @@ -72,6 +72,7 @@ class SettingsTracingFragment : Fragment(), super.onResume() // refresh required data tracingViewModel.refreshIsTracingEnabled() + binding.settingsTracingContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -93,23 +94,21 @@ class SettingsTracingFragment : Fragment(), private fun setButtonOnClickListener() { val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch + val back = binding.settingsTracingHeader.headerButtonBack.buttonIcon + val bluetooth = binding.settingsTracingStatusBluetooth.tracingStatusCardButton + val connection = binding.settingsTracingStatusConnection.tracingStatusCardButton internalExposureNotificationPermissionHelper = InternalExposureNotificationPermissionHelper(this, this) - switch.setOnCheckedChangeListener { _, _ -> - // android calls this listener also on start, so it has to be verified if the user pressed the switch - if (switch.isPressed) { - ViewBlocker.runAndBlockInteraction(arrayOf(switch)) { - startStopTracing() - } - } + switch.setOnClickListener { + startStopTracing() } - binding.settingsTracingHeader.headerButtonBack.buttonIcon.setOnClickListener { + back.setOnClickListener { (activity as MainActivity).goBack() } - binding.settingsTracingStatusBluetooth.tracingStatusCardButton.setOnClickListener { + bluetooth.setOnClickListener { ExternalActionHelper.toMainSettings(requireContext()) } - binding.settingsTracingStatusConnection.tracingStatusCardButton.setOnClickListener { + connection.setOnClickListener { ExternalActionHelper.toConnections(requireContext()) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt index d61a15600..de00ac35c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt @@ -41,14 +41,9 @@ class SubmissionContactFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.submissionContactRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.submissionContactRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.submissionContactRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt index dbc66ff10..0ae9e3260 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt @@ -42,14 +42,9 @@ class SubmissionDispatcherFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.submissionDispatcherRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.submissionDispatcherRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.submissionDispatcherRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDoneFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDoneFragment.kt index dfcc635eb..5efab5ef2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDoneFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDoneFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import de.rki.coronawarnapp.databinding.FragmentSubmissionDoneBinding @@ -37,6 +38,11 @@ class SubmissionDoneFragment : Fragment() { setButtonOnClickListener() } + override fun onResume() { + super.onResume() + binding.submissionDoneContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } + private fun setButtonOnClickListener() { binding.submissionDoneHeader.headerButtonBack.buttonIcon.setOnClickListener { findNavController().doNavigate( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionIntroFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionIntroFragment.kt index 5c688523b..3ad69bd6b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionIntroFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionIntroFragment.kt @@ -38,14 +38,9 @@ class SubmissionIntroFragment : Fragment() { setButtonOnClickListener() } - override fun onStart() { - super.onStart() - binding.submissionIntroRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.submissionIntroRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.submissionIntroRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun setButtonOnClickListener() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt index 3a92abbf6..85b652cd9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -185,6 +186,7 @@ class SubmissionQRCodeScanFragment : Fragment() { override fun onResume() { super.onResume() + binding.submissionQrCodeScanContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) if (CameraPermissionHelper.hasCameraPermission(requireActivity())) { binding.submissionQrCodeScanPreview.resume() 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 312e91b41..92c15d7fc 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 @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -41,6 +42,7 @@ class SubmissionResultPositiveOtherWarningFragment : Fragment(), override fun onResume() { super.onResume() + binding.submissionPositiveOtherPrivacyContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) tracingViewModel.refreshIsTracingEnabled() if (submissionRequested && !submissionFailed) { internalExposureNotificationPermissionHelper.requestPermissionToShareKeys() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt index 381ee5152..a1188ed16 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt @@ -120,14 +120,9 @@ class SubmissionTanFragment : Fragment() { }) } - override fun onStart() { - super.onStart() - binding.submissionTanRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) - } - override fun onResume() { super.onResume() - binding.submissionTanRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + binding.submissionTanRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } private fun goBack() = (activity as MainActivity).goBack() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragment.kt index cbea694ff..c1ea49f3e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultFragment.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -105,6 +106,7 @@ class SubmissionTestResultFragment : Fragment() { override fun onResume() { super.onResume() + binding.submissionTestResultContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) submissionViewModel.refreshDeviceUIState() tracingViewModel.refreshIsTracingEnabled() } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt index fbaea2c31..685ab2485 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt @@ -87,6 +87,15 @@ fun formatTracingStatusText(tracing: Boolean, bluetooth: Boolean, connection: Bo } } +/** + * Returns a combined string of subtitle and status for the content description for switches + * + * @param subtitle + * @param status + * @return String + */ +fun formatSwitchContentDescription(subtitle: String, status: String): String = "$subtitle $status" + /** * Format the settings tracing description text display depending on tracing status * diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FromatterAccessibilityHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FromatterAccessibilityHelper.kt new file mode 100644 index 000000000..987e0f5ba --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FromatterAccessibilityHelper.kt @@ -0,0 +1,17 @@ +@file:JvmName("FormatterAccessibilityHelper") + +package de.rki.coronawarnapp.util.formatter + +import de.rki.coronawarnapp.CoronaWarnApplication +import de.rki.coronawarnapp.R + +fun formatSuffix(string: String?, suffix: Int): String { + val appContext = CoronaWarnApplication.getAppContext() + return if (string != null) { + "$string ${appContext.getString(suffix)}" + } else "" +} + +fun formatButton(string: String?): String = formatSuffix(string, R.string.suffix_button) + +fun formatImage(string: String?): String = formatSuffix(string, R.string.suffix_image) diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information.xml b/Corona-Warn-App/src/main/res/layout/fragment_information.xml index edef7239d..299174395 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information.xml @@ -116,6 +116,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@{FormatterInformationHelper.formatVersion()}" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline_body" app:layout_constraintTop_toBottomOf="@+id/information_legal" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml index d07c91a08..e6a996ea3 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml @@ -4,7 +4,9 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:contentDescription="@string/information_about_title" + android:focusable="true"> <include android:id="@+id/information_about_header" @@ -21,7 +23,6 @@ android:id="@+id/information_about_scrollview" android:layout_width="0dp" android:layout_height="0dp" - android:contentDescription="@string/information_about_title" android:fillViewport="true" app:layout_constraintBottom_toBottomOf="@+id/guideline_bottom" app:layout_constraintEnd_toEndOf="parent" @@ -30,8 +31,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <include android:id="@+id/information_about_header_details" @@ -52,6 +52,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_medium" android:text="@string/information_about_body_emphasized" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_about_header_details" /> @@ -63,6 +64,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@string/information_about_body" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_about_body_emphasized" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml index 8d8dafb4e..b90339050 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml @@ -6,6 +6,7 @@ android:id="@+id/information_contact_container" android:layout_width="match_parent" android:layout_height="match_parent" + android:focusable="true" android:contentDescription="@string/information_contact_title"> <include @@ -30,8 +31,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <include android:id="@+id/information_contact_header_details" @@ -59,10 +59,12 @@ <TextView android:id="@+id/information_contact_subtitle_phone" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@string/information_contact_subtitle_phone" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/divider" /> @@ -83,6 +85,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/information_contact_body_phone" + android:focusable="true" app:layout_constraintEnd_toEndOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_contact_navigation_row_phone" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_legal.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_legal.xml index b85d76155..6827fea70 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_legal.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_legal.xml @@ -14,6 +14,7 @@ android:id="@+id/information_legal_container" android:layout_width="match_parent" android:layout_height="match_parent" + android:focusable="true" android:contentDescription="@string/information_legal_title"> <include @@ -61,6 +62,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" android:text="@string/information_legal_body_publisher" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_header_details" /> @@ -71,6 +73,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_medium" + android:focusable="true" app:layout_constraintEnd_toEndOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_body_publisher" /> @@ -78,10 +81,12 @@ <TextView android:id="@+id/information_legal_headline_contact" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@string/information_legal_headline_contact" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_divider_contact" /> @@ -93,6 +98,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" android:text="@string/information_legal_subtitle_contact" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_headline_contact" /> @@ -110,10 +116,12 @@ <TextView android:id="@+id/information_legal_headline_taxid" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:text="@string/information_legal_headline_taxid" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_divider_taxid" /> @@ -125,6 +133,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" android:text="@string/information_legal_subtitle_taxid" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_legal_headline_taxid" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml index 05da54a75..655046eaf 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml @@ -14,6 +14,7 @@ android:id="@+id/information_privacy_container" android:layout_width="match_parent" android:layout_height="match_parent" + android:focusable="true" android:contentDescription="@string/information_privacy_title"> <include diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml index d94919817..fa037a6ad 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml @@ -14,6 +14,7 @@ android:id="@+id/information_technical_container" android:layout_width="match_parent" android:layout_height="match_parent" + android:focusable="true" android:contentDescription="@string/information_technical_title"> <include @@ -31,7 +32,6 @@ android:layout_width="@dimen/match_constraint" android:layout_height="@dimen/match_constraint" android:fillViewport="true" - android:focusable="true" app:layout_constraintBottom_toBottomOf="@+id/guideline_bottom" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml index e4e13e84f..080c8f6df 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml @@ -14,6 +14,7 @@ android:id="@+id/information_terms_container" android:layout_width="match_parent" android:layout_height="match_parent" + android:focusable="true" android:contentDescription="@string/information_terms_title"> <include diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main.xml b/Corona-Warn-App/src/main/res/layout/fragment_main.xml index 6a9bd45d4..0babbd7a7 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_main.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_main.xml @@ -9,6 +9,8 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" /> + <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" /> + <variable name="submissionViewModel" type="de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel" /> @@ -48,9 +50,10 @@ android:id="@+id/main_header_logo" android:layout_width="0dp" android:layout_height="match_parent" - android:importantForAccessibility="no" + android:contentDescription="@{FormatterAccessibilityHelper.formatImage(@string/accessibility_logo)}" android:scaleType="fitStart" android:src="@drawable/ic_main_header" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/main_header_share" app:layout_constraintStart_toStartOf="parent" @@ -61,8 +64,9 @@ layout="@layout/include_button_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:focusable="true" app:icon="@{@drawable/ic_main_share}" - app:iconDescription="@{@string/main_share_title}" + app:iconDescription="@{@string/button_share}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/main_header_options_menu" app:layout_constraintTop_toTopOf="parent" /> @@ -72,8 +76,9 @@ layout="@layout/include_button_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:focusable="true" app:icon="@{@drawable/ic_main_settings}" - app:iconDescription="@{@string/accessibility_menu}" + app:iconDescription="@{@string/button_menu}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main_overview.xml b/Corona-Warn-App/src/main/res/layout/fragment_main_overview.xml index 92c15258c..4805cd6cd 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_main_overview.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_main_overview.xml @@ -66,6 +66,7 @@ app:body="@{@string/main_overview_body_risk}" app:icon="@{@drawable/ic_main_overview_2}" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/main_overview_tracing" app:subtitle="@{@string/main_overview_subtitle_risk}" /> @@ -80,15 +81,29 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/main_overview_risk"> - <include - android:id="@+id/main_overview_risk_subtitle_text" - layout="@layout/include_main_overview_glossary" + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/main_overview_risk_headline" + style="@style/row" android:layout_width="0dp" android:layout_height="wrap_content" + android:paddingTop="@dimen/spacing_small" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:subtitle="@{@string/main_overview_subtitle_risk_levels}" /> + app:layout_constraintTop_toTopOf="parent"> + + <TextView + style="@style/headline6" + android:accessibilityHeading="true" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/guideline_body_title" + android:text="@string/main_overview_subtitle_risk_levels" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + </androidx.constraintlayout.widget.ConstraintLayout> + <include android:id="@+id/main_overview_risk_increased_risk" @@ -99,7 +114,7 @@ app:iconTint="@{@color/colorSemanticHighRisk}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/main_overview_risk_subtitle_text" + app:layout_constraintTop_toBottomOf="@+id/main_overview_risk_headline" app:subtitle="@{@string/main_overview_subtitle_increased_risk}" /> <include @@ -159,6 +174,7 @@ <TextView style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/guideline_body_title" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main_share.xml b/Corona-Warn-App/src/main/res/layout/fragment_main_share.xml index f9b4b42b3..e69e6cfaf 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_main_share.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_main_share.xml @@ -11,8 +11,10 @@ </data> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/main_share_container" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:contentDescription="@string/main_share_title"> <include android:id="@+id/main_share_header" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml index 1800f5105..98934eed2 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml @@ -7,6 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/onboarding_notifications_accessibility_title" + android:focusable="true" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml index 739392b9b..211d7a736 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml @@ -15,6 +15,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/onboarding_privacy_accessibility_title" + android:focusable="true" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml index 8fd19dc34..5a73d2835 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml @@ -7,6 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/onboarding_test_accessibility_title" + android:focusable="true" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml index dca4457c3..c927d4d09 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml @@ -7,6 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/onboarding_tracing_accessibility_title" + android:focusable="true" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout 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 2289e51a0..00cfdb750 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 @@ -61,6 +61,7 @@ <TextView android:id="@+id/risk_details_header_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/guideline_body_title" @@ -99,8 +100,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <include android:id="@+id/risk_details_risk_card" @@ -118,11 +118,12 @@ <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:focusable="false" android:text="@string/risk_details_headline_behavior" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/risk_details_risk_card" /> @@ -133,7 +134,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" - android:focusable="false" + android:focusable="true" android:text="@string/risk_details_subtitle_behavior" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" @@ -154,7 +155,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" + android:focusable="true" android:visibility="@{FormatterRiskHelper.formatVisibilityBehavior(tracingViewModel.riskLevel)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -167,7 +168,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" + android:focusable="true" android:visibility="@{FormatterRiskHelper.formatVisibilityBehaviorIncreasedRisk(tracingViewModel.riskLevel)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -181,7 +182,6 @@ style="@style/greyBodyBackground" android:layout_width="match_parent" 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_behavior_wrapper"> @@ -189,10 +189,11 @@ <TextView android:id="@+id/risk_details_information_headline" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="match_parent" android:layout_height="wrap_content" - android:focusable="false" android:text="@string/risk_details_headline_infection_risk" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -203,8 +204,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" - android:focusable="false" android:text="@string/risk_details_subtitle_infection_risk" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/risk_details_information_headline" /> @@ -215,9 +216,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure)}" android:visibility="@{FormatterHelper.formatVisibilityText(FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure))}" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/risk_details_information_subtitle" /> @@ -228,8 +229,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@string/risk_details_information_body_notice" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/risk_details_information_body" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml index a9e1d1e24..49b89205e 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml @@ -17,6 +17,9 @@ </data> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/settings_container" + android:contentDescription="@string/settings_title" + android:focusable="true" android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml index 0a62638a9..349df6f63 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml @@ -14,6 +14,9 @@ </data> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/settings_notifications_container" + android:contentDescription="@string/settings_notifications_title" + android:focusable="true" android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml index 1c5c5143c..66961944e 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml @@ -3,6 +3,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/settings_reset_container" + android:contentDescription="@string/settings_reset_title" + android:focusable="true" android:layout_width="match_parent" android:layout_height="match_parent"> 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 4e2f001aa..a177b0e9e 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 @@ -19,6 +19,9 @@ </data> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/settings_tracing_container" + android:contentDescription="@string/settings_tracing_title" + android:focusable="true" android:layout_width="match_parent" android:layout_height="match_parent"> @@ -116,6 +119,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" app:layout_constraintTop_toTopOf="parent"> @@ -136,6 +140,7 @@ 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" @@ -165,6 +170,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:text="@string/settings_tracing_body_text" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml index 78b422fa0..92e8e11e3 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_done.xml @@ -4,6 +4,8 @@ xmlns:tools="http://schemas.android.com/tools"> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/submission_done_container" + android:contentDescription="@string/submission_done_title" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_intro.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_intro.xml index 4423f39b4..cf44b0a02 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_intro.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_intro.xml @@ -9,6 +9,7 @@ android:layout_height="match_parent" android:contentDescription="@string/submission_intro_accessibility_title" android:fillViewport="true" + android:focusable="true" tools:context=".ui.submission.SubmissionIntroFragment"> <include diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml index 6a827d2f8..638b1c894 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml @@ -4,6 +4,8 @@ xmlns:tools="http://schemas.android.com/tools"> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/submission_positive_other_privacy_container" + android:contentDescription="@string/submission_positive_other_warning_title" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" @@ -27,9 +29,9 @@ app:layout_constraintBottom_toTopOf="@+id/guideline_action" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_header" - app:layout_constraintVertical_bias="0.0" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_header" + app:layout_constraintVertical_bias="0.0" /> <Button android:id="@+id/submission_positive_other_warning_button_next" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml index 56ff87107..8d9f69c28 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_qr_code_scan.xml @@ -3,6 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/submission_qr_code_scan_container" + android:contentDescription="@string/submission_qr_code_scan_title" android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml index a7368ab3d..3f8a92730 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml @@ -12,6 +12,8 @@ </data> <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/submission_test_result_container" + android:contentDescription="@string/submission_test_result_headline" android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/Corona-Warn-App/src/main/res/layout/include_button_icon.xml b/Corona-Warn-App/src/main/res/layout/include_button_icon.xml index 56a5d6723..ec8918be5 100644 --- a/Corona-Warn-App/src/main/res/layout/include_button_icon.xml +++ b/Corona-Warn-App/src/main/res/layout/include_button_icon.xml @@ -6,6 +6,8 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" /> + <variable name="icon" type="android.graphics.drawable.Drawable" /> @@ -28,8 +30,8 @@ style="@style/icon" android:layout_width="@dimen/icon_size_button" android:layout_height="@dimen/icon_size_button" - android:contentDescription="@{FormatterHelper.formatEmptyString(iconDescription)}" android:src="@{icon}" + android:contentDescription="@{FormatterAccessibilityHelper.formatButton(iconDescription)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml b/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml index 4d500b19e..161d4745b 100644 --- a/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml @@ -30,6 +30,7 @@ <TextView android:id="@+id/dispatcher_card_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginStart="@dimen/spacing_normal" diff --git a/Corona-Warn-App/src/main/res/layout/include_header.xml b/Corona-Warn-App/src/main/res/layout/include_header.xml index 4dcf94459..e30f7bdf8 100644 --- a/Corona-Warn-App/src/main/res/layout/include_header.xml +++ b/Corona-Warn-App/src/main/res/layout/include_header.xml @@ -34,12 +34,13 @@ <TextView android:id="@+id/header_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/guideline_body_title" android:text="@{title}" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toTopOf="parent" tools:text="@string/settings_title" /> @@ -51,6 +52,13 @@ android:orientation="vertical" app:layout_constraintGuide_begin="@dimen/guideline_start" /> + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guideline_end" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_end="@dimen/guideline_end" /> + <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_back" android:layout_width="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/include_information_details.xml b/Corona-Warn-App/src/main/res/layout/include_information_details.xml index 066967d11..36d411bdf 100644 --- a/Corona-Warn-App/src/main/res/layout/include_information_details.xml +++ b/Corona-Warn-App/src/main/res/layout/include_information_details.xml @@ -7,6 +7,8 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" /> + <variable name="illustration" type="android.graphics.drawable.Drawable" /> @@ -32,7 +34,8 @@ android:id="@+id/information_details_header_illustration" android:layout_width="0dp" android:layout_height="wrap_content" - android:contentDescription="@{illustrationDescription}" + android:contentDescription="@{FormatterAccessibilityHelper.formatImage(illustrationDescription)}" + android:focusable="true" android:src="@{illustration}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -50,6 +53,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" + android:accessibilityHeading="true" + android:focusable="true" android:text="@{headline}" android:visibility="@{FormatterHelper.formatVisibilityText(headline)}" app:layout_constraintEnd_toEndOf="@id/guideline_end" @@ -63,6 +68,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_medium" + android:focusable="true" android:text="@{body}" android:visibility="@{FormatterHelper.formatVisibilityText(body)}" app:layout_constraintEnd_toEndOf="@id/guideline_end" diff --git a/Corona-Warn-App/src/main/res/layout/include_main_faq_card.xml b/Corona-Warn-App/src/main/res/layout/include_main_faq_card.xml index 17d2229e0..fbb3dc3ea 100644 --- a/Corona-Warn-App/src/main/res/layout/include_main_faq_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_main_faq_card.xml @@ -5,6 +5,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/main_card" style="@style/card" + android:contentDescription="@string/hint_external_webpage" android:layout_width="match_parent" android:layout_height="wrap_content"> @@ -30,6 +31,7 @@ <TextView android:id="@+id/main_card_header_headline" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginStart="@dimen/spacing_small" diff --git a/Corona-Warn-App/src/main/res/layout/include_main_overview_glossary.xml b/Corona-Warn-App/src/main/res/layout/include_main_overview_glossary.xml index ca4ae1189..d4c833a58 100644 --- a/Corona-Warn-App/src/main/res/layout/include_main_overview_glossary.xml +++ b/Corona-Warn-App/src/main/res/layout/include_main_overview_glossary.xml @@ -33,6 +33,7 @@ <TextView android:id="@+id/main_overview_glossary_subtitle" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:text="@{subtitle}" diff --git a/Corona-Warn-App/src/main/res/layout/include_main_overview_segment.xml b/Corona-Warn-App/src/main/res/layout/include_main_overview_segment.xml index 7fb81c9ee..c388fa4aa 100644 --- a/Corona-Warn-App/src/main/res/layout/include_main_overview_segment.xml +++ b/Corona-Warn-App/src/main/res/layout/include_main_overview_segment.xml @@ -44,6 +44,7 @@ <TextView android:id="@+id/main_overview_segment_subtitle" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:focusable="false" diff --git a/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml b/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml index 0092de70b..0254b11d3 100644 --- a/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml @@ -31,6 +31,7 @@ style="@style/row" android:layout_width="0dp" android:layout_height="wrap_content" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -41,7 +42,7 @@ android:layout_width="@dimen/icon_size_settings" android:layout_height="@dimen/icon_size_settings" android:layout_marginEnd="@dimen/spacing_small" - android:contentDescription="@string/lorem_ipsum" + android:importantForAccessibility="no" android:src="@{icon}" android:visibility="@{FormatterHelper.formatVisibilityIcon(icon)}" app:layout_constraintBottom_toBottomOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml index 03d9af5c8..c9fa1240c 100644 --- a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml +++ b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml @@ -7,6 +7,8 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" /> + <variable name="illustration" type="android.graphics.drawable.Drawable" /> @@ -47,15 +49,15 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <ImageView android:id="@+id/onboarding_illustration" android:layout_width="0dp" android:layout_height="wrap_content" - android:contentDescription="@{illustrationDescription}" + android:contentDescription="@{FormatterAccessibilityHelper.formatImage(illustrationDescription)}" android:src="@{illustration}" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -64,11 +66,12 @@ <TextView android:id="@+id/onboarding_headline" style="@style/headline4" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@{headline}" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/onboarding_illustration" @@ -80,9 +83,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@{subtitle}" android:visibility="@{FormatterHelper.formatVisibilityText(subtitle)}" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/onboarding_headline" @@ -94,8 +97,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@{body}" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/onboarding_subtitle" @@ -107,9 +110,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@{bodyEmphasized}" android:visibility="@{FormatterHelper.formatVisibilityText(bodyEmphasized)}" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@id/onboarding_body" @@ -124,6 +127,7 @@ android:visibility="@{FormatterHelper.formatVisibilityText(headlineCard)}" app:body="@{bodyCard}" app:headline="@{headlineCard}" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@+id/onboarding_body_emphasized" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_privacy_card.xml b/Corona-Warn-App/src/main/res/layout/include_privacy_card.xml index fa592e659..6da5f3ec6 100644 --- a/Corona-Warn-App/src/main/res/layout/include_privacy_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_privacy_card.xml @@ -13,9 +13,11 @@ <TextView android:id="@+id/privacy_card_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:text="@string/submission_positive_other_warning_privacy_title" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -27,6 +29,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@string/submission_positive_other_warning_privacy_body" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/privacy_card_title" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml b/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml index 4d85a537f..fccd1ae0c 100644 --- a/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml +++ b/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml @@ -25,6 +25,7 @@ <TextView android:id="@+id/risk_card_header_headline" + android:accessibilityHeading="true" style="@style/headline5" android:layout_width="0dp" android:layout_height="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_details_behavior_row.xml b/Corona-Warn-App/src/main/res/layout/include_risk_details_behavior_row.xml index a58fad413..3049fb21f 100644 --- a/Corona-Warn-App/src/main/res/layout/include_risk_details_behavior_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_risk_details_behavior_row.xml @@ -55,7 +55,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/spacing_small" - android:focusable="false" android:text="@{body}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml b/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml index 1b8527107..8fc6534d9 100644 --- a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml @@ -41,6 +41,7 @@ style="@style/row" android:layout_width="0dp" android:layout_height="wrap_content" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -71,6 +72,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_mega_tiny" + android:accessibilityLiveRegion="assertive" android:text="@{statusText}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -85,6 +87,7 @@ android:layout_height="wrap_content" android:checked="@{status}" android:enabled="@{enabled}" + android:contentDescription="@{FormatterSettingsHelper.formatSwitchContentDescription(subtitle, statusText)}" android:theme="@style/switchBase" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml b/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml index f1b938eca..b10fe9614 100644 --- a/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml +++ b/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml @@ -8,6 +8,7 @@ <TextView android:id="@+id/simple_step_entry_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml b/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml index 4394189dd..110933b75 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml @@ -8,14 +8,15 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <ImageView android:id="@+id/submission_contact_illustration" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:src="@drawable/ic_submission_illustration_hotline" + android:contentDescription="@string/information_contact_illustration_description" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -26,8 +27,8 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" - android:focusable="false" android:text="@string/submission_contact_body" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@id/submission_contact_illustration" /> @@ -35,11 +36,12 @@ <TextView android:id="@+id/submission_contact_headline" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_medium" - android:focusable="false" android:text="@string/submission_contact_headline" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_contact_body" /> @@ -49,6 +51,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" android:contentDescription="@string/submission_contact_step_1_content" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" @@ -74,6 +77,7 @@ <TextView android:id="@+id/submission_contact_step_1_number" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" @@ -102,6 +106,7 @@ android:id="@+id/submission_contact_step_2" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" + android:focusable="true" android:contentDescription="@string/submission_contact_step_2_content" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_dispatcher.xml b/Corona-Warn-App/src/main/res/layout/include_submission_dispatcher.xml index 6cca2badd..ace4ba274 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_dispatcher.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_dispatcher.xml @@ -19,6 +19,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@string/submission_dispatcher_subheadline" + android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toTopOf="parent" /> @@ -44,6 +45,8 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" + android:clickable="true" + android:focusable="true" app:body="@{@string/submission_dispatcher_tan_code_card_text}" app:headline="@{@string/submission_dispatcher_card_tan_code}" app:illustration="@{@drawable/ic_submission_illustration_tan_code_card}" @@ -57,6 +60,8 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" + android:clickable="true" + android:focusable="true" app:body="@{@string/submission_dispatcher_tan_tele_card_text}" app:headline="@{@string/submission_dispatcher_card_tan_tele}" app:illustration="@{@drawable/ic_submission_illustration_tan_hotline_card}" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_done.xml b/Corona-Warn-App/src/main/res/layout/include_submission_done.xml index 683bd1f3f..a3cdc8db7 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_done.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_done.xml @@ -16,7 +16,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:contentDescription="@string/submission_done_illustration_description" - android:importantForAccessibility="no" + android:focusable="true" android:src="@drawable/ic_submission_illustration_thanks" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -25,10 +25,12 @@ <TextView android:id="@+id/submission_done_headline" style="@style/headline4" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@string/submission_done_title" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_done_hero_illustration" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml b/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml index 10e9634c8..a988e9685 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_done_content.xml @@ -22,6 +22,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:text="@string/submission_done_body" + android:focusable="true" app:layout_constraintEnd_toEndOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toTopOf="parent" /> @@ -29,10 +30,12 @@ <TextView android:id="@+id/submission_done_subtitle" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@string/submission_done_subtitle" + android:focusable="true" app:layout_constraintEnd_toEndOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_done_text" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_done_further_info.xml b/Corona-Warn-App/src/main/res/layout/include_submission_done_further_info.xml index 708f6a0a7..9b7f90340 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_done_further_info.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_done_further_info.xml @@ -13,8 +13,10 @@ <TextView android:id="@+id/further_info_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" + android:focusable="true" android:text="@string/submission_done_further_info_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -24,6 +26,7 @@ android:id="@+id/further_info_text" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" + android:focusable="true" android:layout_marginTop="@dimen/spacing_normal" app:entries="@array/submission_done_further_info_bullet_points" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_intro.xml b/Corona-Warn-App/src/main/res/layout/include_submission_intro.xml index 11f872f44..47cca7183 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_intro.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_intro.xml @@ -8,16 +8,15 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:focusable="true"> + android:layout_height="wrap_content"> <ImageView android:id="@+id/submission_intro_hero_illustration" - contentDescription="@{@string/submission_intro_illustration_description}" + android:contentDescription="@{@string/submission_intro_illustration_description}" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:importantForAccessibility="no" android:src="@drawable/ic_illustration_test" + android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -25,11 +24,12 @@ <TextView android:id="@+id/submission_intro_headline" style="@style/headline4" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@string/submission_intro_headline" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_intro_hero_illustration" /> @@ -40,8 +40,8 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:focusable="false" android:text="@string/submission_intro_text" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_intro_headline" /> @@ -49,9 +49,9 @@ <de.rki.coronawarnapp.ui.view.BulletPointList android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:focusable="false" android:paddingBottom="@dimen/spacing_normal" app:entries="@array/submission_intro_bullet_points" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@id/submission_intro_text" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml index d2c584458..46a38d632 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_positive_other_warning.xml @@ -23,11 +23,13 @@ <TextView android:id="@+id/submission_positive_other_warning_headline" + android:accessibilityHeading="true" style="@style/headline5" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@string/submission_positive_other_warning_headline" + android:focusable="true" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_hero_illustration" /> @@ -38,6 +40,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" android:text="@string/submission_positive_other_warning_body" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml index 6d11a80ed..9bb43b3cf 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml @@ -22,6 +22,7 @@ <TextView android:id="@+id/submission_status_card_content_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginStart="@dimen/card_padding" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_done.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_done.xml index c6a968cec..44aae6bb8 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_done.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_done.xml @@ -12,6 +12,7 @@ <TextView android:id="@+id/submission_done_card_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginStart="@dimen/spacing_normal" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml index 9b8209f5d..46c1d6cb6 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml @@ -12,6 +12,7 @@ <TextView android:id="@+id/submission_status_card_fetching_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:text="@string/submission_status_card_title_fetching" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml index 702b27048..0b1b0a1ca 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml @@ -22,6 +22,7 @@ <TextView android:id="@+id/submission_status_card_positive_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" @@ -64,6 +65,7 @@ <TextView android:id="@+id/submission_status_card_positive_result_subtitle" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml index 491428bf7..01fa72d8d 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml @@ -13,6 +13,7 @@ <TextView android:id="@+id/submission_status_card_unregistered_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginStart="@dimen/card_padding" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml index 1baf0257a..a479ec1cc 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml @@ -35,6 +35,7 @@ <TextView android:id="@+id/submission_test_result_subtitle" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_medium" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_test_result_negative_further_info.xml b/Corona-Warn-App/src/main/res/layout/include_submission_test_result_negative_further_info.xml index 7beff057f..c5991128a 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_test_result_negative_further_info.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_test_result_negative_further_info.xml @@ -13,6 +13,7 @@ <TextView android:id="@+id/further_info_title" style="@style/headline5" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:text="@string/test_result_card_negative_further_info_title" diff --git a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml index d0704542a..7e2140709 100644 --- a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml @@ -20,11 +20,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/card_dark" + android:focusable="true" android:padding="@dimen/card_padding"> <TextView android:id="@+id/test_result_card_headline" style="@style/body2" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" diff --git a/Corona-Warn-App/src/main/res/layout/include_test_result_card_positive.xml b/Corona-Warn-App/src/main/res/layout/include_test_result_card_positive.xml index e6f3bf2a7..23a5b5500 100644 --- a/Corona-Warn-App/src/main/res/layout/include_test_result_card_positive.xml +++ b/Corona-Warn-App/src/main/res/layout/include_test_result_card_positive.xml @@ -5,11 +5,13 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:focusable="true"> <TextView android:id="@+id/test_result_card_positive_title" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" diff --git a/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml b/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml index 9d5c53f07..e28b2fc32 100644 --- a/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml @@ -6,6 +6,8 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + <import type="de.rki.coronawarnapp.util.formatter.FormatterAccessibilityHelper" /> + <import type="android.view.View" /> <variable @@ -35,7 +37,8 @@ android:id="@+id/tracing_status_card" style="@style/cardTracing" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:focusable="true"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/tracing_status_card_header" @@ -48,10 +51,12 @@ <TextView android:id="@+id/tracing_status_card_header_headline" style="@style/headline6" + android:accessibilityHeading="true" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" android:text="@{headline}" + android:contentDescription="@{headline}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/tracing_status_card_header_icon" app:layout_constraintStart_toStartOf="parent" @@ -62,6 +67,7 @@ android:layout_width="@dimen/icon_size_main_card_end" android:layout_height="@dimen/icon_size_main_card_end" android:importantForAccessibility="no" + android:focusable="false" android:src="@{icon}" android:visibility="@{FormatterHelper.formatVisibilityIcon(icon)}" app:layout_constraintEnd_toEndOf="parent" 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 a6aedf92d..dfc5f60b5 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -182,7 +182,7 @@ <string name="main_about_headline">"Häufige Fragen"</string> <!-- XTXT: main, explains faq on card --> <string name="main_about_body">"Hier finden Sie Antworten auf häufig gestellte Fragen rund um die Corona-Warn-App."</string> - <!-- NOTR --> + <!-- XTXT: External Website for FAQ, has to be translated --> <string name="main_about_link">"https://www.bundesregierung.de/corona-warn-app-faq"</string> <!-- XACT: Opens external webpage --> <string name="hint_external_webpage">"Häufige Fragen, hier finden Sie Antworten auf häufig gestellte Fragen rund um die Corona-Warn-App. Aufruf externer Infos im Web."</string> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 8607dc7e6..4019ad94d 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -147,6 +147,8 @@ <string name="accessibility_menu">Menu</string> <!-- XACT: menu description for screen readers --> <string name="accessibility_close">Schließen</string> + <!-- XACT: menu description for screen readers --> + <string name="accessibility_logo">Corona Warn-App</string> <!-- #################################### Menu @@ -411,7 +413,7 @@ <!-- XACT: onboarding(together) - illustraction description, header image --> <string name="onboarding_illustration_description">Eine vielfältige Gruppe in einer Stadt benutzt Smartphones.</string> <!-- XACT: Onboarding (privacy) page title --> - <string name="onboarding_privacy_accessibility_title">Einführung Seite 2 von 5. Datenschutz</string> + <string name="onboarding_privacy_accessibility_title">Einführung Seite 2 von 5. Datenschutz. Es folgt ein Langtext. Eine statische Weitertaste steht am unteren Rand des Bildschirms zur Verfügung. </string> <!-- XHED: onboarding(privacy) - title --> <string name="onboarding_privacy_headline">Datenschutz</string> @@ -703,6 +705,7 @@ <string name="submission_qr_code_scan_invalid_dialog_button_negative">Abbrechen</string> <!-- QR Code Scan Screen --> + <string name="submission_qr_code_scan_title">QR-Code Scan View Positionieren sie den QR-Code in den Rahmen</string> <!-- YTXT: instruction text for QR code scanning --> <string name="submission_qr_code_scan_body">Positionieren Sie den QR Code in den Rahmen</string> @@ -893,9 +896,9 @@ <!-- XACT: Submission contact page title --> <string name="submission_contact_accessibility_title">TAN Anfrage per Telefonanruf</string> <!-- XACT: Content Description for submission contact step 1, number has to sync with the display number --> - <string name="submission_contact_step_1_content">Im ersten Schritt Hotline anrufen und TAN erfragen, unter der Rufnummer +49 (0) 800 7540002. Die Öffnungszeiten sind Montag bis Freitag von 8 bis 22 Uhr sowie Samstag und Sonntag von 10 bis 22 Uhr. Es gelten die Preise ihres Telefonanbieters.</string> + <string name="submission_contact_step_1_content">Erster Schritt: Hotline anrufen und TAN erfragen, unter der Rufnummer +49 (0) 800 7540002. Die Öffnungszeiten sind Montag bis Freitag von 8 bis 10 Uhr abends, sowie Samstag und Sonntag von 10 bis 10 Uhr abends. Es gelten die Preise ihres Telefonanbieters.</string> <!-- XACT: Content Description for submission contact step 2 --> - <string name="submission_contact_step_2_content">Im Zweiten Schritt registrieren Sie den Test per TAN-Eingabe in der App</string> + <string name="submission_contact_step_2_content">Zweiter Schritt: Registrieren Sie den Test per TAN-Eingabe in der App</string> <!-- Submission Status Card --> <!-- XHED: Page title for the various submission status: fetching --> @@ -971,6 +974,10 @@ <string name="button_share">Teilen</string> <!-- XACT: menu button--> <string name="button_menu">Menü</string> + <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility button strings, e.g. "Zurück Taste", "Taste" is the default used by android in german --> + <string name="suffix_button">Taste</string> + <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility content description strings for images, e.g. "Eine Gruppe von... Bild" --> + <string name="suffix_image">Bild</string> <!-- #################################### Business Error Messages -- GitLab