From fbb2ffc097caec4fb2810f3d08212e2ceca5f6fc Mon Sep 17 00:00:00 2001 From: oleksandrsarapulovgl <82441124+oleksandrsarapulovgl@users.noreply.github.com> Date: Fri, 23 Jul 2021 10:42:38 +0300 Subject: [PATCH] Feature/os alignment new (#89) * Updated wallet texts displaying * Added certificate type to claim certificate page * Implemented manufacturer check up * Updated * Update * Update * Update * Update * Update * Update --- .idea/sonarIssues.xml | 90 +++++++++++++++ .../0223df1f55766185176f6d7c6c73166998c9b604} | 0 .../4774f218010287c0da4585eacc9ffd61e11503ce} | 0 .../76dac2609fb4a81960df30700eef5f1189545226} | 0 ... a506d20ab76082e565759f0570e17bdd3438fe20} | 0 .idea/sonarlint/issuestore/index.pb | 16 +-- .../certificate/CertificateCardsAdapter.kt | 3 +- .../claim/ClaimCertificateFragment.kt | 49 ++++---- .../certificate/claim/RecoveryViewHolder.kt | 9 +- .../certificate/claim/TestViewHolder.kt | 15 +-- .../claim/VaccinationViewHolder.kt | 7 +- .../certificate/claim/ViewHolderUtils.kt | 56 +++++++++ .../view/ViewCertificateFragment.kt | 42 +++---- .../app/android/data/CertificateModel.kt | 31 ++++- .../wallet/app/android/data/local/Mapper.kt | 74 +++++++++++- .../res/layout/fragment_certificate_claim.xml | 108 ++++++++++-------- .../res/layout/fragment_certificate_view.xml | 96 ++++++---------- app/src/main/res/layout/item_recovery.xml | 37 +++--- app/src/main/res/layout/item_test.xml | 71 ++++++++---- app/src/main/res/layout/item_vaccination.xml | 34 ++++-- app/src/main/res/values/strings.xml | 26 ++--- 21 files changed, 505 insertions(+), 259 deletions(-) rename .idea/sonarlint/issuestore/{1/9/19ce0fd1a612f464942365b703899170a83ca69c => 0/2/0223df1f55766185176f6d7c6c73166998c9b604} (100%) rename .idea/sonarlint/issuestore/{1/b/1b91abc18e5933645a5c49601bf7a7c50d860768 => 4/7/4774f218010287c0da4585eacc9ffd61e11503ce} (100%) rename .idea/sonarlint/issuestore/{4/f/4f60981f36816db5bcc34a01c29b496f009b43b7 => 7/6/76dac2609fb4a81960df30700eef5f1189545226} (100%) rename .idea/sonarlint/issuestore/a/5/{a5f5b6bca6a2efb76a4c5fa919d43eb5353e6a03 => a506d20ab76082e565759f0570e17bdd3438fe20} (100%) create mode 100644 app/src/main/java/dgca/wallet/app/android/certificate/claim/ViewHolderUtils.kt diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index b4698ceb..76ddcb47 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -123,6 +123,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -333,6 +393,16 @@ + + + + + + + + + + @@ -823,6 +893,11 @@ + + + + + @@ -848,11 +923,26 @@ + + + + + + + + + + + + + + + diff --git a/.idea/sonarlint/issuestore/1/9/19ce0fd1a612f464942365b703899170a83ca69c b/.idea/sonarlint/issuestore/0/2/0223df1f55766185176f6d7c6c73166998c9b604 similarity index 100% rename from .idea/sonarlint/issuestore/1/9/19ce0fd1a612f464942365b703899170a83ca69c rename to .idea/sonarlint/issuestore/0/2/0223df1f55766185176f6d7c6c73166998c9b604 diff --git a/.idea/sonarlint/issuestore/1/b/1b91abc18e5933645a5c49601bf7a7c50d860768 b/.idea/sonarlint/issuestore/4/7/4774f218010287c0da4585eacc9ffd61e11503ce similarity index 100% rename from .idea/sonarlint/issuestore/1/b/1b91abc18e5933645a5c49601bf7a7c50d860768 rename to .idea/sonarlint/issuestore/4/7/4774f218010287c0da4585eacc9ffd61e11503ce diff --git a/.idea/sonarlint/issuestore/4/f/4f60981f36816db5bcc34a01c29b496f009b43b7 b/.idea/sonarlint/issuestore/7/6/76dac2609fb4a81960df30700eef5f1189545226 similarity index 100% rename from .idea/sonarlint/issuestore/4/f/4f60981f36816db5bcc34a01c29b496f009b43b7 rename to .idea/sonarlint/issuestore/7/6/76dac2609fb4a81960df30700eef5f1189545226 diff --git a/.idea/sonarlint/issuestore/a/5/a5f5b6bca6a2efb76a4c5fa919d43eb5353e6a03 b/.idea/sonarlint/issuestore/a/5/a506d20ab76082e565759f0570e17bdd3438fe20 similarity index 100% rename from .idea/sonarlint/issuestore/a/5/a5f5b6bca6a2efb76a4c5fa919d43eb5353e6a03 rename to .idea/sonarlint/issuestore/a/5/a506d20ab76082e565759f0570e17bdd3438fe20 diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb index 1d667db5..d8845623 100644 --- a/.idea/sonarlint/issuestore/index.pb +++ b/.idea/sonarlint/issuestore/index.pb @@ -67,11 +67,11 @@ m =app/src/main/java/dgca/wallet/app/android/di/NetworkModule.kt,a/5/a5240ece1f0757097e00f43d148a437b74524977 v Fapp/src/main/java/dgca/wallet/app/android/network/HeaderInterceptor.kt,8/f/8f7d10077315765fd963586fb7c6992ade217f49 -{ -Ksrc/main/java/dgca/verifier/app/engine/data/source/rules/RulesDataSource.kt,a/5/a5f5b6bca6a2efb76a4c5fa919d43eb5353e6a03 -v -Fsrc/main/java/dgca/verifier/app/engine/domain/rules/GetRulesUseCase.kt,1/9/19ce0fd1a612f464942365b703899170a83ca69c -} -Msrc/main/java/dgca/verifier/app/engine/domain/rules/DefaultGetRulesUseCase.kt,4/f/4f60981f36816db5bcc34a01c29b496f009b43b7 - -Qsrc/test/java/dgca/verifier/app/engine/domain/rules/DefaultGetRulesUseCaseTest.kt,1/b/1b91abc18e5933645a5c49601bf7a7c50d860768 \ No newline at end of file +r +Bapp/src/main/java/dgca/wallet/app/android/data/CertificateModel.kt,7/6/76dac2609fb4a81960df30700eef5f1189545226 +n +>app/src/main/java/dgca/wallet/app/android/data/local/Mapper.kt,a/5/a506d20ab76082e565759f0570e17bdd3438fe20 + +Tapp/src/main/java/dgca/wallet/app/android/certificate/claim/VaccinationViewHolder.kt,4/7/4774f218010287c0da4585eacc9ffd61e11503ce + +Papp/src/main/java/dgca/wallet/app/android/certificate/CertificateCardsAdapter.kt,0/2/0223df1f55766185176f6d7c6c73166998c9b604 \ No newline at end of file diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/CertificateCardsAdapter.kt b/app/src/main/java/dgca/wallet/app/android/certificate/CertificateCardsAdapter.kt index 6d79b8c8..47923c77 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/CertificateCardsAdapter.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/CertificateCardsAdapter.kt @@ -47,7 +47,8 @@ class CertificateCardsAdapter( binding.titleView.text = when { certificateCard.certificate.vaccinations?.first() != null -> binding.root.resources.getString( R.string.vaccination, - certificateCard.certificate.vaccinations.first().doseNumber.toString() + certificateCard.certificate.vaccinations.first().doseNumber.toString(), + certificateCard.certificate.vaccinations.first().totalSeriesOfDoses.toString() ) certificateCard.certificate.recoveryStatements?.isNotEmpty() == true -> binding.root.resources.getString(R.string.recovery) certificateCard.certificate.tests?.isNotEmpty() == true -> binding.root.resources.getString(R.string.test) diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/ClaimCertificateFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/ClaimCertificateFragment.kt index e3cd7955..adb293c8 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/claim/ClaimCertificateFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/ClaimCertificateFragment.kt @@ -34,13 +34,10 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import dagger.hilt.android.AndroidEntryPoint -import dgca.wallet.app.android.FORMATTED_YEAR_MONTH_DAY import dgca.wallet.app.android.R -import dgca.wallet.app.android.YEAR_MONTH_DAY import dgca.wallet.app.android.data.CertificateModel import dgca.wallet.app.android.data.getCertificateListData import dgca.wallet.app.android.databinding.FragmentCertificateClaimBinding -import dgca.wallet.app.android.parseFromTo @AndroidEntryPoint class ClaimCertificateFragment : Fragment() { @@ -88,31 +85,31 @@ class ClaimCertificateFragment : Fragment() { _binding = null } + private fun CertificateModel.getType() = when { + this.vaccinations?.isNotEmpty() == true -> getString( + R.string.vaccination, + this.vaccinations.first().doseNumber.toString(), + this.vaccinations.first().totalSeriesOfDoses.toString() + ) + this.recoveryStatements?.isNotEmpty() == true -> getString(R.string.recovery) + this.tests?.isNotEmpty() == true -> getString(R.string.test) + else -> "" + } + private fun showUserData(certificate: CertificateModel) { - binding.personFullName.text = certificate.getFullName() - binding.personStandardisedFamilyName.text = certificate.person.standardisedFamilyName - binding.personStandardisedFamilyNameTitle.isVisible = true - val standardisedGivenName = certificate.person.standardisedGivenName - if (standardisedGivenName?.isNotBlank() == true) { - binding.personStandardisedGivenName.text = standardisedGivenName - View.VISIBLE - } else { - View.GONE - }.apply { - binding.personStandardisedGivenNameTitle.visibility = this - binding.personStandardisedGivenName.visibility = this - } + certificate.getType().bindText(binding.certificateTypeTitle, binding.certificateTypeValue) + certificate.getFullName().bindText(binding.nameTitle, binding.personFullName) - val dateOfBirth = certificate.dateOfBirth.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) - if (dateOfBirth.isNotBlank()) { - binding.dateOfBirth.text = dateOfBirth - View.VISIBLE - } else { - View.GONE - }.apply { - binding.dateOfBirthTitle.visibility = this - binding.dateOfBirth.visibility = this - } +// val dateOfBirth = certificate.dateOfBirth.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) +// if (dateOfBirth.isNotBlank()) { +// binding.dateOfBirth.text = dateOfBirth +// View.VISIBLE +// } else { +// View.GONE +// }.apply { +// binding.dateOfBirthTitle.visibility = this +// binding.dateOfBirth.visibility = this +// } } private fun onViewModelEvent(event: ClaimCertificateViewModel.ClaimCertEvent) { diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/RecoveryViewHolder.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/RecoveryViewHolder.kt index 9a050a54..62eb49f1 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/claim/RecoveryViewHolder.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/RecoveryViewHolder.kt @@ -35,10 +35,13 @@ class RecoveryViewHolder(private val binding: ItemRecoveryBinding) : RecyclerVie fun bind(data: RecoveryModel) { binding.diseaseValue.text = data.disease.value - binding.validFromValue.text = data.certificateValidFrom.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) - binding.validUntilValue.text = data.certificateValidUntil.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) + val validFrom = data.certificateValidFrom.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) + val validTo = data.certificateValidUntil.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) + val validFromTo = if (validFrom.isNotBlank() && validTo.isNotBlank()) "$validFrom - $validTo" else "" + validFromTo.bindText(binding.validFromTitle, binding.validFromValue) binding.dateOfPositiveValue.text = data.dateOfFirstPositiveTest.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) - binding.countryValue.text = data.countryOfVaccination + data.countryOfVaccination.bindCountryWith(binding.countryTitle, binding.countryValue) + data.certificateIssuer.bindText(binding.certificateIssuerTitle, binding.certificateIssuerValue) } companion object { diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt index f2fe1333..29faae9d 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/TestViewHolder.kt @@ -35,20 +35,13 @@ class TestViewHolder(private val binding: ItemTestBinding) : RecyclerView.ViewHo fun bind(data: TestModel) { binding.testResultValue.text = data.resultType.value binding.dateOfCollectionValue.text = data.dateTimeOfCollection.toFormattedDateTime() - val dateTimeOfTestResult = data.dateTimeOfTestResult?.toFormattedDateTime() - if (dateTimeOfTestResult?.isNotBlank() == true) { - binding.dateOfTestResultValue.text = dateTimeOfTestResult - View.VISIBLE - } else { - View.GONE - }.apply { - binding.dateOfTestResultTitle.visibility = this - binding.dateOfTestResultValue.visibility = this - } + (data.dateTimeOfTestResult?.toFormattedDateTime() ?: "").bindText(binding.dateOfTestResultTitle, binding.dateOfTestResultValue) binding.diseaseValue.text = data.disease.value binding.typeOfTestValue.text = data.typeOfTest.value - binding.countryValue.text = data.countryOfVaccination + data.testingCentre.bindText(binding.testingCenterTitle, binding.testingCenterValue) + data.countryOfVaccination.bindCountryWith(binding.countryTitle, binding.countryValue) + data.certificateIssuer.bindText(binding.certificateIssuerTitle, binding.certificateIssuerValue) } companion object { diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/VaccinationViewHolder.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/VaccinationViewHolder.kt index 4d9dda2c..c12d51f3 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/claim/VaccinationViewHolder.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/VaccinationViewHolder.kt @@ -36,9 +36,10 @@ class VaccinationViewHolder(private val binding: ItemVaccinationBinding) : Recyc fun bind(data: VaccinationModel) { binding.dateValue.text = data.dateOfVaccination.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) binding.diseaseValue.text = data.disease.value - binding.doseTotalNumberValue.text = data.totalSeriesOfDoses.toString() - binding.doseSequenceValue.text = data.doseNumber.toString() - binding.countryValue.text = data.countryOfVaccination + data.manufacturer.value.bindText(binding.manufacturerTitle, binding.manufacturerValue) + data.vaccine.value.bindText(binding.vaccineOrProphylaxisTitle, binding.vaccineOrProphylaxisValue) + data.countryOfVaccination.bindCountryWith(binding.countryTitle, binding.countryValue) + data.certificateIssuer.bindText(binding.certificateIssuerTitle, binding.certificateIssuerValue) } companion object { diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/claim/ViewHolderUtils.kt b/app/src/main/java/dgca/wallet/app/android/certificate/claim/ViewHolderUtils.kt new file mode 100644 index 00000000..3f8b0933 --- /dev/null +++ b/app/src/main/java/dgca/wallet/app/android/certificate/claim/ViewHolderUtils.kt @@ -0,0 +1,56 @@ +/* + * ---license-start + * eu-digital-green-certificates / dgca-wallet-app-android + * --- + * Copyright (C) 2021 T-Systems International GmbH and all other contributors + * --- + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ---license-end + * + * Created by osarapulov on 7/22/21 8:42 PM + */ + +package dgca.wallet.app.android.certificate.claim + +import android.view.View +import android.widget.TextView +import java.util.* + + +fun String.bindCountryWith(countryTitleView: View, countryValueView: TextView) { + val issuerCountry = + if (this.isNotBlank()) Locale("", this).displayCountry else "" + issuerCountry.apply { + if (this.isNotBlank()) { + countryValueView.text = this + View.VISIBLE + } else { + View.GONE + }.apply { + countryTitleView.visibility = this + countryValueView.visibility = this + } + } +} + +fun String.bindText(titleView: View, valueView: TextView) = apply { + if (this.isNotBlank()) { + valueView.text = this + View.VISIBLE + } else { + View.GONE + }.apply { + titleView.visibility = this + valueView.visibility = this + } +} \ No newline at end of file diff --git a/app/src/main/java/dgca/wallet/app/android/certificate/view/ViewCertificateFragment.kt b/app/src/main/java/dgca/wallet/app/android/certificate/view/ViewCertificateFragment.kt index f57aeb0d..c42fa359 100644 --- a/app/src/main/java/dgca/wallet/app/android/certificate/view/ViewCertificateFragment.kt +++ b/app/src/main/java/dgca/wallet/app/android/certificate/view/ViewCertificateFragment.kt @@ -32,14 +32,12 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import dagger.hilt.android.AndroidEntryPoint -import dgca.wallet.app.android.FORMATTED_YEAR_MONTH_DAY import dgca.wallet.app.android.R -import dgca.wallet.app.android.YEAR_MONTH_DAY import dgca.wallet.app.android.certificate.claim.CertListAdapter +import dgca.wallet.app.android.certificate.claim.bindText import dgca.wallet.app.android.data.CertificateModel import dgca.wallet.app.android.data.getCertificateListData import dgca.wallet.app.android.databinding.FragmentCertificateViewBinding -import dgca.wallet.app.android.parseFromTo @AndroidEntryPoint class ViewCertificateFragment : Fragment() { @@ -76,7 +74,8 @@ class ViewCertificateFragment : Fragment() { binding.title.text = when { certificate.vaccinations?.first() != null -> binding.root.resources.getString( R.string.vaccination, - certificate.vaccinations.first().doseNumber.toString() + certificate.vaccinations.first().doseNumber.toString(), + certificate.vaccinations.first().totalSeriesOfDoses.toString() ) certificate.recoveryStatements?.isNotEmpty() == true -> binding.root.resources.getString(R.string.recovery) certificate.tests?.isNotEmpty() == true -> binding.root.resources.getString(R.string.test) @@ -118,31 +117,18 @@ class ViewCertificateFragment : Fragment() { } private fun showUserData(certificate: CertificateModel) { - binding.nameTitle.isVisible = true - binding.personFullName.text = certificate.getFullName() - binding.personStandardisedFamilyName.text = certificate.person.standardisedFamilyName - binding.personStandardisedFamilyNameTitle.isVisible = true - val standardisedGivenName = certificate.person.standardisedGivenName - if (standardisedGivenName?.isNotBlank() == true) { - binding.personStandardisedGivenName.text = standardisedGivenName - View.VISIBLE - } else { - View.GONE - }.apply { - binding.personStandardisedGivenNameTitle.visibility = this - binding.personStandardisedGivenName.visibility = this - } + certificate.getFullName().bindText(binding.nameTitle, binding.personFullName) - val dateOfBirthday = certificate.dateOfBirth.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) - if (dateOfBirthday.isNotBlank()) { - binding.dateOfBirth.text = dateOfBirthday - View.VISIBLE - } else { - View.GONE - }.apply { - binding.dateOfBirthTitle.visibility = this - binding.dateOfBirth.visibility = this - } +// val dateOfBirthday = certificate.dateOfBirth.parseFromTo(YEAR_MONTH_DAY, FORMATTED_YEAR_MONTH_DAY) +// if (dateOfBirthday.isNotBlank()) { +// binding.dateOfBirth.text = dateOfBirthday +// View.VISIBLE +// } else { +// View.GONE +// }.apply { +// binding.dateOfBirthTitle.visibility = this +// binding.dateOfBirth.visibility = this +// } } private fun onViewModelEvent(event: ViewCertificateViewModel.ViewCertEvent) { diff --git a/app/src/main/java/dgca/wallet/app/android/data/CertificateModel.kt b/app/src/main/java/dgca/wallet/app/android/data/CertificateModel.kt index 7bce03c4..9003dd32 100644 --- a/app/src/main/java/dgca/wallet/app/android/data/CertificateModel.kt +++ b/app/src/main/java/dgca/wallet/app/android/data/CertificateModel.kt @@ -29,6 +29,7 @@ data class CertificateModel( val tests: List?, val recoveryStatements: List? ) { + fun getFullName(): String { val givenName: String? = person.givenName?.trim() val familyName: String? = person.familyName?.trim() @@ -62,9 +63,9 @@ data class PersonModel( data class VaccinationModel( override val disease: DiseaseType, - val vaccine: String, + val vaccine: VaccinePropylaxisType, val medicinalProduct: String, - val manufacturer: String, + val manufacturer: ManufacturerType, val doseNumber: Int, val totalSeriesOfDoses: Int, val dateOfVaccination: String, @@ -104,6 +105,32 @@ enum class TypeOfTest(val value: String) { UNDEFINED("") } +enum class VaccinePropylaxisType(val value: String) { + SARS_CoV_2_antigen_vaccine("SARS-CoV-2 antigen vaccine"), + SARS_CoV_2_mRNA_vaccine("SARS-CoV-2 mRNA vaccine"), + covid_19_vaccines("covid-19 vaccines"), + UNDEFINED("") +} + +enum class ManufacturerType(val value: String) { + AstraZenecaAB("AstraZenecaAB"), + BiontechManufacturingGmbH("BiontechManufacturingGmbH"), + Janssen_CilagInternational("Janssen-CilagInternational"), + ModernaBiotechSpainS_L("ModernaBiotechSpainS.L."), + CurevacAG("CurevacAG"), + CanSinoBiologics("CanSinoBiologics"), + ChinaSinopharmInternationalCorp_Beijinglocation("ChinaSinopharmInternationalCorp.-Beijinglocation"), + SinopharmWeiqidaEuropePharmaceuticals_r_o_Praguelocation("SinopharmWeiqidaEuropePharmaceuticals.r.o.-Praguelocation"), + SinopharmZhijun_Shenzhen_PharmaceuticalCo_Ltd_Shenzhenlocation("SinopharmZhijun(Shenzhen)PharmaceuticalCo.Ltd.-Shenzhenlocation"), + NovavaxCZAS("NovavaxCZAS"), + GamaleyaResearchInstitute("GamaleyaResearchInstitute"), + VectorInstitute("VectorInstitute"), + SinovacBiotech("SinovacBiotech"), + BharatBiotech("BharatBiotech"), + SerumInstituteOfIndiaPrivateLimited("SerumInstituteOfIndiaPrivateLimited"), + UNDEFINED("UNDEFINED") +} + data class RecoveryModel( override val disease: DiseaseType, val dateOfFirstPositiveTest: String, diff --git a/app/src/main/java/dgca/wallet/app/android/data/local/Mapper.kt b/app/src/main/java/dgca/wallet/app/android/data/local/Mapper.kt index 43cb52f7..f379eb99 100644 --- a/app/src/main/java/dgca/wallet/app/android/data/local/Mapper.kt +++ b/app/src/main/java/dgca/wallet/app/android/data/local/Mapper.kt @@ -82,12 +82,38 @@ fun TypeOfTestCode.toTypeOfTest(): TypeOfTest = when (this) { else -> TypeOfTest.UNDEFINED } +fun VaccinePropylaxisCode.toVaccineProphylaxisType(): VaccinePropylaxisType = when (this) { + VaccinePropylaxisCode.SARS_CoV_2_antigen_vaccine -> VaccinePropylaxisType.SARS_CoV_2_antigen_vaccine + VaccinePropylaxisCode.SARS_CoV_2_mRNA_vaccine -> VaccinePropylaxisType.SARS_CoV_2_mRNA_vaccine + VaccinePropylaxisCode.covid_19_vaccines -> VaccinePropylaxisType.covid_19_vaccines + else -> VaccinePropylaxisType.UNDEFINED +} + +fun ManufacturerCode.toManufacturerType(): ManufacturerType = when (this) { + ManufacturerCode.AstraZenecaAB -> ManufacturerType.AstraZenecaAB + ManufacturerCode.BiontechManufacturingGmbH -> ManufacturerType.BiontechManufacturingGmbH + ManufacturerCode.Janssen_CilagInternational -> ManufacturerType.Janssen_CilagInternational + ManufacturerCode.ModernaBiotechSpainS_L -> ManufacturerType.ModernaBiotechSpainS_L + ManufacturerCode.CurevacAG -> ManufacturerType.CurevacAG + ManufacturerCode.CanSinoBiologics -> ManufacturerType.CanSinoBiologics + ManufacturerCode.ChinaSinopharmInternationalCorp_Beijinglocation -> ManufacturerType.ChinaSinopharmInternationalCorp_Beijinglocation + ManufacturerCode.SinopharmWeiqidaEuropePharmaceuticals_r_o_Praguelocation -> ManufacturerType.SinopharmWeiqidaEuropePharmaceuticals_r_o_Praguelocation + ManufacturerCode.SinopharmZhijun_Shenzhen_PharmaceuticalCo_Ltd_Shenzhenlocation -> ManufacturerType.SinopharmZhijun_Shenzhen_PharmaceuticalCo_Ltd_Shenzhenlocation + ManufacturerCode.NovavaxCZAS -> ManufacturerType.NovavaxCZAS + ManufacturerCode.GamaleyaResearchInstitute -> ManufacturerType.GamaleyaResearchInstitute + ManufacturerCode.VectorInstitute -> ManufacturerType.VectorInstitute + ManufacturerCode.SinovacBiotech -> ManufacturerType.SinovacBiotech + ManufacturerCode.BharatBiotech -> ManufacturerType.BharatBiotech + ManufacturerCode.SerumInstituteOfIndiaPrivateLimited -> ManufacturerType.SerumInstituteOfIndiaPrivateLimited + else -> ManufacturerType.UNDEFINED +} + fun Vaccination.toVaccinationModel(): VaccinationModel { return VaccinationModel( disease.toDiseaseCode().toDiseaseType(), - vaccine, + vaccine.toVaccineProphylaxisCode().toVaccineProphylaxisType(), medicinalProduct, - manufacturer, + manufacturer.toManufacturerCode().toManufacturerType(), doseNumber, totalSeriesOfDoses, dateOfVaccination, @@ -117,11 +143,55 @@ fun String.toTypeOfTestCode(): TypeOfTestCode = when (this) { else -> TypeOfTestCode.UNDEFINED } +fun String.toVaccineProphylaxisCode(): VaccinePropylaxisCode { + VaccinePropylaxisCode.values().forEach { + if (it.value == this) { + return it + } + } + return VaccinePropylaxisCode.UNDEFINED +} + +fun String.toManufacturerCode(): ManufacturerCode { + ManufacturerCode.values().forEach { + if (it.value == this) { + return it + } + } + return ManufacturerCode.UNDEFINED +} + enum class DiseaseCode(val value: String) { COVID_19("840539006"), UNDEFINED("") } +enum class VaccinePropylaxisCode(val value: String) { + SARS_CoV_2_antigen_vaccine("1119305005"), + SARS_CoV_2_mRNA_vaccine("1119349007"), + covid_19_vaccines("J07BX03"), + UNDEFINED("") +} + +enum class ManufacturerCode(val value: String) { + AstraZenecaAB("ORG-100001699"), + BiontechManufacturingGmbH("ORG-100030215"), + Janssen_CilagInternational("ORG-100001417"), + ModernaBiotechSpainS_L("ORG-100031184"), + CurevacAG("ORG-100006270"), + CanSinoBiologics("ORG-100013793"), + ChinaSinopharmInternationalCorp_Beijinglocation("ORG-100020693"), + SinopharmWeiqidaEuropePharmaceuticals_r_o_Praguelocation("ORG-100010771"), + SinopharmZhijun_Shenzhen_PharmaceuticalCo_Ltd_Shenzhenlocation("ORG-100024420"), + NovavaxCZAS("ORG-100032020"), + GamaleyaResearchInstitute("Gamaleya-Research-Institute"), + VectorInstitute("Vector-Institute"), + SinovacBiotech("Sinovac-Biotech"), + BharatBiotech("Bharat-Biotech"), + SerumInstituteOfIndiaPrivateLimited("ORG-100001981"), + UNDEFINED("") +} + enum class TypeOfTestCode(val value: String) { NUCLEIC_ACID_AMPLIFICATION_WITH_PROBE_DETECTION("LP6464-4"), RAPID_IMMUNOASSAY("LP217198-3"), diff --git a/app/src/main/res/layout/fragment_certificate_claim.xml b/app/src/main/res/layout/fragment_certificate_claim.xml index fcedc9e1..9b512896 100644 --- a/app/src/main/res/layout/fragment_certificate_claim.xml +++ b/app/src/main/res/layout/fragment_certificate_claim.xml @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + - - + android:text="@string/certificate_type" + android:textSize="18sp" /> - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Vaccination 1 of 2" /> - - - + android:fontFamily="sans-serif-light" + android:text="@string/name" + android:textSize="18sp" /> + android:textColor="@color/black" + android:textSize="22sp" + tools:text="Gabriele Musterfrau" /> - + + + + + + + + + + + + + + + + android:text="@string/first_positive_test_result" /> + tools:text="Feb 26, 1998" /> + android:text="@string/certificate_valid_from_to_title" /> + tools:text="Feb 26, 1998 - Feb 26, 2000" /> + android:text="@string/target_disease" /> + tools:text="COVID-19" /> + android:text="@string/country_of_test" /> + tools:text="UA" /> + android:text="@string/certificate_issuer" /> - + tools:text="Custom Issuer Certificate" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_test.xml b/app/src/main/res/layout/item_test.xml index 3efbe52e..914db001 100644 --- a/app/src/main/res/layout/item_test.xml +++ b/app/src/main/res/layout/item_test.xml @@ -29,79 +29,94 @@ tools:background="@color/white"> + android:text="@string/date_of_test" /> + tools:text="Feb 26, 1998" /> + android:text="@string/target_disease" /> + tools:text="COVID-19" /> + android:text="@string/type_of_test_title" /> + tools:text="Rapid immunoassay" /> + android:text="@string/test_result_title" /> + tools:text="Negative" /> + android:text="@string/date_of_test_result_title" /> + + + + + tools:text="Custom Testing Center" /> + android:text="@string/issuer_country" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_vaccination.xml b/app/src/main/res/layout/item_vaccination.xml index 87147869..e47ab005 100644 --- a/app/src/main/res/layout/item_vaccination.xml +++ b/app/src/main/res/layout/item_vaccination.xml @@ -49,7 +49,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:text="@string/disease_or_agent_targeted_title" /> + android:text="@string/target_disease" /> + android:text="@string/manufacturer" /> + tools:text="Biontech Manufacturing GmbH" /> + android:text="@string/vaccine_of_prophylaxis" /> + tools:text="SARS-CoV-2 antigen vaccine" /> + android:text="@string/issuer_country" /> + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 552c862d..80b638b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,7 +11,7 @@ Scan Code Check Validity I agree, check validity - Vaccination Shot #%1$s + Vaccination %1$s of %2$s Recovery Test Your Certificate @@ -34,23 +34,17 @@ Wallet App Next - Standardised Family Name - Standardised Given Name - Date of Birth + Date of Vaccination - Total Series of Doses - Dose Number - Country of Vaccination - Country of Test - Country of Issuance - Disease or agent targeted - Date of Collection + Issuer Country + Country of Test + Target Disease + Date of Test Date of Test Result Type of Test Test Result - Certificate Valid From - Certificate Valid Until - Date of First Positive Test + Certificate Valid From - To + First Positive Test Result Tan: %1$s TAN cannot be empty Delete @@ -75,4 +69,8 @@ Your certificate allows you to enter the chosen country Your certificate is valid but has the following restrictions: Please note that this information is without guaranty. This functions check if the certificate matches the rules of the country you are traveling to at the given time. + Certificate Type + Certificate Issuer + Manufacturer + Vaccine or Prophylaxis