From 05f1dd123f6dc0b754adab90b0fb2f75f82669e3 Mon Sep 17 00:00:00 2001 From: SamuraiKek Date: Tue, 31 Aug 2021 12:38:01 +0300 Subject: [PATCH 1/4] Adjusted booster display logic. --- .../ui/details/PersonDetailsFragmentTest.kt | 1 - .../details/items/VaccinationCertificateCard.kt | 16 +++++----------- .../vaccination/core/VaccinatedPerson.kt | 15 ++++++++++++--- .../vaccination/core/VaccinationCertificate.kt | 2 -- .../res/values-de/covid_certificate_strings.xml | 2 -- .../res/values/covid_certificate_strings.xml | 2 -- .../vaccination/core/VaccinatedPersonTest.kt | 2 -- 7 files changed, 17 insertions(+), 23 deletions(-) diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt index d75fbb9a32c..c311ecae8cb 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt @@ -248,7 +248,6 @@ class PersonDetailsFragmentTest : BaseUITest() { every { isFinalShot } returns final every { qrCodeToDisplay } returns CoilQrCode(ScreenshotCertificateTestData.vaccinationCertificate) every { isValid } returns true - every { isBooster } returns booster every { getState() } returns CwaCovidCertificate.State.Valid(Instant.now().plus(20)) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt index fcac3641829..7eed43fd856 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt @@ -31,14 +31,11 @@ class VaccinationCertificateCard(parent: ViewGroup) : val curItem = payloads.filterIsInstance().singleOrNull() ?: item val certificate = curItem.certificate root.setOnClickListener { curItem.onClick() } - vaccinationDosesInfo.text = when (certificate.isBooster) { - true -> context.getString(R.string.vaccination_booster_certificate_title) - else -> context.getString( - R.string.vaccination_certificate_doses, - certificate.doseNumber, - certificate.totalSeriesOfDoses - ) - } + vaccinationDosesInfo.text = context.getString( + R.string.vaccination_certificate_doses, + certificate.doseNumber, + certificate.totalSeriesOfDoses + ) certificateDate.text = context.getString( R.string.vaccination_certificate_vaccinated_on, @@ -57,9 +54,6 @@ class VaccinationCertificateCard(parent: ViewGroup) : // Invalid state first !certificate.isValid -> R.drawable.ic_certificate_invalid - // Booster Vaccination - certificate.isBooster -> R.drawable.ic_vaccination_immune - // Final shot certificate.isFinalShot -> when (curItem.status) { IMMUNITY -> R.drawable.ic_vaccination_immune diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt index de696fb0a43..1f73ae25a3b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt @@ -53,8 +53,7 @@ data class VaccinatedPerson( fun getVaccinationStatus(nowUTC: Instant = Instant.now()): Status { val daysToImmunity = getDaysUntilImmunity(nowUTC) ?: return Status.INCOMPLETE - val isImmune = daysToImmunity <= 0 || isFirstVaccinationDoseAfterRecovery() || - getNewestFullDose()?.isBooster == true + val isImmune = daysToImmunity <= 0 || isFirstVaccinationDoseAfterRecovery() || isBooster() return when { isImmune -> Status.IMMUNITY else -> Status.COMPLETE @@ -70,7 +69,7 @@ data class VaccinatedPerson( } private fun getNewestFullDose(): VaccinationCertificate? = vaccinationCertificates - .filter { it.doseNumber >= it.totalSeriesOfDoses } + .filter { it.doseNumber == it.totalSeriesOfDoses } .maxByOrNull { it.vaccinatedOn } private fun isFirstVaccinationDoseAfterRecovery(): Boolean { @@ -81,6 +80,16 @@ data class VaccinatedPerson( } } + private fun isBooster(): Boolean { + val boosterVaccination = getNewestFullDose()?.rawCertificate?.vaccination + return if (boosterVaccination != null) { + when (boosterVaccination.medicalProductId) { + BIONTECH, ASTRA, MODERNA -> boosterVaccination.doseNumber > 2 + else -> boosterVaccination.doseNumber > 1 + } + } else false + } + enum class Status { INCOMPLETE, COMPLETE, diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt index d3642cfb14d..5af00ca8812 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt @@ -25,6 +25,4 @@ interface VaccinationCertificate : CwaCovidCertificate { override val rawCertificate: VaccinationDccV1 val isFinalShot get() = doseNumber == totalSeriesOfDoses - - val isBooster get() = doseNumber > totalSeriesOfDoses } diff --git a/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml index e1ff7ac8766..a48c1d0c58c 100644 --- a/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml @@ -69,8 +69,6 @@ Impfung %1$d von %2$d Impfzertifikat - - Auffrischungsimpfung diff --git a/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml index 5df25bab2de..21de74421ee 100644 --- a/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml @@ -69,8 +69,6 @@ "Vaccination %1$d of %2$d" "Vaccination Certificate" - - Auffrischungsimpfung diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPersonTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPersonTest.kt index 93645a1cfa1..dd453c97eec 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPersonTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPersonTest.kt @@ -186,7 +186,6 @@ class VaccinatedPersonTest : BaseTest() { every { totalSeriesOfDoses } returns 2 every { rawCertificate.vaccination.doseNumber } returns doseNumber every { rawCertificate.vaccination.medicalProductId } returns "EU/1/20/1528" - every { isBooster } returns false } every { containerId } returns VaccinationCertificateContainerId("VaccinationCertificateContainerId") } @@ -231,7 +230,6 @@ class VaccinatedPersonTest : BaseTest() { every { totalSeriesOfDoses } returns 2 every { rawCertificate.vaccination.doseNumber } returns doseNumber every { rawCertificate.vaccination.medicalProductId } returns "EU/1/20/1528" - every { isBooster } returns false } every { containerId } returns VaccinationCertificateContainerId("VaccinationCertificateContainerId") From 6d9c4f15a7ae2ead7c64f7c17a9d9112a927454d Mon Sep 17 00:00:00 2001 From: SamuraiKek Date: Tue, 31 Aug 2021 12:57:34 +0300 Subject: [PATCH 2/4] Removed translated texts from 2.9 merge. --- .../src/main/res/values-bg/covid_certificate_strings.xml | 2 -- .../src/main/res/values-pl/covid_certificate_strings.xml | 2 -- .../src/main/res/values-ro/covid_certificate_strings.xml | 2 -- .../src/main/res/values-tr/covid_certificate_strings.xml | 2 -- 4 files changed, 8 deletions(-) diff --git a/Corona-Warn-App/src/main/res/values-bg/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-bg/covid_certificate_strings.xml index c4047aa2f5d..8f8a80236f5 100644 --- a/Corona-Warn-App/src/main/res/values-bg/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-bg/covid_certificate_strings.xml @@ -68,8 +68,6 @@ "Ваксинация %1$d от %2$d" "Сертификат за ваксинация" - - "Ваксиниране с бустерна доза" diff --git a/Corona-Warn-App/src/main/res/values-pl/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-pl/covid_certificate_strings.xml index fb26cee8fef..66f1cffad4a 100644 --- a/Corona-Warn-App/src/main/res/values-pl/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-pl/covid_certificate_strings.xml @@ -68,8 +68,6 @@ "Szczepienie %1$d %2$d" "Certyfikat szczepienia" - - "Szczepienie przypominające" diff --git a/Corona-Warn-App/src/main/res/values-ro/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-ro/covid_certificate_strings.xml index 2252ec66f55..b391dd41dc8 100644 --- a/Corona-Warn-App/src/main/res/values-ro/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-ro/covid_certificate_strings.xml @@ -68,8 +68,6 @@ "Vaccinarea %1$d din %2$d" "Certificat de vaccinare" - - "Vaccinarea de rapel" diff --git a/Corona-Warn-App/src/main/res/values-tr/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-tr/covid_certificate_strings.xml index 1ac0ba5a40d..f5f3fe7da62 100644 --- a/Corona-Warn-App/src/main/res/values-tr/covid_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/covid_certificate_strings.xml @@ -68,8 +68,6 @@ "Aşı %1$d / %2$d" "Aşı Sertifikası" - - "Hatırlatma Aşısı" From eb4a90eaa587fb86801280aaef2a7f49789f3a56 Mon Sep 17 00:00:00 2001 From: SamuraiKek Date: Tue, 31 Aug 2021 15:10:04 +0300 Subject: [PATCH 3/4] Priority is determined only by latest date. --- .../person/core/PersonCertificatesExtensions.kt | 6 ------ .../covidcertificate/vaccination/core/VaccinatedPerson.kt | 4 +--- .../person/core/PersonCertificatesExtensionsTest.kt | 4 ++-- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt index de90e849b92..02c37e3c785 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt @@ -75,9 +75,6 @@ private fun Collection.rule3FindRecentLastShot( nowUtc: Instant ): CwaCovidCertificate? = this .filterIsInstance() - .filter { - with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses } - } .filter { Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days > 14 } @@ -113,9 +110,6 @@ private fun Collection.rule5findTooRecentFinalShot( nowUtc: Instant ): CwaCovidCertificate? = this .filterIsInstance() - .filter { - with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses } - } .filter { Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days <= 14 } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt index 1f73ae25a3b..7b645764140 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt @@ -68,9 +68,7 @@ data class VaccinatedPerson( return IMMUNITY_WAITING_DAYS - Days.daysBetween(newestFullDose.vaccinatedOn, today).days } - private fun getNewestFullDose(): VaccinationCertificate? = vaccinationCertificates - .filter { it.doseNumber == it.totalSeriesOfDoses } - .maxByOrNull { it.vaccinatedOn } + private fun getNewestFullDose(): VaccinationCertificate? = vaccinationCertificates.maxByOrNull { it.vaccinatedOn } private fun isFirstVaccinationDoseAfterRecovery(): Boolean { val vaccinationDetails = getNewestFullDose()?.rawCertificate?.vaccination diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensionsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensionsTest.kt index c5af40a47ee..d3341cd0013 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensionsTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensionsTest.kt @@ -149,10 +149,10 @@ class PersonCertificatesExtensionsTest : BaseTest() { certificates.remove(third) certificates.findHighestPriorityCertificate(time) shouldBe fourth certificates.remove(fourth) - certificates.findHighestPriorityCertificate(time) shouldBe fifth - certificates.remove(fifth) certificates.findHighestPriorityCertificate(time) shouldBe sixth certificates.remove(sixth) + certificates.findHighestPriorityCertificate(time) shouldBe fifth + certificates.remove(fifth) certificates.findHighestPriorityCertificate(time) shouldBe seventh certificates.remove(seventh) certificates.findHighestPriorityCertificate(time) shouldBe eighth From 71fc51e1db122d8baf1a4697b44b131641bbe61e Mon Sep 17 00:00:00 2001 From: SamuraiKek Date: Tue, 31 Aug 2021 15:23:46 +0300 Subject: [PATCH 4/4] Removed line of code by mistake. --- .../covidcertificate/vaccination/core/VaccinatedPerson.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt index 7b645764140..bc57cb7597d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt @@ -68,7 +68,9 @@ data class VaccinatedPerson( return IMMUNITY_WAITING_DAYS - Days.daysBetween(newestFullDose.vaccinatedOn, today).days } - private fun getNewestFullDose(): VaccinationCertificate? = vaccinationCertificates.maxByOrNull { it.vaccinatedOn } + private fun getNewestFullDose(): VaccinationCertificate? = vaccinationCertificates + .filter { it.doseNumber >= it.totalSeriesOfDoses } + .maxByOrNull { it.vaccinatedOn } private fun isFirstVaccinationDoseAfterRecovery(): Boolean { val vaccinationDetails = getNewestFullDose()?.rawCertificate?.vaccination