From 4ed5be02766decdc00aff25c2e34efa7208937c8 Mon Sep 17 00:00:00 2001 From: BMItter <46747780+BMItter@users.noreply.github.com> Date: Mon, 28 Sep 2020 12:56:52 +0200 Subject: [PATCH] Interoperability: List of Countries can not be loaded for 1.5.x in new onboarding / interop (EXPOSUREAPP-2744) (#1232) * interop nofetch riskdetails, corresponding layout and vector * updated res to new no country spec * nofetch fetch layouts * Create include_interoperability_old.xml * removed old stuff * fixed Fixed include_interop_participating_countries_fetch for 1.5.x * adjusted logic from old base to fit 1.5.x, Converted countryList to LiveData * showing fetch or no fetch view in include_interoperability.xml, use github name as author * cleanup & refactor, fixed layout switch issue, wip * ids cleanup * system settings delegation according to design spec * improved countrylist handling for interopConfig Connectivity Settings * updated string translation tags * satisfy lint * satisfy CircleCi * fixed wrong layout visibility * delta test disabled, referenced ids adjusted * FormatHelper as requested * fix capital letter --- .../InteroperabilityRepository.kt | 30 ++++++-- .../InteroperabilityConfigurationFragment.kt | 47 ++++++++++++ ...erabilityConfigurationFragmentViewModel.kt | 7 +- ...gDeltaInteroperabilityFragmentViewModel.kt | 3 +- .../OnboardingTracingFragmentViewModel.kt | 3 +- .../res/drawable/ic_interop_no_network.xml | 18 +++++ ...ragment_interoperability_configuration.xml | 1 + ...ment_onboarding_delta_interoperability.xml | 1 + ..._list_participating_countries_overview.xml | 65 +++++++++++++++++ .../include_interop_no_countries_infoview.xml | 48 +++++++++++++ ...erop_riskdetails_no_countries_infoview.xml | 72 +++++++++++++++++++ .../res/layout/include_interoperability.xml | 57 +++++++++------ .../main/res/layout/include_onboarding.xml | 5 +- .../src/main/res/values-de/strings.xml | 13 ++++ .../src/main/res/values/strings.xml | 16 ++++- 15 files changed, 351 insertions(+), 35 deletions(-) create mode 100644 Corona-Warn-App/src/main/res/drawable/ic_interop_no_network.xml create mode 100644 Corona-Warn-App/src/main/res/layout/include_interop_list_participating_countries_overview.xml create mode 100644 Corona-Warn-App/src/main/res/layout/include_interop_no_countries_infoview.xml create mode 100644 Corona-Warn-App/src/main/res/layout/include_interop_riskdetails_no_countries_infoview.xml diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/interoperability/InteroperabilityRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/interoperability/InteroperabilityRepository.kt index b42412000..4a3e76903 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/interoperability/InteroperabilityRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/interoperability/InteroperabilityRepository.kt @@ -1,8 +1,12 @@ package de.rki.coronawarnapp.storage.interoperability +import android.text.TextUtils +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.Transformations import de.rki.coronawarnapp.service.applicationconfiguration.ApplicationConfigurationService import de.rki.coronawarnapp.storage.LocalData import kotlinx.coroutines.runBlocking +import timber.log.Timber import java.util.Locale import javax.inject.Inject import javax.inject.Singleton @@ -14,15 +18,31 @@ class InteroperabilityRepository @Inject constructor() { LocalData.isInteroperabilityShownAtLeastOnce = true } + private val _countryList: MutableLiveData<List<String>> = MutableLiveData(listOf()) + val countryList = Transformations.distinctUntilChanged(_countryList) + + init { + getAllCountries() + } + /** * Gets all countries from @see ApplicationConfigurationService.asyncRetrieveApplicationConfiguration * Also changes every country code to lower case */ - fun getAllCountries(): List<String> { - return runBlocking { - ApplicationConfigurationService.asyncRetrieveApplicationConfiguration() - .supportedCountriesList - ?.map { it.toLowerCase(Locale.ROOT) } ?: listOf() + + fun getAllCountries() { + runBlocking { + try { + val countries = + ApplicationConfigurationService.asyncRetrieveApplicationConfiguration() + .supportedCountriesList + ?.map { it.toLowerCase(Locale.ROOT) } ?: listOf() + _countryList.postValue(countries) + Timber.d("Country list: ${TextUtils.join(System.lineSeparator(), countries)}") + } catch (e: Exception) { + Timber.e(e) + _countryList.postValue(listOf()) + } } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt index 309cda7d9..efe05031d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt @@ -1,11 +1,15 @@ package de.rki.coronawarnapp.ui.interoperability +import android.content.Intent +import android.os.Build import android.os.Bundle +import android.provider.Settings import android.view.View import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentInteroperabilityConfigurationBinding import de.rki.coronawarnapp.ui.main.MainActivity +import de.rki.coronawarnapp.util.ConnectivityHelper import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBindingLazy @@ -21,6 +25,17 @@ class InteroperabilityConfigurationFragment : private val binding: FragmentInteroperabilityConfigurationBinding by viewBindingLazy() + private var isNetworkCallbackRegistered = false + private val networkCallback = object : ConnectivityHelper.NetworkCallback() { + override fun onNetworkAvailable() { + vm.getAllCountries() + unregisterNetworkCallback() + } + + override fun onNetworkUnavailable() { + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -39,5 +54,37 @@ class InteroperabilityConfigurationFragment : (requireActivity() as MainActivity).goBack() } } + + binding.interoperabilityConfigurationCountryList + .noCountriesRiskdetailsInfoview.riskDetailsOpenSettingsButton.setOnClickListener { + val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY) + } else { + Intent(Settings.ACTION_SETTINGS) + } + startActivity(intent) + registerNetworkCallback() + } + } + + private fun registerNetworkCallback() { + context?.let { + ConnectivityHelper.registerNetworkStatusCallback(it, networkCallback) + isNetworkCallbackRegistered = true + } + } + + private fun unregisterNetworkCallback() { + if (isNetworkCallbackRegistered) { + context?.let { + ConnectivityHelper.unregisterNetworkStatusCallback(it, networkCallback) + isNetworkCallbackRegistered = false + } + } + } + + override fun onDestroy() { + super.onDestroy() + unregisterNetworkCallback() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModel.kt index 405273f88..4d73e11f9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragmentViewModel.kt @@ -1,6 +1,5 @@ package de.rki.coronawarnapp.ui.interoperability -import androidx.lifecycle.MutableLiveData import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.util.ui.SingleLiveEvent @@ -11,7 +10,7 @@ class InteroperabilityConfigurationFragmentViewModel @AssistedInject constructor private val interoperabilityRepository: InteroperabilityRepository ) : CWAViewModel() { - val countryList = MutableLiveData(interoperabilityRepository.getAllCountries()) + val countryList = interoperabilityRepository.countryList val navigateBack = SingleLiveEvent<Boolean>() fun onBackPressed() { @@ -22,6 +21,10 @@ class InteroperabilityConfigurationFragmentViewModel @AssistedInject constructor interoperabilityRepository.saveInteroperabilityUsed() } + fun getAllCountries() { + interoperabilityRepository.getAllCountries() + } + @AssistedInject.Factory interface Factory : SimpleCWAViewModelFactory<InteroperabilityConfigurationFragmentViewModel> } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentViewModel.kt index 069d6cba5..d817af9e9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingDeltaInteroperabilityFragmentViewModel.kt @@ -1,6 +1,5 @@ package de.rki.coronawarnapp.ui.onboarding -import androidx.lifecycle.MutableLiveData import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.util.ui.SingleLiveEvent @@ -11,7 +10,7 @@ class OnboardingDeltaInteroperabilityFragmentViewModel @AssistedInject construct private val interoperabilityRepository: InteroperabilityRepository ) : CWAViewModel() { - val countryList = MutableLiveData(interoperabilityRepository.getAllCountries()) + val countryList = interoperabilityRepository.countryList val navigateBack = SingleLiveEvent<Boolean>() fun onBackPressed() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt index fe4a26a2b..ed3c9bcf0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt @@ -1,6 +1,5 @@ package de.rki.coronawarnapp.ui.onboarding -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.exception.ExceptionCategory @@ -16,7 +15,7 @@ class OnboardingTracingFragmentViewModel @AssistedInject constructor( private val interoperabilityRepository: InteroperabilityRepository ) : CWAViewModel() { - val countryList = MutableLiveData(interoperabilityRepository.getAllCountries()) + val countryList = interoperabilityRepository.countryList fun saveInteroperabilityUsed() { interoperabilityRepository.saveInteroperabilityUsed() diff --git a/Corona-Warn-App/src/main/res/drawable/ic_interop_no_network.xml b/Corona-Warn-App/src/main/res/drawable/ic_interop_no_network.xml new file mode 100644 index 000000000..85e7eb1cc --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/ic_interop_no_network.xml @@ -0,0 +1,18 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="40dp" + android:height="40dp" + android:viewportWidth="40" + android:viewportHeight="40"> + <path + android:pathData="M20,0L20,0A20,20 0,0 1,40 20L40,20A20,20 0,0 1,20 40L20,40A20,20 0,0 1,0 20L0,20A20,20 0,0 1,20 0z" + android:strokeWidth="1" + android:fillColor="#2296F3" + android:fillType="evenOdd" + android:strokeColor="#00000000"/> + <path + android:pathData="M20.001,12.5C15.859,12.5 12.1086,14.1786 9.3936,16.8926L11.3369,18.8359C13.6399,16.7699 16.671,15.5 20.001,15.5C23.331,15.5 26.363,16.7689 28.665,18.8359L30.6064,16.8945C27.8924,14.1795 24.143,12.5 20.001,12.5ZM20.001,17.5C17.222,17.5 14.688,18.543 12.749,20.248L14.8701,22.3691C16.2611,21.2041 18.05,20.5 20.001,20.5C21.952,20.5 23.7418,21.2031 25.1318,22.3691L27.251,20.25C25.313,18.544 22.78,17.5 20.001,17.5ZM20.001,22.5C18.601,22.5 17.3159,22.987 16.2939,23.793L20.001,27.5L23.708,23.793C22.686,22.987 21.401,22.5 20.001,22.5Z" + android:strokeWidth="1" + android:fillColor="#FFFFFF" + android:fillType="nonZero" + android:strokeColor="#00000000"/> +</vector> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_interoperability_configuration.xml b/Corona-Warn-App/src/main/res/layout/fragment_interoperability_configuration.xml index 0d4a25e45..50f7b01da 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_interoperability_configuration.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_interoperability_configuration.xml @@ -46,6 +46,7 @@ app:countryListTitle="@{@string/interoperability_configuration_list_title}" app:countryData="@{countryData}" app:isOnboarding="@{false}" + app:isRiskdetection="@{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_onboarding_delta_interoperability.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_delta_interoperability.xml index 201ba397e..7b1ec16ca 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_delta_interoperability.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_delta_interoperability.xml @@ -57,6 +57,7 @@ app:countryListTitle="@{@string/interoperability_onboarding_list_title}" app:countryData="@{countryData}" app:isOnboarding="@{false}" + app:isRiskdetection="@{false}" app:showFooter="@{true}" app:footerTitle="@{@string/interoperability_onboarding_delta_footerTitle}" app:footerDescription="@{@string/interoperability_onboarding_delta_footerDescription}" diff --git a/Corona-Warn-App/src/main/res/layout/include_interop_list_participating_countries_overview.xml b/Corona-Warn-App/src/main/res/layout/include_interop_list_participating_countries_overview.xml new file mode 100644 index 000000000..4f5896f4d --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_interop_list_participating_countries_overview.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + + <variable + name="countryData" + type="java.util.List<String>" /> + + <variable + name="countryListTitle" + type="String" /> + + <variable + name="countryListHint" + type="String" /> + + </data> + + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/country_header_description" + style="@style/headline6" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:accessibilityHeading="true" + android:text="@{countryListTitle}" + android:visibility="@{FormatterHelper.formatVisibilityText(countryListTitle)}" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <de.rki.coronawarnapp.ui.view.CountryList + android:id="@+id/countryList" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/country_header_description" + app:list="@{countryData}" /> + + <TextView + android:id="@+id/label_country_selection_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/spacing_normal" + android:accessibilityHeading="true" + android:text="@{countryListHint}" + android:visibility="@{FormatterHelper.formatVisibilityText(countryListHint)}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/countryList" /> + + </androidx.constraintlayout.widget.ConstraintLayout> + + +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/include_interop_no_countries_infoview.xml b/Corona-Warn-App/src/main/res/layout/include_interop_no_countries_infoview.xml new file mode 100644 index 000000000..d8f80cef7 --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_interop_no_countries_infoview.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterRiskHelper" /> + + </data> + + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/participating_countries_notfetch_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_tiny" + android:focusable="true"> + + <TextView + android:id="@+id/participating_countries_headline" + style="@style/headline5" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="false" + android:text="@string/interoperability_onboarding_list_title_failrequest" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + <TextView + android:id="@+id/participating_countries_body" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:focusable="true" + android:text="@string/interoperability_onboarding_list_subtitle_failrequest" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/participating_countries_headline" /> + </androidx.constraintlayout.widget.ConstraintLayout> + +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/include_interop_riskdetails_no_countries_infoview.xml b/Corona-Warn-App/src/main/res/layout/include_interop_riskdetails_no_countries_infoview.xml new file mode 100644 index 000000000..c344112e0 --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_interop_riskdetails_no_countries_infoview.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterRiskHelper" /> + + </data> + + + <androidx.constraintlayout.widget.ConstraintLayout + style="@style/cardTracing" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:padding="@dimen/card_padding" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/country_barrier"> + + <ImageView + android:id="@+id/no_network_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:importantForAccessibility="no" + android:src="@drawable/ic_interop_no_network" + android:visibility="visible" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/no_network_title" + style="@style/headline6" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/spacing_normal" + android:accessibilityHeading="true" + android:text="@string/interoperability_onboarding_list_title_riskdetection_no_network" + app:layout_constraintEnd_toStartOf="@+id/no_network_icon" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/no_network_description" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:accessibilityHeading="true" + android:text="@string/interoperability_onboarding_list_subtitle_failrequest_no_network" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/no_network_title" /> + + <Button + android:id="@+id/risk_details_open_settings_button" + style="@style/buttonPrimary" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:text="@string/interoperability_onboarding_list_button_title_no_network" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/no_network_description" /> + + </androidx.constraintlayout.widget.ConstraintLayout> + +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/include_interoperability.xml b/Corona-Warn-App/src/main/res/layout/include_interoperability.xml index b76d1d5f9..41be28014 100644 --- a/Corona-Warn-App/src/main/res/layout/include_interoperability.xml +++ b/Corona-Warn-App/src/main/res/layout/include_interoperability.xml @@ -1,11 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> <data> <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> + <import type="android.view.View" /> + <variable name="countryData" type="java.util.List<String>" /> @@ -46,6 +49,10 @@ name="isOnboarding" type="Boolean" /> + <variable + name="isRiskdetection" + type="Boolean" /> + <variable name="showFooter" type="Boolean" /> @@ -151,37 +158,49 @@ </androidx.constraintlayout.widget.ConstraintLayout> - <TextView - android:id="@+id/country_header_description" - style="@style/headline6" + <include + android:id="@+id/no_countries_default_infoview" + layout="@layout/include_interop_no_countries_infoview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:accessibilityHeading="true" - android:text="@{countryListTitle}" - android:visibility="@{FormatterHelper.formatVisibilityText(countryListTitle)}" + android:visibility="@{FormatterHelper.formatVisibility(countryData.empty)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/interoperability_header" /> - <de.rki.coronawarnapp.ui.view.CountryList - android:id="@+id/countryList" + <include + android:id="@+id/no_countries_riskdetails_infoview" + layout="@layout/include_interop_riskdetails_no_countries_infoview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - app:list="@{countryData}" + android:visibility="@{FormatterHelper.formatVisibility(countryData.empty && isRiskdetection)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/country_header_description" /> + app:layout_constraintTop_toBottomOf="@+id/interoperability_header" /> - <TextView - android:id="@+id/interoperability_label_country_selection_information" + <include + android:id="@+id/country_list_overview" + layout="@layout/include_interop_list_participating_countries_overview" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/spacing_normal" - android:text="@{countryListHint}" - android:visibility="@{FormatterHelper.formatVisibilityText(countryListHint)}" - app:layout_constraintTop_toBottomOf="@+id/countryList" /> + android:visibility="@{FormatterHelper.formatVisibilityInverted(countryData.empty)}" + app:countryData="@{countryData}" + app:countryListHint="@{countryListHint}" + app:countryListTitle="@{countryListTitle}" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/interoperability_header" /> + + <androidx.constraintlayout.widget.Barrier + android:id="@+id/country_list_barrier" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:barrierAllowsGoneWidgets="false" + app:barrierDirection="bottom" + app:constraint_referenced_ids="country_list_overview, no_countries_default_infoview" + tools:layout_editor_absoluteY="411dp" /> <androidx.constraintlayout.widget.ConstraintLayout style="@style/cardTracing" @@ -192,8 +211,7 @@ android:visibility="@{FormatterHelper.formatVisibility(showFooter)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/interoperability_label_country_selection_information"> - app:layout_constraintTop_toBottomOf="@+id/countryList"/> + app:layout_constraintTop_toBottomOf="@+id/country_list_barrier"> <TextView android:id="@+id/interoperability_footer_title" @@ -218,7 +236,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/interoperability_footer_title" /> </androidx.constraintlayout.widget.ConstraintLayout> - </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> </layout> \ No newline at end of file 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 ec84cb8ed..f5c0341a4 100644 --- a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml +++ b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml @@ -167,14 +167,15 @@ android:layout_marginTop="@dimen/spacing_normal" android:layout_marginBottom="@dimen/spacing_normal" android:visibility="@{FormatterHelper.formatVisibility(countryData != null)}" - app:countryListTitle="@{@string/interoperability_onboarding_list_title}" app:countryData="@{countryData}" + app:countryListTitle="@{@string/interoperability_onboarding_list_title}" + app:firstSection="@{@string/interoperability_onboarding_first_section}" app:isOnboarding="@{true}" + app:isRiskdetection="@{false}" app:layout_constraintBottom_toTopOf="@+id/onboarding_location_card" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/onboarding_easy_language" - app:firstSection="@{@string/interoperability_onboarding_first_section}" app:secondSection="@{@string/interoperability_onboarding_second_section}" app:thirdSection="@{@string/interoperability_onboarding_randomid_download_free}" app:title="@{@string/interoperability_onboarding_title}" /> 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 53c4d5da9..5b0c57f05 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -1336,4 +1336,17 @@ <!-- XACT: interoperability (eu) - illustraction description, explanation image --> <string name="interoperability_eu_illustration_description">Eine Hand hält ein Smartphone. Im Hintergrund ist Europa und die europäische Flagge illustriert</string> + + <!-- XTXT: Title for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_title_failrequest">Teilnehmende Länder</string> + <!-- XTXT: Subtitle for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_subtitle_failrequest">Die teilnehmenden Länder können Sie jederzeit einsehen in den Details zur Risiko-Ermittlung.</string> + + <!-- YDES: Title for the interoperability onboarding if country download fails for Risk Details --> + <string name="interoperability_onboarding_list_title_riskdetection_no_network">Länder können im Moment nicht angezeigt werden.</string> + <!-- YMSW: Subtitle for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_subtitle_failrequest_no_network">Möglicherweise wurde Ihre Internet-Verbindung unterbrochen. Bitte stellen Sie sicher, dass Sie mit dem Internet verbunden sind.</string> + <!-- XBUT: Title for the interoperability onboarding Settings-Button if no network is available --> + <string name="interoperability_onboarding_list_button_title_no_network">Geräte-Einstellungen öffnen</string> + </resources> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 8208869f4..9d41b7e11 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -739,9 +739,9 @@ Interoperability ###################################### --> <!-- XHED: headline for consent information --> - <string name="interop_consent_headline"/> + <string name="interop_consent_headline" /> <!-- YTXT: body for consent information --> - <string name="interop_consent_body"/> + <string name="interop_consent_body" /> <!-- #################################### Submission @@ -1344,4 +1344,16 @@ <!-- XACT: interoperability (eu) - illustraction description, explanation image --> <string name="interoperability_eu_illustration_description"></string> + + <!-- XTXT: Title for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_title_failrequest"></string> + <!-- XTXT: Subtitle for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_subtitle_failrequest"></string> + + <!-- YDES: Title for the interoperability onboarding if country download fails for Risk Details --> + <string name="interoperability_onboarding_list_title_riskdetection_no_network"></string> + <!-- YMSW: Subtitle for the interoperability onboarding if country download fails --> + <string name="interoperability_onboarding_list_subtitle_failrequest_no_network"></string> + <!-- XBUT: Title for the interoperability onboarding Settings-Button if no network is available --> + <string name="interoperability_onboarding_list_button_title_no_network"></string> </resources> \ No newline at end of file -- GitLab