From c19150228f1884beab0e6e5d59832e073cbf7e99 Mon Sep 17 00:00:00 2001 From: axelherbstreith <75120552+axelherbstreith@users.noreply.github.com> Date: Tue, 1 Jun 2021 10:43:04 +0200 Subject: [PATCH] Basic Layout for Test Certificate Detail Screen (DEV) (#3300) * add basic xml layout * added basic files * refactoring + adding new strings * updated travel notice * fixed linting * connected screen to test_nav_graph * lint * added to test_nav_graph * linting * updated styling * increased green card background * lint * renamed variables * updated margins * addressed comments * addressed more comments * unified qr code cards * added links * linting * added missing space * Try another device * Revert "Try another device" This reverts commit bca7c56e6659392ce720590f15ccf1779bd544ac. * updated with new strings Co-authored-by: BMItter <Berndus@gmx.de> Co-authored-by: Mohamed Metwalli <mohamed.metwalli@sap.com> --- .../GreenCertificateTestFragment.kt | 7 + .../fragment_test_green_certificate.xml | 6 + .../res/layout/fragment_test_vaccination.xml | 1 - .../res/navigation/test_nav_graph.xml | 13 +- .../ui/GreenCertificateUIModule.kt | 5 + .../GreenCertificateDetailsFragment.kt | 84 +++++ .../details/GreenCertificateDetailsModule.kt | 19 + .../GreenCertificateDetailsNavigation.kt | 6 + .../GreenCertificateDetailsViewModel.kt | 42 +++ .../VaccinationListQrCodeCardItemVH.kt | 12 +- .../drawable/greencertificate_gradient.xml | 6 + .../fragment_greencertificate_details.xml | 349 ++++++++++++++++++ .../layout/fragment_vaccination_details.xml | 2 +- .../res/layout/fragment_vaccination_list.xml | 2 +- ...ml => include_certificate_qrcode_card.xml} | 0 .../values-de/green_certificate_strings.xml | 10 + .../green_certificate_attribute_strings.xml | 36 ++ .../res/values/green_certificate_strings.xml | 11 + .../src/main/res/values/styles.xml | 8 + 19 files changed, 609 insertions(+), 10 deletions(-) create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt create mode 100644 Corona-Warn-App/src/main/res/drawable/greencertificate_gradient.xml create mode 100644 Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml rename Corona-Warn-App/src/main/res/layout/{vaccination_list_qrcode_card.xml => include_certificate_qrcode_card.xml} (100%) create mode 100644 Corona-Warn-App/src/main/res/values/green_certificate_attribute_strings.xml diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt index dbc265be6..5c702e1e9 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt @@ -34,6 +34,13 @@ class GreenCertificateTestFragment : Fragment(R.layout.fragment_test_green_certi ratScreen.setOnClickListener { doNavigate(NavGraphDirections.actionSubmissionTestResultGreenCertificateFragment(RAPID_ANTIGEN)) } + + detailsScreen.setOnClickListener { + doNavigate( + GreenCertificateTestFragmentDirections + .actionGreenCertificateTestFragmentToGreenCertificateDetailsFragment() + ) + } } } diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml index 060d11b08..4f5a4eee7 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml @@ -29,5 +29,11 @@ android:layout_height="wrap_content" android:text="RAT screen" /> + <com.google.android.material.button.MaterialButton + android:id="@+id/details_screen" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Details screen" /> + </LinearLayout> </androidx.core.widget.NestedScrollView> diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_vaccination.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_vaccination.xml index 2c5298753..36066d516 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_vaccination.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_vaccination.xml @@ -53,6 +53,5 @@ </androidx.constraintlayout.widget.ConstraintLayout> - </LinearLayout> </androidx.core.widget.NestedScrollView> diff --git a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml index b4d0def3a..0e531f26a 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml @@ -177,6 +177,7 @@ <action android:id="@+id/action_vaccinationTestFragment_to_vaccinationDetailsFragment" app:destination="@id/vaccinationDetailsFragment" /> + </fragment> <fragment @@ -192,5 +193,15 @@ android:id="@+id/greenCertificateTestFragment" android:name="de.rki.coronawarnapp.test.greencertificate.GreenCertificateTestFragment" android:label="GreenCertificateTestFragment" - tools:layout="@layout/fragment_test_green_certificate" /> + tools:layout="@layout/fragment_test_green_certificate" > + <action + android:id="@+id/action_greenCertificateTestFragment_to_greenCertificateDetailsFragment" + app:destination="@id/greenCertificateDetailsFragment" /> + </fragment> + <fragment + android:id="@+id/greenCertificateDetailsFragment" + android:name="de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsFragment" + android:label="GreenCertificateDetailsFragment" + tools:layout="@layout/fragment_greencertificate_details" /> + </navigation> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt index 77c6fae3d..62cacdaf5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt @@ -4,10 +4,15 @@ import dagger.Module import dagger.android.ContributesAndroidInjector import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragment import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragmentModule +import de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsFragment +import de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsModule @Module abstract class GreenCertificateUIModule { @ContributesAndroidInjector(modules = [CertificatesFragmentModule::class]) abstract fun certificatesFragment(): CertificatesFragment + + @ContributesAndroidInjector(modules = [GreenCertificateDetailsModule::class]) + abstract fun certificateDetailsFragment(): GreenCertificateDetailsFragment } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt new file mode 100644 index 000000000..ff9e0a78b --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt @@ -0,0 +1,84 @@ +package de.rki.coronawarnapp.greencertificate.ui.certificates.details + +import android.os.Bundle +import android.view.View +import android.widget.LinearLayout +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.fragment.app.Fragment +import com.google.android.material.appbar.AppBarLayout +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.databinding.FragmentGreencertificateDetailsBinding +import de.rki.coronawarnapp.ui.view.onOffsetChange +import de.rki.coronawarnapp.util.di.AutoInject +import de.rki.coronawarnapp.util.setUrl +import de.rki.coronawarnapp.util.ui.popBackStack +import de.rki.coronawarnapp.util.ui.viewBinding +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider +import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import javax.inject.Inject + +class GreenCertificateDetailsFragment : Fragment(R.layout.fragment_greencertificate_details), AutoInject { + + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory + private val binding: FragmentGreencertificateDetailsBinding by viewBinding() + private val viewModel: GreenCertificateDetailsViewModel by cwaViewModels { viewModelFactory } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) = + with(binding) { + toolbar.setNavigationOnClickListener { popBackStack() } + + qrCodeCard.title.text = getString(R.string.detail_green_certificate_card_title) + qrCodeCard.subtitle.text = "Test durchgeführt am 12.05.21 18:01" // will be changed + + appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha -> + title.alpha = titleAlpha + subtitle.alpha = subtitleAlpha + } + + if (travelNoticeGerman.text == + requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_german) + ) { + travelNoticeGerman.setUrl( + R.string.green_certificate_attribute_certificate_travel_notice_german, + R.string.green_certificate_travel_notice_link_de, + R.string.green_certificate_travel_notice_link_de + ) + } + + if (travelNoticeEnglish.text == + requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_english) + ) { + travelNoticeEnglish.setUrl( + R.string.green_certificate_attribute_certificate_travel_notice_english, + R.string.green_certificate_travel_notice_link_en, + R.string.green_certificate_travel_notice_link_en + ) + } + + setToolbarOverlay() + + viewModel.qrCode.observe(viewLifecycleOwner) { + qrCodeCard.image.setImageBitmap(it) + it?.let { + qrCodeCard.image.setOnClickListener { viewModel.openFullScreen() } + qrCodeCard.progressBar.hide() + } + } + + // TODO: Will in the future be called when the data is loaded from the database + viewModel.generateQrCode() + } + + private fun setToolbarOverlay() { + val width = requireContext().resources.displayMetrics.widthPixels + val params: CoordinatorLayout.LayoutParams = binding.scrollView.layoutParams + as (CoordinatorLayout.LayoutParams) + + val textParams = binding.subtitle.layoutParams as (LinearLayout.LayoutParams) + textParams.bottomMargin = (width / 3) + 170 + binding.subtitle.requestLayout() + + val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior) + behavior.overlayTop = (width / 3) + 170 + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt new file mode 100644 index 000000000..363a483bf --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt @@ -0,0 +1,19 @@ +package de.rki.coronawarnapp.greencertificate.ui.certificates.details + +import dagger.Binds +import dagger.Module +import dagger.multibindings.IntoMap +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey + +@Module +abstract class GreenCertificateDetailsModule { + + @Binds + @IntoMap + @CWAViewModelKey(GreenCertificateDetailsViewModel::class) + abstract fun greenCertificateDetailsFragment( + factory: GreenCertificateDetailsViewModel.Factory + ): CWAViewModelFactory<out CWAViewModel> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt new file mode 100644 index 000000000..029b09bdc --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt @@ -0,0 +1,6 @@ +package de.rki.coronawarnapp.greencertificate.ui.certificates.details + +sealed class GreenCertificateDetailsNavigation { + object Back : GreenCertificateDetailsNavigation() + data class FullQrCode(val qrCodeText: String) : GreenCertificateDetailsNavigation() +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt new file mode 100644 index 000000000..c1996855f --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt @@ -0,0 +1,42 @@ +package de.rki.coronawarnapp.greencertificate.ui.certificates.details + +import android.graphics.Bitmap +import androidx.lifecycle.asLiveData +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator +import de.rki.coronawarnapp.util.coroutine.DispatcherProvider +import de.rki.coronawarnapp.util.ui.SingleLiveEvent +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory +import kotlinx.coroutines.flow.MutableStateFlow +import timber.log.Timber + +class GreenCertificateDetailsViewModel @AssistedInject constructor( + private val qrCodeGenerator: QrCodeGenerator, + dispatcherProvider: DispatcherProvider, +) : CWAViewModel(dispatcherProvider) { + + private var qrCodeText: String? = null + private val mutableStateFlow = MutableStateFlow<Bitmap?>(null) + val qrCode = mutableStateFlow.asLiveData(dispatcherProvider.Default) + + val events = SingleLiveEvent<GreenCertificateDetailsNavigation>() + + fun onClose() = events.postValue(GreenCertificateDetailsNavigation.Back) + + fun openFullScreen() = qrCodeText?.let { events.postValue(GreenCertificateDetailsNavigation.FullQrCode(it)) } + + /* TODO: Adapt to Green Certificate */ + fun generateQrCode() = launch { + try { + mutableStateFlow.value = qrCodeGenerator.createQrCode("Sample String") + } catch (e: Exception) { + Timber.d(e, "generateQrCode failed for greenCertificate=%s", "Sample Certificate") + mutableStateFlow.value = null + } + } + + @AssistedFactory + interface Factory : SimpleCWAViewModelFactory<GreenCertificateDetailsViewModel> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/list/adapter/viewholder/VaccinationListQrCodeCardItemVH.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/list/adapter/viewholder/VaccinationListQrCodeCardItemVH.kt index f5741bd7a..3c84ae552 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/list/adapter/viewholder/VaccinationListQrCodeCardItemVH.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/list/adapter/viewholder/VaccinationListQrCodeCardItemVH.kt @@ -3,7 +3,7 @@ package de.rki.coronawarnapp.vaccination.ui.list.adapter.viewholder import android.graphics.Bitmap import android.view.ViewGroup import de.rki.coronawarnapp.R -import de.rki.coronawarnapp.databinding.VaccinationListQrcodeCardBinding +import de.rki.coronawarnapp.databinding.IncludeCertificateQrcodeCardBinding import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat import de.rki.coronawarnapp.vaccination.ui.list.adapter.VaccinationListAdapter import de.rki.coronawarnapp.vaccination.ui.list.adapter.VaccinationListItem @@ -12,16 +12,16 @@ import org.joda.time.Instant import org.joda.time.LocalDate class VaccinationListQrCodeCardItemVH(parent: ViewGroup) : - VaccinationListAdapter.ItemVH<VaccinationListQrCodeCardItem, VaccinationListQrcodeCardBinding>( - layoutRes = R.layout.vaccination_list_qrcode_card, + VaccinationListAdapter.ItemVH<VaccinationListQrCodeCardItem, IncludeCertificateQrcodeCardBinding>( + layoutRes = R.layout.include_certificate_qrcode_card, parent = parent ) { - override val viewBinding: Lazy<VaccinationListQrcodeCardBinding> = lazy { - VaccinationListQrcodeCardBinding.bind(itemView) + override val viewBinding: Lazy<IncludeCertificateQrcodeCardBinding> = lazy { + IncludeCertificateQrcodeCardBinding.bind(itemView) } - override val onBindData: VaccinationListQrcodeCardBinding + override val onBindData: IncludeCertificateQrcodeCardBinding .(item: VaccinationListQrCodeCardItem, payloads: List<Any>) -> Unit = { item, _ -> image.setImageBitmap(item.qrCode) diff --git a/Corona-Warn-App/src/main/res/drawable/greencertificate_gradient.xml b/Corona-Warn-App/src/main/res/drawable/greencertificate_gradient.xml new file mode 100644 index 000000000..395df1d3c --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/greencertificate_gradient.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <gradient + android:endColor="#35B55F" + android:startColor="#2E854B" /> +</shape> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml new file mode 100644 index 000000000..057a3da6a --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml @@ -0,0 +1,349 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.coordinatorlayout.widget.CoordinatorLayout 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" + android:id="@+id/coordinator_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/trace_location_gradient_background" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <com.google.android.material.appbar.AppBarLayout + android:id="@+id/appBarLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <com.google.android.material.appbar.CollapsingToolbarLayout + android:id="@+id/collapsing_toolbar_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:nestedScrollingEnabled="true" + app:layout_scrollFlags="scroll|exitUntilCollapsed"> + + <ImageView + android:id="@+id/expandedImage" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:importantForAccessibility="no" + app:layout_collapseMode="parallax" + app:srcCompat="@drawable/greencertificate_gradient" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_collapseMode="parallax"> + + <TextView + android:id="@+id/title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:layout_marginTop="90dp" + android:layout_marginBottom="12dp" + android:gravity="center" + android:textColor="@android:color/white" + android:textSize="20sp" + android:textStyle="bold" + android:text="@string/detail_green_certificate_title"/> + + <TextView + android:id="@+id/subtitle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginHorizontal="24dp" + android:layout_marginBottom="8dp" + android:gravity="center" + android:text="@string/detail_green_certificate_test_type" + android:textColor="@android:color/white" + android:textSize="18sp"/> + + </LinearLayout> + + <com.google.android.material.appbar.MaterialToolbar + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:layout_collapseMode="pin" + app:layout_scrollFlags="scroll|enterAlways" + app:navigationIcon="@drawable/ic_back" + app:navigationIconTint="@android:color/white"> + + <LinearLayout + android:id="@+id/header_text_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:orientation="horizontal"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginEnd="72dp" + android:importantForAccessibility="no" + app:srcCompat="@drawable/ic_cwa_logo_white" /> + + </LinearLayout> + + </com.google.android.material.appbar.MaterialToolbar> + + </com.google.android.material.appbar.CollapsingToolbarLayout> + + </com.google.android.material.appbar.AppBarLayout> + + <androidx.core.widget.NestedScrollView + android:id="@+id/scroll_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginVertical="16dp" + android:orientation="vertical"> + + <include + android:id="@+id/qr_code_card" + layout="@layout/include_certificate_qrcode_card" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:layout_marginBottom="6dp" /> + + <LinearLayout + style="@style/Card.Greencertificate" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:orientation="vertical" + android:padding="16dp"> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:text="@string/green_certificate_attribute_name" /> + + <TextView + android:id="@+id/name" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Andrea Schneider" + tools:text="Andrea Schneider" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_dob" /> + + <TextView + android:id="@+id/birth_date" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="18.04.1943" + tools:text="18.04.1943" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_disease" /> + + <TextView + android:id="@+id/disease_type" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="SARS-CoV-2" + tools:text="SARS-CoV-2" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_type" /> + + <TextView + android:id="@+id/test_type" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="Rapid Antigen Test" + tools:text="Rapid Antigen Test" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_name" /> + + <TextView + android:id="@+id/medical_product_name" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="Xep" + tools:text="Xep" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_manufacturer" /> + + <TextView + android:id="@+id/test_manufacturer" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="Xup" + tools:text="Xup" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_date" /> + + <TextView + android:id="@+id/test_date" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="12.05.21 19:00" + tools:text="12.05.21 19:00" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_result" /> + + <TextView + android:id="@+id/test_result" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="negative" + tools:text="negative" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_test_center" /> + + <TextView + android:id="@+id/test_center" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="AB123" + tools:text="AB123" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_state_of_testing" /> + + <TextView + android:id="@+id/test_country" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="Germany" + tools:text="Germany" /> + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_certificate_issuer" /> + + <TextView + android:id="@+id/certificate_issuer" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="G05930482748454836478695764787840" + tools:text="G05930482748454836478695764787840" /> + + + <TextView + style="@style/body1Medium" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_certificate_id" /> + + <TextView + android:id="@+id/certificate_id" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="05930482748454836478695764787840" + tools:text="05930482748454836478695764787840" /> + + + </LinearLayout> + + <LinearLayout + style="@style/Card.Greencertificate" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:layout_marginTop="8dp" + android:orientation="vertical" + android:padding="16dp"> + + <TextView + android:id="@+id/travel_notice_german" + style="@style/body2" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:text="@string/green_certificate_attribute_certificate_travel_notice_german"/> + + <TextView + android:id="@+id/travel_notice_english" + style="@style/body2" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:text="@string/green_certificate_attribute_certificate_travel_notice_english"/> + </LinearLayout> + </LinearLayout> + + </androidx.core.widget.NestedScrollView> + +</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/fragment_vaccination_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_vaccination_details.xml index eca90fd7d..813c44722 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_vaccination_details.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_vaccination_details.xml @@ -107,7 +107,7 @@ <include android:id="@+id/qr_code_card" - layout="@layout/vaccination_list_qrcode_card" + layout="@layout/include_certificate_qrcode_card" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_vaccination_list.xml b/Corona-Warn-App/src/main/res/layout/fragment_vaccination_list.xml index da6a49f67..30187c06f 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_vaccination_list.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_vaccination_list.xml @@ -108,7 +108,7 @@ android:paddingTop="24dp" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_behavior="@string/appbar_scrolling_view_behavior" - tools:listitem="@layout/vaccination_list_qrcode_card" /> + tools:listitem="@layout/include_certificate_qrcode_card" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/Corona-Warn-App/src/main/res/layout/vaccination_list_qrcode_card.xml b/Corona-Warn-App/src/main/res/layout/include_certificate_qrcode_card.xml similarity index 100% rename from Corona-Warn-App/src/main/res/layout/vaccination_list_qrcode_card.xml rename to Corona-Warn-App/src/main/res/layout/include_certificate_qrcode_card.xml diff --git a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml index e852e422e..9563b24b6 100644 --- a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml @@ -26,4 +26,14 @@ <string name="request_gc_dialog_positive_button">OK</string> <!-- XBUT: Request green certificate exit dialog negative button --> <string name="request_gc_dialog_negative_button">Abbrechen</string> + <!-- XTXT: Detail green certificate title --> + <string name="detail_green_certificate_title">EU Digitales COVID-Testzertifikat</string> + <!-- XTXT: Detail green certificate test type --> + <string name="detail_green_certificate_test_type">SARS-CoV-2-Test</string> + <!-- XTXT: Detail green certificate card title --> + <string name="detail_green_certificate_card_title">"Testzertifikat"</string> + <!-- XTXT: Detail green certificate travel notice link en --> + <string name="green_certificate_travel_notice_link_en">"https://reopen.europa.eu/en"</string> + <!-- XTXT: Detail green certificate travel notice link de --> + <string name="green_certificate_travel_notice_link_de">"https://reopen.europa.eu/de"</string> </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values/green_certificate_attribute_strings.xml b/Corona-Warn-App/src/main/res/values/green_certificate_attribute_strings.xml new file mode 100644 index 000000000..66f4eddbb --- /dev/null +++ b/Corona-Warn-App/src/main/res/values/green_certificate_attribute_strings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <!-- #################################### + Special string files for the strings that should always keep the german / englisch version independent from the selected system language + ###################################### --> + <!-- XTXT: Green Certificate Detail Screen Attribute: Name --> + <string name="green_certificate_attribute_name" translatable="false">"Name, Vorname / Name, First Name"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Date of Birth --> + <string name="green_certificate_attribute_dob" translatable="false">"Geburtsdatum / Date of Birth"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Disease --> + <string name="green_certificate_attribute_disease" translatable="false">"Zielkrankheit bzw. -erreger / Disease or Agent Targeted"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Test Type --> + <string name="green_certificate_attribute_test_type" translatable="false">"Art des Tests / Type of Test"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Test Name --> + <string name="green_certificate_attribute_test_name" translatable="false">"Produktname / Test Name"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Test Manufacturer --> + <string name="green_certificate_attribute_test_manufacturer" translatable="false">"Testhersteller / Test Manufacturer"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Test Date --> + <string name="green_certificate_attribute_test_date" translatable="false">"Datum und Uhrzeit der Probenahme / Date and Time of Sample Collection"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Result of the Test --> + <string name="green_certificate_attribute_test_result" translatable="false">"Testergebnis / Result of the Test"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Testing Center or Facility --> + <string name="green_certificate_attribute_test_center" translatable="false">"Testzentrum oder -einrichtung / Testing Center or Facility"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Member State of Test --> + <string name="green_certificate_attribute_state_of_testing" translatable="false">"Land der Testung / Member State of Test"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Certificate Issuer --> + <string name="green_certificate_attribute_certificate_issuer" translatable="false">"Zertifikataussteller / Certificate Issuer"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Unique Certificate Identifier --> + <string name="green_certificate_attribute_certificate_id" translatable="false">"Zertifikatkennung / Unique Certificate Identifier"</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Travel Notice German --> + <string name="green_certificate_attribute_certificate_travel_notice_german" translatable="false">"Diese Bescheinigung ist kein Reisedokument. Die wissenschaftlichen Erkenntnisse zu COVID-19 in den Bereichen Impfung, Testung und Genesung entwickeln sich fortlaufend weiter, auch im Hinblick auf neue besorgniserregende Virusvarianten. Bitte informieren Sie sich vor Reiseantritt über die am Zielort geltenden Gesundheitsmaßnahmen und entsprechenden Beschränkungen. Informationen über die in den jeweiligen EU-Ländern geltenden Einreisebestimmungen finden Sie unter https://reopen.europa.eu/de."</string> + <!-- XTXT: Green Certificate Detail Screen Attribute: Travel Notice English --> + <string name="green_certificate_attribute_certificate_travel_notice_english" translatable="false">"This certificate is not a travel document. The scientific evidence on COVID-19 vaccination, testing, and recovery continues to evolve, also in view of new variants of concern of the virus. Before traveling, please check the applicable public health measures and related restrictions applied at the point of destination. Information on the current travel restrictions that apply to EU countries is available at https://reopen.europa.eu/en."</string> + +</resources> diff --git a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml index e852e422e..0551f3bc0 100644 --- a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml @@ -26,4 +26,15 @@ <string name="request_gc_dialog_positive_button">OK</string> <!-- XBUT: Request green certificate exit dialog negative button --> <string name="request_gc_dialog_negative_button">Abbrechen</string> + <!-- XTXT: Detail green certificate title --> + <string name="detail_green_certificate_title">EU Digitales COVID-Testzertifikat</string> + <!-- XTXT: Detail green certificate test type --> + <string name="detail_green_certificate_test_type">SARS-CoV-2-Test</string> + <!-- XTXT: Detail green certificate card title --> + <string name="detail_green_certificate_card_title">"Testzertifikat"</string> + <!-- XTXT: Detail green certificate travel notice link en --> + <string name="green_certificate_travel_notice_link_en">"https://reopen.europa.eu/en"</string> + <!-- XTXT: Detail green certificate travel notice link de --> + <string name="green_certificate_travel_notice_link_de">"https://reopen.europa.eu/de"</string> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values/styles.xml b/Corona-Warn-App/src/main/res/values/styles.xml index f9da4f1b3..e81fe78b1 100644 --- a/Corona-Warn-App/src/main/res/values/styles.xml +++ b/Corona-Warn-App/src/main/res/values/styles.xml @@ -239,6 +239,10 @@ <item name="android:backgroundTint">@color/colorVaccinationCardBackground</item> </style> + <style name="Card.Greencertificate" parent="Card.NoElevation"> + <item name="android:backgroundTint">@color/colorVaccinationCardBackground</item> + </style> + <style name="Card.Vaccination.Ripple"> <item name="android:background">@drawable/grey_card_ripple</item> </style> @@ -358,6 +362,10 @@ <item name="android:textColor">@color/colorTextPrimary1</item> </style> + <style name="body1Medium" parent="@style/TextAppearance.MaterialComponents.Body1"> + <item name="android:textColor">@color/colorTextPrimary2</item> + </style> + <style name="body2" parent="@style/TextAppearance.MaterialComponents.Body2"> <item name="android:textColor">@color/colorTextPrimary1</item> </style> -- GitLab