diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragmentTest.kt index 25da8d359faaca07df106fd801d3d1c396b62b47..c19839d46d1dbf9d72b428dec85bf4179944c579 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragmentTest.kt @@ -90,7 +90,7 @@ class VaccinationDetailsFragmentTest : BaseUITest() { every { lastName } returns "Mustermann" every { dateOfBirth } returns LocalDate.parse("01.02.1976", formatter) every { vaccinatedAt } returns LocalDate.parse("18.02.2021", formatter) - every { vaccineName } returns "Comirnaty (mRNA)" + every { vaccineTypeName } returns "Comirnaty (mRNA)" every { vaccineManufacturer } returns "BioNTech" every { certificateIssuer } returns "Landratsamt Musterstadt" every { certificateCountry } returns "Deutschland" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReportingSharedModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReportingSharedModule.kt index b753f30df1c058f28895e797933d93c78edd28f0..5d9d4d09f61d5e230380fa7528c5e13b45db1018 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReportingSharedModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/BugReportingSharedModule.kt @@ -13,6 +13,7 @@ import de.rki.coronawarnapp.bugreporting.censors.presencetracing.CheckInsCensor import de.rki.coronawarnapp.bugreporting.censors.presencetracing.TraceLocationCensor import de.rki.coronawarnapp.bugreporting.censors.submission.CoronaTestCensor import de.rki.coronawarnapp.bugreporting.censors.submission.PcrQrCodeCensor +import de.rki.coronawarnapp.bugreporting.censors.submission.PcrTeleTanCensor import de.rki.coronawarnapp.bugreporting.censors.submission.RACoronaTestCensor import de.rki.coronawarnapp.bugreporting.censors.submission.RatProfileCensor import de.rki.coronawarnapp.bugreporting.censors.submission.RatQrCodeCensor @@ -83,6 +84,10 @@ class BugReportingSharedModule { @IntoSet fun pcrQrCodeCensor(censor: PcrQrCodeCensor): BugCensor = censor + @Provides + @IntoSet + fun pcrTeleTanCensor(censor: PcrTeleTanCensor): BugCensor = censor + @Provides @IntoSet fun ratQrCodeCensor(censor: RatQrCodeCensor): BugCensor = censor diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/submission/PcrTeleTanCensor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/submission/PcrTeleTanCensor.kt new file mode 100644 index 0000000000000000000000000000000000000000..bcfe7cf9d7556ac96db54cd8119c4a76a4d3a18f --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/submission/PcrTeleTanCensor.kt @@ -0,0 +1,37 @@ +package de.rki.coronawarnapp.bugreporting.censors.submission + +import dagger.Reusable +import de.rki.coronawarnapp.bugreporting.censors.BugCensor +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import javax.inject.Inject + +@Reusable +class PcrTeleTanCensor @Inject constructor() : BugCensor { + + override suspend fun checkLog(message: String): BugCensor.CensorContainer? = mutex.withLock { + if (transientTeleTans.isEmpty()) return null + + var container = BugCensor.CensorContainer(message) + + transientTeleTans.forEach { + container = container.censor(it, PLACEHOLDER + it.takeLast(3)) + } + + return container.nullIfEmpty() + } + + companion object { + private val mutex = Mutex() + private val transientTeleTans = mutableSetOf<String>() + suspend fun addTan(tan: String) = mutex.withLock { + transientTeleTans.add(tan) + } + + suspend fun clearTans() = mutex.withLock { + transientTeleTans.clear() + } + + private const val PLACEHOLDER = "#######" + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt index 44689e8dc054a5755525af7bb407c8b5d17f57a6..13e0c4200c8bb8a7260096de7cdc745adb48fff8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt @@ -75,10 +75,8 @@ data class RACoronaTest( override val type: CoronaTest.Type get() = CoronaTest.Type.RAPID_ANTIGEN - private fun isOutdated(nowUTC: Instant, testConfig: CoronaTestConfig): Boolean { - val timeoutTime = sampleCollectedAt ?: testedAt - return timeoutTime.plus(testConfig.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated).isBefore(nowUTC) - } + private fun isOutdated(nowUTC: Instant, testConfig: CoronaTestConfig): Boolean = + testTakenAt.plus(testConfig.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated).isBefore(nowUTC) fun getState(nowUTC: Instant, testConfig: CoronaTestConfig) = if (testResult == RAT_NEGATIVE && isOutdated(nowUTC, testConfig)) { @@ -95,6 +93,9 @@ data class RACoronaTest( } } + val testTakenAt: Instant + get() = sampleCollectedAt ?: testedAt + override val isFinal: Boolean get() = testResult == RAT_REDEEMED diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensions.kt index 2b25be3b5417dd86fbc81fd315aa7325ea7af0ce..82089caae360a03f067421f36843c3ec73d20e08 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensions.kt @@ -28,10 +28,10 @@ fun RACoronaTest?.toSubmissionState(nowUTC: Instant = Instant.now(), coronaTestC else -> when (getState(nowUTC, coronaTestConfig)) { INVALID -> TestError POSITIVE -> { - if (isViewed) TestPositive(testRegisteredAt = testedAt) + if (isViewed) TestPositive(testRegisteredAt = testTakenAt) else TestResultReady } - NEGATIVE -> TestNegative(testRegisteredAt = testedAt) + NEGATIVE -> TestNegative(testRegisteredAt = testTakenAt) REDEEMED -> TestInvalid PENDING -> TestPending OUTDATED -> TestOutdated diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt index 0115a1991787f7576b0d9987a26e1cd1d7d05892..c6a73d1664800bf0d470842975753a5f3a0e66c4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.core.text.bold import androidx.core.text.buildSpannedString +import androidx.core.view.isGone import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionAntigenTestResultNegativeBinding @@ -68,7 +69,7 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ } } - val localTime = testAge.test.testedAt.toUserTimeZone() + val localTime = testAge.test.testTakenAt.toUserTimeZone() resultReceivedTimeAndDate.text = getString( R.string.coronatest_negative_antigen_result_time_date_placeholder, localTime.toString(DATE_FORMAT), @@ -87,6 +88,26 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ viewModel.onDeleteTestConfirmed() } ) + + val isAnonymousTest = with(testAge.test) { + firstName == null && lastName == null && dateOfBirth == null + } + + val titleString = if (isAnonymousTest) { + R.string.submission_test_result_antigen_negative_proof_title_anonymous + } else { + R.string.submission_test_result_antigen_negative_proof_title + } + negativeTestProofTitle.text = getString(titleString) + + val proofBodyString = if (isAnonymousTest) { + R.string.submission_test_result_antigen_negative_proof_body_anonymous + } else { + R.string.submission_test_result_antigen_negative_proof_body + } + negativeTestProofBody.text = getString(proofBodyString) + + negativeTestProofAdditionalInformation.isGone = isAnonymousTest } companion object { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeViewModel.kt index a7298cf45ea322eaf8e5656dbed334d72710f0cc..70990f8e12ca4f2f5b95082d58f6fa46701c4a23 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeViewModel.kt @@ -47,7 +47,7 @@ class RATResultNegativeViewModel @AssistedInject constructor( } val nowUTC = timeStamper.nowUTC - val age = nowUTC.millis - testedAt.millis + val age = nowUTC.millis - testTakenAt.millis val ageText = formatter.print(Duration(age).toPeriod()) return TestAge(test = this, ageText) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt index f92627014da54b10669180614e0d2f6847fa5ad1..71c530b2fd4043bb06f86ba62dc4d0ad07a782d9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.asLiveData import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.bugreporting.censors.submission.PcrTeleTanCensor import de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.exception.ExceptionCategory @@ -53,6 +54,8 @@ class SubmissionTanViewModel @AssistedInject constructor( } launch { + PcrTeleTanCensor.addTan(teletan.value) + val pcrTestAlreadyStored = submissionRepository.testForType(CoronaTest.Type.PCR).first() if (pcrTestAlreadyStored != null) { val coronaTestTAN = CoronaTestTAN.PCR(tan = teletan.value) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt index 2dd7bb977224e27df6c25d50ba67eb73d1317373..86a23f07d5c02a9d6f6d61907ce707655740ff90 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt @@ -81,7 +81,7 @@ constructor( return if (coronaTest is RACoronaTest) { context.getString( R.string.ag_homescreen_card_rapid_body_result_date, - coronaTest.testedAt.toDate()?.toUIFormat(context) + coronaTest.testTakenAt.toDate()?.toUIFormat(context) ) } else { context.getString( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt index 240b35bf342a849ffd0762b2bb6ebb3651373df6..597a623db6757ffc4bf574373ec8851176610a52 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt @@ -21,7 +21,7 @@ data class VaccinatedPerson( } val vaccineName: String - get() = vaccinationCertificates.first().vaccineName + get() = vaccinationCertificates.first().vaccineTypeName val firstName: String? get() = vaccinationCertificates.first().firstName diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationCertificate.kt index c0110eb0b0cedcb3ffeb61287ea42431a4db197b..92e96ea0bc9693463b15072b973bc6ab0e940e2d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinationCertificate.kt @@ -11,7 +11,7 @@ interface VaccinationCertificate { val dateOfBirth: LocalDate val vaccinatedAt: LocalDate - val vaccineName: String + val vaccineTypeName: String val vaccineManufacturer: String val medicalProductName: String diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt index e1f4174618247df92441f4195b932e580b508d64..9694f5f9d6875b21d3075f90a8dfd52068574962 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainer.kt @@ -74,7 +74,7 @@ data class VaccinationContainer internal constructor( override val totalSeriesOfDoses: Int get() = vaccination.totalSeriesOfDoses - override val vaccineName: String + override val vaccineTypeName: String get() = valueSet?.getDisplayText(vaccination.vaccineId) ?: vaccination.vaccineId override val vaccineManufacturer: String get() = valueSet?.getDisplayText(vaccination.marketAuthorizationHolderId) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragment.kt index b0dd687788c06031dd2e93bb8bb81e1a485a2ead..b76fd07b7e133d4deb7e7114b2f1e08eae9ecafc 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/ui/details/VaccinationDetailsFragment.kt @@ -93,9 +93,9 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail certificate.dateOfBirth.toDayFormat() ) vaccinatedAt.text = certificate.vaccinatedAt.toDayFormat() - vaccineName.text = certificate.vaccineName + vaccineName.text = certificate.medicalProductName vaccineManufacturer.text = certificate.vaccineManufacturer - medicalProductName.text = certificate.medicalProductName + vaccineTypeName.text = certificate.vaccineTypeName certificateIssuer.text = certificate.certificateIssuer certificateCountry.text = certificate.certificateCountry certificateId.text = certificate.certificateId diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_antigen_test_result_negative.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_antigen_test_result_negative.xml index bac63ca3f9ae0bbe2a9db6eb5b0ff539e6fe86a8..0a623944ccacd4ba886906078827ffa1bdbf0095 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_antigen_test_result_negative.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_antigen_test_result_negative.xml @@ -150,7 +150,7 @@ android:layout_height="wrap_content" android:layout_margin="@dimen/spacing_small" android:accessibilityHeading="true" - android:text="@string/submission_test_result_antigen_negative_proof_title" + tools:text="@string/submission_test_result_antigen_negative_proof_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/rapid_test_card" /> @@ -161,11 +161,22 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" - android:text="@string/submission_test_result_antigen_negative_proof_body" + tools:text="@string/submission_test_result_antigen_negative_proof_body" app:layout_constraintEnd_toEndOf="@id/negative_test_proof_title" app:layout_constraintStart_toStartOf="@id/negative_test_proof_title" app:layout_constraintTop_toBottomOf="@id/negative_test_proof_title" /> + <TextView + android:id="@+id/negative_test_proof_additional_information" + style="@style/subtitle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_small" + android:text="@string/submission_test_result_antigen_negative_proof_additional_information" + app:layout_constraintEnd_toEndOf="@id/negative_test_proof_body" + app:layout_constraintStart_toStartOf="@id/negative_test_proof_body" + app:layout_constraintTop_toBottomOf="@id/negative_test_proof_body" /> + <TextView android:id="@+id/submission_test_result_subtitle" style="@style/headline5" @@ -176,7 +187,7 @@ android:text="@string/submission_test_result_subtitle" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/negative_test_proof_body" /> + app:layout_constraintTop_toBottomOf="@id/negative_test_proof_additional_information" /> <de.rki.coronawarnapp.ui.view.SimpleStepEntry android:id="@+id/test_result_negative_steps_added" 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 813c447222ccdd80a9f2105c4b247e54a73768fe..e98b9665e99c0de724ad09a4fca6d0c1be017d59 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 @@ -189,7 +189,7 @@ android:text="@string/vaccination_details_vaccine_medical_product_name" /> <TextView - android:id="@+id/medical_product_name" + android:id="@+id/vaccine_type_name" style="@style/body2Medium" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/Corona-Warn-App/src/main/res/values-bg/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-bg/antigen_strings.xml index 06cc536543af05f208024d6243bdcb92ee453207..a68f5f5d1b1316c18578d74b68211659f5cb5996 100644 --- a/Corona-Warn-App/src/main/res/values-bg/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-bg/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"ÐÑмате поÑтавена диагноза за заразÑване Ñ Ð²Ð¸Ñ€ÑƒÑ SARS-CoV-2."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° проверка"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"Без Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° проверка"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Резултатът от Ð’Ð°ÑˆÐ¸Ñ Ñ‚ÐµÑÑ‚ е поверителен и не Ñте задължени да го ÑподелÑте. Ð’ Ñлучаите, когато това Ñе изиÑква по закон, можете да да използвате който и да е от предоÑтавените начини."</string> + <string name="submission_test_result_antigen_negative_proof_body">"Можете Ñъщо така да използвате резултата, който Ñе показва тук, като доказателÑтво за отрицателен резултат от бърз теÑÑ‚."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Тъй като показаниÑÑ‚ тук резултат е анонимизиран, той не може да Ñе използва като доказателÑтво за отрицателен резултат от бърз теÑÑ‚."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"МолÑ, имайте предвид, че трÑбва да предÑтавите доказателÑтво за резултата от Ð’Ð°ÑˆÐ¸Ñ Ð±ÑŠÑ€Ð· теÑÑ‚ единÑтвено ако законът изиÑква това. Можете да покажете резултата Ñи чрез приложението или по друг начин. За повече информациÑ, Ð¼Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¾Ð·Ð½Ð°Ð¹Ñ‚Ðµ Ñе Ñ ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ð¸Ñ‚Ðµ за приемане на доказателÑтва за теÑтване във Вашата федерална провинциÑ."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Резултатът ще е доÑтъпен Ñлед"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values-de/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-de/antigen_strings.xml index 5312822dc0cafb76cfd23d072aefa7a1a2e35219..c9b3779b5b3df64ea415c7a12a21924f4d712c37 100644 --- a/Corona-Warn-App/src/main/res/values-de/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"Das Virus SARS-CoV-2 wurde bei Ihnen nicht nachgewiesen."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Nachweis-Funktion"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"Keine Nachweis-Funktion"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Sie können den hier angezeigten Befund auch als Nachweis für das Vorliegen eines negativen Schnelltest-Ergebnisses verwenden.\n\nBitte beachten Sie, dass Sie nur dann einen Nachweis über Ihr Schnelltest-Ergebnis erbringen müssen, wenn dies gesetzlich festgelegt ist. Sie können den Nachweis über die App oder auch auf andere Weise erbringen. Informieren Sie sich hierzu bitte auch über die Kriterien für die Anerkennung von Test-Nachweisen in Ihrem Bundesland."</string> + <string name="submission_test_result_antigen_negative_proof_body">"Sie können den hier angezeigten Befund auch als Nachweis für das Vorliegen eines negativen Schnelltest-Ergebnisses verwenden."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Da der hier angezeigte Befund anonymisiert ist, kann er nicht als Nachweis für das Vorliegen eines negativen Schnelltest-Ergebnisses verwendet werden."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"Bitte beachten Sie, dass Sie nur dann einen Nachweis über Ihr Schnelltest-Ergebnis erbringen müssen, wenn dies gesetzlich festgelegt ist. Sie können den Nachweis über die App oder auch auf andere Weise erbringen. Informieren Sie sich hierzu bitte auch über die Kriterien für die Anerkennung von Test-Nachweisen in Ihrem Bundesland."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Ergebnis liegt vor seit"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml b/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml index b329bcf34e912a54717d0c4805861d9eabb62d80..9ca089fa3432638e041fc009017abbb0fd438b9a 100644 --- a/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/vaccination_strings.xml @@ -45,7 +45,7 @@ <item quantity="many">Sie haben nun alle derzeit geplanten Impfungen erhalten. Allerdings ist der Impfschutz erst in %1$d Tagen vollständig.</item> </plurals> <!-- XBUT: Vaccination List register additional vaccination button --> - <string name="vaccination_list_register_new_vaccination_button">Weitere Impfung registrieren</string> + <string name="vaccination_list_register_new_vaccination_button">Weitere Impfung hinzufügen</string> <!-- XBUT: Vaccination List delete button --> <string name="vaccination_list_delete_button">Entfernen</string> <!-- XTXT: Vaccination List deletion dialog title--> diff --git a/Corona-Warn-App/src/main/res/values-en/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-en/antigen_strings.xml index 41e6204345ae0789126f8f380bff107c32f28afa..be0ef44805562242bd599d048b3af7c66de14283 100644 --- a/Corona-Warn-App/src/main/res/values-en/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-en/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"You have not been diagnosed with the SARS-CoV-2 virus."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Verification Feature"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"No Verification Feature"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Your test result is private, although some laws may require you to share it. When required, you may show it via any of the ways provided."</string> + <string name="submission_test_result_antigen_negative_proof_body">"You can also use the finding displayed here as proof of a negative rapid test result."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Because the finding here is anonymized, it cannot be used as proof of a negative rapid test result."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"Please note that you only have to provide proof of your rapid test result if required by law. When required, you may show it via the app or any of the ways provided. For more information, please familiarize yourself with the criteria for the acceptance of proof of testing in your federal state."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Result available since"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values-pl/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-pl/antigen_strings.xml index 4ecc1f38d7c99bcc2b1ccc94e187062cd6e672a5..40fe4308ce558ebe27f659c9020180cf9245dd15 100644 --- a/Corona-Warn-App/src/main/res/values-pl/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-pl/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"Nie zdiagnozowano u Ciebie wirusa SARS-CoV-2."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Funkcja weryfikacji"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"Brak funkcji weryfikacji"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"WyÅ›wietlony tutaj wynik testu jest prywatny, ale niektóre przepisy prawne mogÄ… wymagać jego udostÄ™pnienia. JeÅ›li to wymagane, możesz go udostÄ™pnić na jeden z podanych sposobów."</string> + <string name="submission_test_result_antigen_negative_proof_body">"WyÅ›wietlony tutaj wynik testu może sÅ‚użyć jako dowód negatywnego wyniku szybkiego testu."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Ponieważ ten wynik testu jest anonimizowany, nie może sÅ‚użyć jako dowód negatywnego wyniku szybkiego testu."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"PamiÄ™taj, że wynik szybkiego testu musisz przedstawić tylko wtedy, gdy jest to wymagane przez prawo. JeÅ›li to wymagane, możesz go udostÄ™pnić za pomocÄ… aplikacji lub na jeden z podanych sposobów. Aby uzyskać wiÄ™cej informacji, zapoznaj siÄ™ z kryteriami akceptacji dowodu przeprowadzenia testów w swoim kraju zwiÄ…zkowym."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Wynik dostÄ™pny od"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values-ro/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-ro/antigen_strings.xml index 392caf56b4b6ea4e74722b18fc1af9fa318d047b..2a990d20c38dfc36f0632f9e6f06aa74b670fa1a 100644 --- a/Corona-Warn-App/src/main/res/values-ro/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-ro/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"Nu aÈ›i fost diagnosticat cu virusul SARS-CoV-2."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Caracteristica de verificare"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"Caracteristica fără verificare"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Rezultatul testului dvs. este privat, deÈ™i unele legi vă pot solicita să îl partajaÈ›i. Când vi se solicită acest lucru, îl puteÈ›i arăta prin intermediul unuia dintre modurile furnizate."</string> + <string name="submission_test_result_antigen_negative_proof_body">"De asemenea, puteÈ›i utiliza rezultatul afiÈ™at aici ca dovadă a unui rezultat de test rapid negativ."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Deoarece rezultatul de aici este anonimizat, nu poate fi utilizat ca dovadă a unui rezultat de test rapid negativ."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"ReÈ›ineÈ›i că trebuie să faceÈ›i dovada rezultatului testului rapid doar dacă acest lucru este cerut prin lege. Când este necesar, îl puteÈ›i afiÈ™a prin intermediul aplicaÈ›iei sau în oricare dintre modurile prevăzute. Pentru mai multe informaÈ›ii, familiarizaÈ›i-vă cu criteriile de acceptare a dovezii testării în statul dvs. federal."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Rezultat disponibil de la"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values-tr/antigen_strings.xml b/Corona-Warn-App/src/main/res/values-tr/antigen_strings.xml index 9e493bfa6bc8ed889e0bb8a2ea19f7b313e6a57c..4efff6cfacdfd5ca21328260bf94a0d251a9fa5a 100644 --- a/Corona-Warn-App/src/main/res/values-tr/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/antigen_strings.xml @@ -119,8 +119,14 @@ <string name="submission_test_result_negative_message">"SARS-CoV-2 virüsü tanısı almadınız."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"DoÄŸrulama ÖzelliÄŸi"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"DoÄŸrulama ÖzelliÄŸi Yok"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Test sonucunuz özeldir ancak bazı yasalar nedeniyle paylaÅŸmanız gerekebilir. PaylaÅŸmanız gerekirse sunulan pek çok yöntemden birini kullanarak gösterebilirsiniz."</string> + <string name="submission_test_result_antigen_negative_proof_body">"Hızlı test sonucunun negatif olduÄŸunun kanıtı olarak burada görüntülenen bulguyu da kullanabilirsiniz."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Buradaki bulgu anonimleÅŸtirildiÄŸinden hızlı test sonucunun negatif olduÄŸunun kanıtı olarak kullanılamaz."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"Yalnızca yasalarca gerekli kılınması halinde hızlı test sonucunuzun kanıtını sunmanız gerektiÄŸini lütfen unutmayın. Gerekli kılınması halinde uygulama aracılığıyla veya sunulan diÄŸer yöntemlerden herhangi biriyle gösterebilirsiniz. Daha fazla bilgi için lütfen federal eyaletinizde geçerli olan test kanıtı kabul ölçütlerini öğrenin."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Sonucun çıktığı tarih:"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/main/res/values/antigen_strings.xml b/Corona-Warn-App/src/main/res/values/antigen_strings.xml index 165d803212cd87d7b0fc4a66b8c5774141c1abf1..736cd35cfdc6f3b9f83d73048c72ee2dc105a9db 100644 --- a/Corona-Warn-App/src/main/res/values/antigen_strings.xml +++ b/Corona-Warn-App/src/main/res/values/antigen_strings.xml @@ -120,8 +120,14 @@ <string name="submission_test_result_negative_message">"You have not been diagnosed with the SARS-CoV-2 virus."</string> <!-- XHED: submission result antigen fragment negative result proof title --> <string name="submission_test_result_antigen_negative_proof_title">"Verification Feature"</string> + <!-- XHED: submission result antigen fragment negative result proof title for anonymous tests--> + <string name="submission_test_result_antigen_negative_proof_title_anonymous">"No Verification Feature"</string> <!-- XHED: submission result antigen fragment negative result proof body --> - <string name="submission_test_result_antigen_negative_proof_body">"Your test result is private, although some laws may require you to share it. When required, you may show it via any of the ways provided."</string> + <string name="submission_test_result_antigen_negative_proof_body">"You can also use the finding displayed here as proof of a negative rapid test result."</string> + <!-- XHED: submission result antigen fragment negative result proof body anonymous --> + <string name="submission_test_result_antigen_negative_proof_body_anonymous">"Because the finding here is anonymized, it cannot be used as proof of a negative rapid test result."</string> + <!-- XHED: submission result antigen fragment negative result proof additional information --> + <string name="submission_test_result_antigen_negative_proof_additional_information">"Please note that you only have to provide proof of your rapid test result if required by law. When required, you may show it via the app or any of the ways provided. For more information, please familiarize yourself with the criteria for the acceptance of proof of testing in your federal state."</string> <!-- XHED: submission result antigen negative result counter title --> <string name="submission_test_result_antigen_negative_counter_title">"Result available since"</string> <!-- XHED: coronatest negative antigen result first info title --> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/PcrTeleTanCensorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/PcrTeleTanCensorTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..d73e7020504d6b190ec502d15e5d48db2bdf0f5b --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/PcrTeleTanCensorTest.kt @@ -0,0 +1,81 @@ +package de.rki.coronawarnapp.bugreporting.censors + +import de.rki.coronawarnapp.bugreporting.censors.submission.PcrTeleTanCensor +import io.kotest.matchers.shouldBe +import io.mockk.MockKAnnotations +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.runBlockingTest +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import testhelpers.BaseTest + +class PcrTeleTanCensorTest : BaseTest() { + + private val testTans = listOf( + "WF894R5XX5", + "XJYNJU3MTB", + "2MU6N6JRE5", + "ZX3EWW4JX7", + "5ARBA4W2NC", + "FQEKD78DVC", + "WBNNPG3HGF", + "E856RHPKY9", + ) + + @BeforeEach + fun setup() { + MockKAnnotations.init(this) + } + + @AfterEach + fun teardown() { + runBlocking { PcrTeleTanCensor.clearTans() } + } + + private fun createInstance() = PcrTeleTanCensor() + + @Test + fun `censoring replaces the logline message`() = runBlockingTest { + val instance = createInstance() + + testTans.forEach { + PcrTeleTanCensor.addTan(it) + val toCensor = "I'm a shy teletan: $it" + instance.checkLog(toCensor)!! + .compile()!!.censored shouldBe "I'm a shy teletan: #######${it.takeLast(3)}" + } + } + + @Test + fun `censoring replaces the logline message - multiple instances`() = runBlockingTest { + testTans.forEach { + PcrTeleTanCensor.addTan(it) + val toCensor = "I'm a shy teletan: $it" + createInstance().checkLog(toCensor)!! + .compile()!!.censored shouldBe "I'm a shy teletan: #######${it.takeLast(3)}" + } + } + + @Test + fun `censoring returns null if there is no match`() = runBlockingTest { + val instance = createInstance() + + testTans.map { it.substring(2) }.forEach { + PcrTeleTanCensor.addTan(it) + val toCensor = "I'm a shy teletan: $it" + instance.checkLog(toCensor)!! + .compile()!!.censored shouldBe "I'm a shy teletan: #######${it.takeLast(3)}" + } + } + + @Test + fun `censoring aborts if no teletan was set`() = runBlockingTest { + val instance = createInstance() + + testTans.forEach { + val toCensor = "I'm a shy teletan: $it" + instance.checkLog(toCensor) shouldBe null + } + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt index 3c89c21c4eb908fd12df44b908d1101967377e61..82bfa938238018c59fffc3ff91af83a5891ea49b 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt @@ -1,5 +1,6 @@ package de.rki.coronawarnapp.coronatest.type.pcr +import de.rki.coronawarnapp.bugreporting.censors.submission.PcrTeleTanCensor import de.rki.coronawarnapp.coronatest.qrcode.CoronaTestQRCode import de.rki.coronawarnapp.coronatest.server.CoronaTestResult import de.rki.coronawarnapp.coronatest.server.CoronaTestResult.PCR_INVALID @@ -30,9 +31,11 @@ import io.mockk.coEvery import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.just +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.runBlockingTest import org.joda.time.Duration import org.joda.time.Instant +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -91,6 +94,11 @@ class PCRProcessorTest : BaseTest() { } } + @AfterEach + fun teardown() { + runBlocking { PcrTeleTanCensor.clearTans() } + } + fun createInstance() = PCRProcessor( timeStamper = timeStamper, submissionService = submissionService, diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainerTest.kt index b13ce6a2ecf8e372a1cdfc43298816ef8c05c386..fad39f683f0e946dda8f94afb044c82a403a554d 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/VaccinationContainerTest.kt @@ -65,7 +65,7 @@ class VaccinationContainerTest : BaseTest() { lastName shouldBe "Astrá Eins" dateOfBirth shouldBe LocalDate.parse("1966-11-11") vaccinatedAt shouldBe LocalDate.parse("2021-03-01") - vaccineName shouldBe "1119305005" + vaccineTypeName shouldBe "1119305005" vaccineManufacturer shouldBe "ORG-100001699" medicalProductName shouldBe "EU/1/21/1529" doseNumber shouldBe 1 @@ -113,7 +113,7 @@ class VaccinationContainerTest : BaseTest() { lastName shouldBe "Astrá Eins" dateOfBirth shouldBe LocalDate.parse("1966-11-11") vaccinatedAt shouldBe LocalDate.parse("2021-03-01") - vaccineName shouldBe "Vaccine-Name" + vaccineTypeName shouldBe "Vaccine-Name" vaccineManufacturer shouldBe "Manufactorer-Name" medicalProductName shouldBe "MedicalProduct-Name" doseNumber shouldBe 1