diff --git a/app/src/main/java/it/ministerodellasalute/immuni/api/services/ConfigurationSettingsService.kt b/app/src/main/java/it/ministerodellasalute/immuni/api/services/ConfigurationSettingsService.kt index 8cb2c0a9c..969bd8564 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/api/services/ConfigurationSettingsService.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/api/services/ConfigurationSettingsService.kt @@ -62,7 +62,8 @@ data class ConfigurationSettings( @field:Json(name = "operational_info_without_exposure_sampling_rate") val operationalInfoWithoutExposureSamplingRate: Double, @field:Json(name = "dummy_analytics_waiting_time") val dummyAnalyticsWaitingTime: Int, @field:Json(name = "countries") val countries: Map>, - @field:Json(name = "eudcc_expiration") val eudcc_expiration: Map> + @field:Json(name = "eudcc_expiration") val eudcc_expiration: Map>, + @field:Json(name = "risk_exposure") val risk_exposure: Map ) @JsonClass(generateAdapter = true) @@ -191,7 +192,8 @@ private fun eudccMap(): Map> { "vaccine_first_dose" to "Certificazione valida fino alla prossima dose", "vaccine_fully_completed" to "Certificazione valida 365 giorni (12 mesi) dalla data dell'ultima somministrazione", "healing_certificate" to "Certificazione valida in Unione Europea fino alla data di fine validità e valida solo in Italia fino a 6 mesi dalla data di inizio validità", - "vaccine_booster" to "Certificazione valida 180 giorni (6 mesi) dalla data dell'ultima somministrazione, salvo modifiche normative" + "vaccine_booster" to "Certificazione valida 180 giorni (6 mesi) dalla data dell'ultima somministrazione, salvo modifiche normative", + "cbis" to "Certificazione valida in Unione Europea fino alla data di fine validità e valida in Italia 540 giorni (18 mesi) dalla data di inizio validità, salvo modifiche normative" ), "de" to mapOf( "molecular_test" to "Bescheinigung gültig für 72 Stunden ab dem Zeitpunkt der Abholung", @@ -199,7 +201,8 @@ private fun eudccMap(): Map> { "vaccine_first_dose" to "Zertifizierung gültig bis zur nächsten Dosis", "vaccine_fully_completed" to "Zertifizierung gültig für 365 Tage (12 Monate) ab dem Datum der letzten Verabreichung", "healing_certificate" to "Zertifizierung gültig in der Europäischen Union bis zum Gültigkeitsende und nur in Italien bis zu 6 Monate ab Gültigkeitsbeginn gültig", - "vaccine_booster" to "Zertifizierung gültig für 180 Tage (6 Monate) ab dem Datum der letzten Verabreichung, vorbehaltlich behördlicher Änderungen" + "vaccine_booster" to "Zertifizierung gültig für 180 Tage (6 Monate) ab dem Datum der letzten Verabreichung, vorbehaltlich behördlicher Änderungen", + "cbis" to "Zertifizierung gültig in der Europäischen Union bis Gültigkeitsende und gültig in Italien 540 Tage (18 Monate) ab Gültigkeitsbeginn, vorbehaltlich behördlicher Änderungen" ), "en" to mapOf( "molecular_test" to "Certification valid for 72 hours from the time of collection", @@ -207,7 +210,8 @@ private fun eudccMap(): Map> { "vaccine_first_dose" to "Certification valid until next dose", "vaccine_fully_completed" to "Certification valid for 365 days (12 months) from the date of the last administration", "healing_certificate" to "Certification valid in the European Union until the end of validity date and valid only in Italy up to 6 months from the start of validity date", - "vaccine_booster" to "Certification valid for 180 days (6 months) from the date of the last administration, subject to regulatory changes" + "vaccine_booster" to "Certification valid for 180 days (6 months) from the date of the last administration, subject to regulatory changes", + "cbis" to "Certification valid in the European Union until the end of validity date and valid in Italy 540 days (18 months) from the start of validity date, subject to regulatory changes" ), "es" to mapOf( "molecular_test" to "Certificación válida por 72 horas desde el momento de la recogida.", @@ -215,7 +219,8 @@ private fun eudccMap(): Map> { "vaccine_first_dose" to "Certificación válida hasta la próxima dosis", "vaccine_fully_completed" to "Certificación válida por 365 días (12 meses) a partir de la fecha de la última administración.", "healing_certificate" to "Certificación válida en la Unión Europea hasta el final de la fecha de validez y válida solo en Italia hasta 6 meses desde el inicio de la fecha de validez", - "vaccine_booster" to "Certificación válida por 180 días (6 meses) a partir de la fecha de la última administración, sujeta a cambios regulatorios" + "vaccine_booster" to "Certificación válida por 180 días (6 meses) a partir de la fecha de la última administración, sujeta a cambios regulatorios", + "cbis" to "Certificación válida en la Unión Europea hasta el final de la fecha de validez y válida en Italia 540 días (18 meses) desde el inicio de la fecha de validez, sujeta a cambios regulatorios" ), "fr" to mapOf( "molecular_test" to "Attestation valable 72h à compter de la collecte", @@ -223,11 +228,22 @@ private fun eudccMap(): Map> { "vaccine_first_dose" to "Certification valable jusqu'à la prochaine dose", "vaccine_fully_completed" to "Certification valable 365 jours (12 mois) à compter de la date de la dernière administration", "healing_certificate" to "Certification valable dans l'Union européenne jusqu'à la date de fin de validité et valable uniquement en Italie jusqu'à 6 mois à compter de la date de début de validité", - "vaccine_booster" to "Certification valable 180 jours (6 mois) à compter de la date de la dernière administration, sous réserve de modifications réglementaires" + "vaccine_booster" to "Certification valable 180 jours (6 mois) à compter de la date de la dernière administration, sous réserve de modifications réglementaires", + "cbis" to "Certification valable dans l'Union européenne jusqu'à la date de fin de validité et valable en Italie 540 jours (18 mois) à compter de la date de début de validité, sous réserve de modifications réglementaires" ) ) } +fun risk_exposure(): Map { + return mapOf( + "it" to "Se non hai sintomi e hai ricevuto la dose booster oppure hai completato il ciclo vaccinale primario nei 120 giorni precedenti, oppure sei guarito da infezione da SARS-CoV-2 nei 120 giorni precedenti, oppure sei guarito dopo il completamento del ciclo primario, non è prevista la quarantena e si applica la misura dell’autosorveglianza della durata di 5 giorni. \n \n Alla prima comparsa di sintomi effettua un test antigenico rapido o molecolare per la rilevazione di Sars-Cov-2 e, se ancora sintomatico, al quinto giorno successivo alla data dell’ultimo contatto stretto con soggetti confermati positivi al Covid 19. Indossa dispositivi di protezione delle vie respiratorie di tipo FFP2 per almeno 10 giorni dall’ultima esposizione al caso.\n \n Se non hai sintomi e non sei vaccinato o non hai completato il ciclo vaccinale primario (hai ricevuto una sola dose di vaccino delle due previste) o se hai completato il ciclo vaccinale primario da meno di 14 giorni, oppure sei asintomatico e hai completato il ciclo vaccinale primario o sei guarito da precedente infezione da SARS-CoV-2 da più di 120 giorni senza aver ricevuto la dose di richiamo, rimani a casa per la durata della quarantena di 5 giorni dall’ultimo contatto con il caso positivo. Dopo tale periodo devi effettuare un test antigenico rapido o molecolare. Se il risultato è negativo, la quarantena cessa ma per i cinque giorni successivi devi indossare i dispositivi di protezione FFP2.\n \n Se durante il periodo di quarantena manifesti sintomi suggestivi di possibile infezione da Sars-Cov-2 è raccomandata l’esecuzione immediata di un test diagnostico.", + "en" to "You are not quarantine is foreseen and the self-surveillance measure lasting 5 days is applied. \n \n At the first appearance of symptoms carry out a rapid or molecular antigen test for the detection of Sars-Cov-2 and, if still symptomatic, on the fifth day following the date of the last close contact with subjects confirmed positive for Covid 19. Wear devices FFP2 respiratory protection for at least 10 days from the last exposure to the case. \n \n If you have no symptoms and are not vaccinated or have not completed the primary vaccination course (you have received only one of the two vaccine doses) or if you have completed the primary vaccination course for less than 14 days, or are asymptomatic and have completed the primary vaccination course or have recovered from a previous SARS-CoV-2 infection for more than 120 days without receiving the booster dose, stay at house for the duration of the quarantine of 5 days from the last contact with the positive case. After this time, you need to do a rapid or molecular antigen test. If the result is negative, the quarantine ends but you must wear FFP2 protective equipment for the next five days. \n \n If during the quarantine period you experience symptoms suggestive of possible Sars-Cov-2 infection, immediate execution of the a diagnostic test.", + "es" to "No está prevista la cuarentena y se aplica la medida de autovigilancia de 5 días. \n \n A la primera aparición de síntomas realizar una prueba rápida o de antígeno molecular para la detección de Sars-Cov-2 y, si continúa sintomático, al quinto día siguiente a la fecha del último contacto cercano con sujetos confirmados positivos para Covid 19 .Usar dispositivos de protección respiratoria FFP2 durante al menos 10 días desde la última exposición al caso.\n \n Si no tiene síntomas y no está vacunado o no ha completado el ciclo de vacunación primaria (ha recibido solo una de las dos dosis de vacuna) o si completó el ciclo de vacunación primaria durante menos de 14 días, o está asintomático y completó el ciclo de vacunación primaria o se recuperó de una infección previa por SARS-CoV-2 durante más de 120 días sin recibir la dosis de refuerzo, quédese en casa mientras dure la cuarentena de 5 días a partir del último contacto con el caso positivo. Pasado este tiempo, es necesario realizar una prueba rápida o de antígeno molecular. Si el resultado es negativo, finaliza la cuarentena pero debe llevar equipo de protección FFP2 durante los cinco días siguientes.\n \n Si durante el periodo de cuarentena presenta síntomas sugestivos de posible infección por Sars-Cov-2, realización inmediata de una prueba diagnóstica.", + "fr" to "Vous n'êtes pas en quarantaine est prévue et la mesure d'auto-surveillance d'une durée de 5 jours est appliquée. \n \n À la première apparition des symptômes effectuer un test antigénique rapide ou moléculaire pour la détection du Sars-Cov-2 et, si toujours symptomatique, le cinquième jour suivant la date du dernier contact rapproché avec des sujets confirmés positifs au Covid 19 Porter des appareils de protection respiratoire FFP2 pendant au moins 10 jours à compter de la dernière exposition au cas.\n \n Si vous ne présentez aucun symptôme et n'êtes pas vacciné ou n'avez pas terminé la primovaccination (vous n'avez reçu qu'une seule des deux doses de vaccin) ou si vous avez terminé la primo-vaccination depuis moins de 14 jours, ou si vous êtes asymptomatique et avez terminé la primo-vaccination ou vous êtes remis d'une précédente infection par le SRAS-CoV-2 depuis plus de 120 jours sans avoir reçu la dose de rappel, restez à maison pendant la durée de la quarantaine de 5 jours à compter du dernier contact avec le cas positif. Passé ce délai, vous devez effectuer un test d'antigène rapide ou moléculaire. Si le résultat est négatif, la quarantaine prend fin mais vous devez porter un équipement de protection FFP2 pendant les cinq prochains jours.\n \n Si pendant la période de quarantaine vous présentez des symptômes évocateurs d'une éventuelle infection au Sars-Cov-2, exécution immédiate d'un test de diagnostic.", + "de" to "Für Sie ist keine Quarantäne vorgesehen und die Selbstüberwachungsmaßnahme für 5 Tage wird angewendet. \n \n Beim ersten Auftreten von Symptomen einen schnellen oder molekularen Antigentest zum Nachweis von Sars-Cov-2 durchführen und, falls noch symptomatisch, am fünften Tag nach dem Datum des letzten engen Kontakts mit positiv auf Covid 19 positiv getesteten Personen . Tragen Sie Geräte FFP2-Atemschutz für mindestens 10 Tage nach dem letzten Kontakt mit dem Fall. \n \n Wenn Sie keine Symptome haben und nicht geimpft sind oder die Grundimmunisierung nicht abgeschlossen haben (Sie haben nur eine der beiden Impfdosen erhalten) oder wenn Sie die Grundimmunisierung weniger als 14 Tage abgeschlossen haben oder asymptomatisch sind und die Grundimmunisierung abgeschlossen haben oder sich seit mehr als 120 Tagen ohne Auffrischimpfung von einer früheren SARS-CoV-2-Infektion erholt haben, bleiben Sie bei Haus für die Dauer der Quarantäne von 5 Tagen ab dem letzten Kontakt mit dem positiven Fall. Nach dieser Zeit müssen Sie einen schnellen oder molekularen Antigentest durchführen. Bei negativem Ergebnis endet die Quarantäne, aber Sie müssen für die nächsten fünf Tage FFP2-Schutzausrüstung tragen. \n \n Sollten während der Quarantänezeit Symptome auftreten, die auf eine mögliche Sars-Cov-2-Infektion hindeuten, wird ein sofortiger diagnostischer Test empfohlen." + ) +} + val defaultSettings = ConfigurationSettings( minimumBuildVersion = 0, faqUrls = languageMap { "https://get.immuni.gov.it/docs/faq-${it.code}.json" }, @@ -264,5 +280,6 @@ val defaultSettings = ConfigurationSettings( operationalInfoWithoutExposureSamplingRate = 0.6, dummyAnalyticsWaitingTime = 2_592_000, countries = countriesMap(), - eudcc_expiration = eudccMap() + eudcc_expiration = eudccMap(), + risk_exposure = risk_exposure() ) diff --git a/app/src/main/java/it/ministerodellasalute/immuni/api/services/DCCService.kt b/app/src/main/java/it/ministerodellasalute/immuni/api/services/DCCService.kt index fee614d98..2a75d63ff 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/api/services/DCCService.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/api/services/DCCService.kt @@ -36,7 +36,7 @@ interface DCCService { ) : RequestWithPadding @JsonClass(generateAdapter = true) - data class GreenCardResponse(val qrcode: String) + data class GreenCardResponse(val qrcode: String, val fglTipoDgc: String?) @POST("v1/ingestion/get-dgc") suspend fun getGreenCard( diff --git a/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/models/GreenPassToken.kt b/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/models/GreenPassToken.kt index db1a31501..eca451f11 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/models/GreenPassToken.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/models/GreenPassToken.kt @@ -17,7 +17,7 @@ package it.ministerodellasalute.immuni.logic.exposure.models import java.util.* -data class GreenPassToken(val greenPass: String?, val serverDate: Date?) +data class GreenPassToken(val greenPass: String?, val fglTipoDgc: String?, val serverDate: Date?) sealed class GreenPassValidationResult { data class Success(val greenpass: GreenPassToken) : GreenPassValidationResult() diff --git a/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/repositories/GCDRepository.kt b/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/repositories/GCDRepository.kt index eecc743f2..e61c411b8 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/repositories/GCDRepository.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/logic/exposure/repositories/GCDRepository.kt @@ -50,7 +50,7 @@ class GCDRepository( } return when (response) { is NetworkResource.Success -> GreenPassValidationResult.Success( - GreenPassToken(response.data?.qrcode, response.serverDate!!) + GreenPassToken(response.data?.qrcode, response.data?.fglTipoDgc, response.serverDate!!) ) is NetworkResource.Error -> { val errorResponse = response.error diff --git a/app/src/main/java/it/ministerodellasalute/immuni/logic/user/models/GreenCertificateUser.kt b/app/src/main/java/it/ministerodellasalute/immuni/logic/user/models/GreenCertificateUser.kt index 0bc496cca..bac97b4bb 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/logic/user/models/GreenCertificateUser.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/logic/user/models/GreenCertificateUser.kt @@ -10,5 +10,6 @@ import kotlinx.android.parcel.Parcelize @JsonClass(generateAdapter = true) data class GreenCertificateUser( @field:Json(name = "base64") val base64: String, - @field:Json(name = "greenCertificate") val data: GreenCertificate? + @field:Json(name = "greenCertificate") val data: GreenCertificate?, + @field:Json(name = "fglTipoDgc") val fglTipoDgc: String? = null ) : Parcelable diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/GreenCertificateViewModel.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/GreenCertificateViewModel.kt index 53bcecfd4..c49907ac7 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/GreenCertificateViewModel.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/GreenCertificateViewModel.kt @@ -103,7 +103,8 @@ class GreenCertificateViewModel( user.value?.greenPass!!.add( GreenCertificateUser( base64 = result.greenpass.greenPass.toString(), - data = greenCertificate + data = greenCertificate, + fglTipoDgc = result.greenpass.fglTipoDgc ) ) userManager.save( diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/KnowMoreGreenCertificate.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/KnowMoreGreenCertificate.kt index 5bee5e3de..caf875b48 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/KnowMoreGreenCertificate.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/KnowMoreGreenCertificate.kt @@ -16,16 +16,8 @@ package it.ministerodellasalute.immuni.ui.greencertificate import android.os.Bundle -import android.text.SpannableString -import android.text.Spanned -import android.text.TextPaint -import android.text.method.LinkMovementMethod -import android.text.style.ClickableSpan import android.view.View -import android.widget.TextView import it.ministerodellasalute.immuni.R -import it.ministerodellasalute.immuni.extensions.utils.ExternalLinksHelper -import it.ministerodellasalute.immuni.extensions.view.getColorCompat import it.ministerodellasalute.immuni.ui.dialog.PopupDialogFragment import kotlinx.android.synthetic.main.green_certificate_know_more.* @@ -36,40 +28,5 @@ class KnowMoreGreenCertificate : PopupDialogFragment() { setContentLayout(R.layout.green_certificate_know_more) setTitle(getString(R.string.green_pass_how_to_generate_title)) - -// setClickableLink() - } - - private fun setClickableLink() { - val spannableString = SpannableString(getString(R.string.green_pass_how_to_generate_sixth)) - val linkDCG = getString(R.string.green_pass_how_to_generate_link) - var startIndexOfLink = -1 - val clickableSpan = object : ClickableSpan() { - override fun updateDrawState(textPaint: TextPaint) { - textPaint.color = requireContext().getColorCompat(R.color.colorPrimary) - textPaint.isUnderlineText = true - } - - override fun onClick(view: View) { - val link = if (!linkDCG.contains("http")) { - "https://$linkDCG" - } else { - linkDCG - } - ExternalLinksHelper.openLink( - requireContext(), - link - ) - } - } - startIndexOfLink = green_pass_sixth.text.toString() - .indexOf(linkDCG, startIndexOfLink + 1) - spannableString.setSpan( - clickableSpan, startIndexOfLink, startIndexOfLink + linkDCG.length, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) - green_pass_sixth.movementMethod = - LinkMovementMethod.getInstance() - green_pass_sixth.setText(spannableString, TextView.BufferType.SPANNABLE) } } diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/MoreDetailGreenCertificate.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/MoreDetailGreenCertificate.kt index 4a2534b9b..a6789a5f1 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/MoreDetailGreenCertificate.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/greencertificate/MoreDetailGreenCertificate.kt @@ -68,17 +68,20 @@ class MoreDetailGreenCertificate : PopupDialogFragment(), KoinComponent { val molecularTest = settingsManager.settings.value.eudcc_expiration[Locale.getDefault().language]!!["molecular_test"] val healingCertificate = settingsManager.settings.value.eudcc_expiration[Locale.getDefault().language]!!["healing_certificate"] val vaccineBooster = settingsManager.settings.value.eudcc_expiration[Locale.getDefault().language]!!["vaccine_booster"] + val cbis = settingsManager.settings.value.eudcc_expiration[Locale.getDefault().language]!!["cbis"] + setUI( vaccineFullyCompleted, vaccineFirstDose, molecularTest, rapidTest, healingCertificate, - vaccineBooster + vaccineBooster, + cbis ) } - private fun setUI(validUntilCompleteVaccine: String?, validUntilnotCompleteVaccine: String?, validUntilMolecularTest: String?, validUntilQuickTest: String?, healingCertificate: String?, vaccineBooster: String?) { + private fun setUI(validUntilCompleteVaccine: String?, validUntilnotCompleteVaccine: String?, validUntilMolecularTest: String?, validUntilQuickTest: String?, healingCertificate: String?, vaccineBooster: String?, cbis: String?) { var isExemption = false when (true) { greenCertificateDetail.data?.vaccinations != null -> { @@ -208,7 +211,10 @@ class MoreDetailGreenCertificate : PopupDialogFragment(), KoinComponent { certificateIssuerLabelEng.visibility = View.GONE certificateIssuerLabel.visibility = View.GONE entityIssuedCertificate.visibility = View.GONE - validityHealing.text = healingCertificate ?: getString(R.string.green_certificate_validity_healing) + validityHealing.text = when (greenCertificateDetail.fglTipoDgc) { + "cbis" -> cbis ?: getString(R.string.green_certificate_validity_healing_cbis) + else -> healingCertificate ?: getString(R.string.green_certificate_validity_healing) + } certificateIssuerLabelExemption.visibility = View.GONE } greenCertificateDetail.data?.exemptions != null -> { diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/FindOutMoreCloseDialogFragment.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/FindOutMoreCloseDialogFragment.kt new file mode 100644 index 000000000..0d71ad02d --- /dev/null +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/FindOutMoreCloseDialogFragment.kt @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2020 Presidenza del Consiglio dei Ministri. + * Please refer to the AUTHORS file for more information. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package it.ministerodellasalute.immuni.ui.suggestions + +import android.os.Bundle +import android.view.View +import it.ministerodellasalute.immuni.R +import it.ministerodellasalute.immuni.logic.settings.ConfigurationSettingsManager +import it.ministerodellasalute.immuni.ui.dialog.PopupDialogFragment +import java.util.* +import kotlinx.android.synthetic.main.find_out_more_close_dialog.* +import org.koin.android.ext.android.get + +class FindOutMoreCloseDialogFragment : PopupDialogFragment() { + + private lateinit var settingsManager: ConfigurationSettingsManager + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + settingsManager = get() + setContentLayout(R.layout.find_out_more_close_dialog) + setTitle(getString(R.string.title_dialog_find_out_more_state_close)) + + testTesto.text = + settingsManager.settings.value.risk_exposure[Locale.getDefault().language]!! + } +} diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseDialogFragment.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseDialogFragment.kt index a65e84865..2a5bcdcac 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseDialogFragment.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseDialogFragment.kt @@ -26,6 +26,7 @@ import androidx.navigation.fragment.findNavController import com.google.android.material.appbar.AppBarLayout import com.google.android.material.dialog.MaterialAlertDialogBuilder import it.ministerodellasalute.immuni.R +import it.ministerodellasalute.immuni.extensions.utils.boldLinkSpan import it.ministerodellasalute.immuni.extensions.utils.coloredClickable import it.ministerodellasalute.immuni.extensions.view.getColorCompat import it.ministerodellasalute.immuni.extensions.view.setSafeOnClickListener @@ -63,6 +64,17 @@ class StateCloseDialogFragment : BaseStateDialogFragment(R.layout.state_close_di showHideAlert() } + val quarantineIsolationRawText = getString(R.string.suggestions_instruction_stay_home) + quarantineIsolationLink.movementMethod = LinkMovementMethod.getInstance() + quarantineIsolationLink.text = quarantineIsolationRawText.boldLinkSpan( + colorLink = requireContext().getColorCompat(R.color.colorPrimary), + boldLink = true, + color = requireContext().getColorCompat(R.color.grey_dark), + bold = true + ) { + viewModel.onQuarantineIsolationClick(this) + } + val privacyRawText = getString(R.string.suggestions_risk_third_message_android) footerPrivacyLink.movementMethod = LinkMovementMethod.getInstance() footerPrivacyLink.text = privacyRawText.coloredClickable( @@ -74,8 +86,12 @@ class StateCloseDialogFragment : BaseStateDialogFragment(R.layout.state_close_di viewModel.exposureDate.observe(viewLifecycleOwner, Observer { if (it is ExposureStatus.Exposed) { - val dateStr = DateFormat.getLongDateFormat(requireContext()).format(it.lastExposureDate) - pageSubtitle.text = String.format(requireContext().getString(R.string.suggestions_risk_with_date_subtitle), dateStr) + val dateStr = + DateFormat.getLongDateFormat(requireContext()).format(it.lastExposureDate) + pageSubtitle.text = String.format( + requireContext().getString(R.string.suggestions_risk_with_date_subtitle), + dateStr + ) } }) } diff --git a/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseViewModel.kt b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseViewModel.kt index d861a2ab4..40e15e8bc 100644 --- a/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseViewModel.kt +++ b/app/src/main/java/it/ministerodellasalute/immuni/ui/suggestions/StateCloseViewModel.kt @@ -17,9 +17,11 @@ package it.ministerodellasalute.immuni.ui.suggestions import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData +import androidx.navigation.fragment.findNavController import it.ministerodellasalute.immuni.extensions.utils.ExternalLinksHelper import it.ministerodellasalute.immuni.logic.exposure.ExposureManager import it.ministerodellasalute.immuni.logic.settings.ConfigurationSettingsManager +import it.ministerodellasalute.immuni.ui.home.HomeFragmentDirections class StateCloseViewModel( private val exposureManager: ExposureManager, @@ -33,5 +35,10 @@ class StateCloseViewModel( ) } + fun onQuarantineIsolationClick(fragment: StateCloseDialogFragment) { + val action = HomeFragmentDirections.actionFindOutMoreStateClose() + fragment.findNavController().navigate(action) + } + val exposureDate = exposureManager.exposureStatus.asLiveData() } diff --git a/app/src/main/res/layout/find_out_more_close_dialog.xml b/app/src/main/res/layout/find_out_more_close_dialog.xml new file mode 100644 index 000000000..ad26066d3 --- /dev/null +++ b/app/src/main/res/layout/find_out_more_close_dialog.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/green_certificate_know_more.xml b/app/src/main/res/layout/green_certificate_know_more.xml index 07798af19..5c912db91 100644 --- a/app/src/main/res/layout/green_certificate_know_more.xml +++ b/app/src/main/res/layout/green_certificate_know_more.xml @@ -74,36 +74,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/question" /> - - - - - - diff --git a/app/src/main/res/layout/state_close_dialog.xml b/app/src/main/res/layout/state_close_dialog.xml index c7604e6ff..01a5d1ba7 100644 --- a/app/src/main/res/layout/state_close_dialog.xml +++ b/app/src/main/res/layout/state_close_dialog.xml @@ -198,17 +198,11 @@ android:layout_marginBottom="20dp" android:text="@string/suggestions_instruction_while_waiting_doctor" /> - - - - - - + + + + Wenn Sie mit Ihrem Arzt oder Ihrer örtlichen Gesundheitsbehörde in Kontakt stehen, können Sie diese Warnung ausblenden. Ich habe den Arzt kontaktiert Als Vorsichtsmaßnahme, bis die Angaben Ihres Arztes oder Ihrer örtlichen Gesundheitsbehörde vorliegen: - Bleiben Sie 14 Tage nach dem Kontaktdatum zu Hause. + [Befolgen Sie die aktuellen Richtlinien zur Selbstüberwachung oder Quarantäne.]\n\n{Mehr erfahren} Messen Sie die Körpertemperatur mindestens zweimal täglich und beurteilen Sie das Auftreten auch milder Symptome. Insbesondere bei Fieber oder Auftreten von mindestens einem der folgenden Symptome: Halsschmerzen, Husten, Erkältung oder verstopfte Nase, Atembeschwerden, Muskelschmerzen, Verlust oder Veränderung von Geruch oder Geschmack, Durchfall. Wenn Symptome auftreten, isolieren Sie sich vom Rest Ihrer Mitbewohner. @@ -429,11 +429,9 @@ Betriebssystem: iOS 13.5.1; Modell: iPhone XS; Expositionsmeldungen: Aktiv; [wei Letzten 8-stellige Nummern der Gesundheitskarte Ablaufdatum der Gesundheitskarte So erwerben Sie das EU Digital Covid Certificate - Das \"EU Digital Covid Certificate\", in Italien \"COVID-19 Green Certification\", wird vom Gesundheitsministerium in digitaler Form an diejenigen ausgestellt, die geimpft wurden oder ein negatives Ergebnis beim Molekular- / Antigentest erhalten haben oder von denen geheilt wurde COVID-19. - Das Zertifikat ist mit einem zweidimensionalen Barcode (QR-Code) versehen, der die wesentlichen Angaben des Zertifikatsinhabers und des mit dem Zertifikat verbundenen Gesundheitsereignisses (Impfung, Negativtest, COVID-19-Kur) enthält und zur Garantie der Echtheit digital signiert ist . - Wenn Sie den Code zum Abrufen der Zertifizierung per E-Mail oder SMS erhalten haben, können Sie diese App verwenden, indem Sie einen der eindeutigen Codes CUN, NRFE, NUCG, CUEV eingeben (erhalten Sie jeweils während der Durchführung des Molekularabstrichs oder beim Antigenabstrich oder bei der Vorbereitung das Heilzertifikat. ) oder den per E-Mail oder SMS erhaltenen Autorisierungscode AUTHCODE zusammen mit den letzten 8 Ziffern der Identifikationsnummer und dem Ablaufdatum der Gesundheitskarte. - Alle diese Codes sind eindeutig mit dem grünen COVID-19-Zertifikat verbunden, das sich auf das Gesundheitsereignis bezieht, das es generiert hat. - Weitere Informationen finden Sie auf der Website www.dgc.gov.it + In Italien wird die grüne COVID-19-Zertifizierung vom Gesundheitsministerium in digitalem Format an diejenigen ausgestellt, die geimpft wurden oder bei einem molekularen oder antigenen Test ein negatives Ergebnis erzielt haben oder von COVID-19 geheilt sind. Es verfügt über einen QR-Code, der die wesentlichen Informationen des Inhabers und des Gesundheitsereignisses enthält, das ihn generiert hat (Impfung, negativer Test, Genesung von COVID-19) und digital signiert ist, um seine Echtheit zu garantieren. + Sie können Ihre grüne COVID-19-Zertifizierung mit dieser App abrufen, indem Sie den eindeutigen Code eingeben, den Sie nach der Impfung, dem Abstrich (CUN, NRFE) oder der Genesung (NUCG) oder mit dem AUTHCODE-Code erhalten haben, zusammen mit den letzten 8 Ziffern der Identifikationsnummer und das Ablaufdatum Ihrer Gesundheitskarte. Sie können diese App auch verwenden, um die Covid-19-Impfbefreiungsbescheinigung herunterzuladen, indem Sie den CUEV- oder AUTHCODE-Code verwenden. + Die grüne COVID-19-Zertifizierung wird auf dem Smartphone-Bildschirm angezeigt, damit sie im Falle einer Verifizierung auf Anfrage auch im Offline-Modus angezeigt werden kann. Über die Schaltfläche „Löschen“ können Sie die Zertifizierung jederzeit von Ihrem Smartphone aus aufheben. EU Digital Covid Certificate erfolgreich wiederhergestellt Art auswählen - Geben Sie die letzten 10 Zeichen des CUN-Codes ein, der Ihnen mitgeteilt wurde\n @@ -498,7 +496,6 @@ Betriebssystem: iOS 13.5.1; Modell: iPhone XS; Expositionsmeldungen: Aktiv; [wei Kein EU Digital Covid Certificate gefunden. Überprüfen Sie, ob die eingegebenen Daten korrekt sind Bestätigung %s von %s - Die grüne COVID-19-Zertifizierung wird auf dem Smartphone-Bildschirm angezeigt, so dass sie auf Wunsch, bei Verifizierung, auch im Offline-Modus eingesehen und gezeigt werden kann. Über die Schaltfläche „Löschen“ können Sie Ihr Zertifikat jederzeit selbstständig von Ihrem Smartphone löschen. Zertifizierung gültig in der Europäischen Union bis zum Gültigkeitsende und nur in Italien bis zu 6 Monate ab Gültigkeitsbeginn gültig Ich verstehe Wir haben die Reihenfolge Ihrer Zertifikate geändert @@ -513,4 +510,6 @@ Betriebssystem: iOS 13.5.1; Modell: iPhone XS; Expositionsmeldungen: Aktiv; [wei Subjekt, das die digitale Freistellungsbescheinigung ausgestellt hat Diese Zertifizierung ist nur in Italien gültig und kann verwendet werden, um die grüne COVID-19-Zertifizierung für die Durchführung von Aktivitäten und die Nutzung von Dienstleistungen gemäß der geltenden nationalen Gesetzgebung zu ersetzen Zertifizierung gültig für 180 Tage (6 Monate) ab dem Datum der letzten Verabreichung, vorbehaltlich behördlicher Änderungen + Quarantäne und Isolation + Zertifizierung gültig in der Europäischen Union bis Gültigkeitsende und gültig in Italien 540 Tage (18 Monate) ab Gültigkeitsbeginn, vorbehaltlich behördlicher Änderungen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 23e3a41d0..41b17707d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -206,7 +206,7 @@ los datos… Si estás en contacto con tu médico o tu Agencia Sanitaria Local, puedes ocultar este aviso. He contactado con el médico Como precaución, mientras esperas las indicaciones de tu médico o de la Agencia Sanitaria Local: - Quédate en casa durante 14 días a partir de la fecha de contacto. + [Siga las pautas actuales de autovigilancia o cuarentena.]\n\n{Más información} Mide la temperatura corporal al menos dos veces al día y evalúa los posibles síntomas, aunque sean leves. En especial, fiebre o al menos uno de los siguientes: dolor de garganta, tos, catarro o congestión nasal, dificultad para respirar, dolor muscular, pérdida o alteración del olfato o el gusto, diarrea. Si muestras síntomas, aíslate de las personas con las que vivas. @@ -481,11 +481,9 @@ Sistema operativo: iOS 13.5.1; modelo: iPhone XS; notificaciones de exposición: Fecha de vencimiento de la tarjeta sanitaria Cómo adquirir el EU Digital Covid Certificate %s de %s - El \"EU Digital Covid Certificate\", en Italia \"Certificación verde COVID-19\", es emitido por el Ministerio de Salud en formato digital para aquellos que han sido vacunados o han obtenido un resultado negativo en la prueba molecular / de antígenos o están curados de COVID- 19. - El certificado tiene un código de barras bidimensional (código QR) que contiene la información esencial del titular del certificado y el evento de salud al que se asocia el certificado (vacunación, prueba negativa, cura COVID-19) y firmado digitalmente para garantizar la autenticidad. - Si has recibido el código para recuperar la certificación por correo electrónico o SMS, puedes utilizar esta aplicación ingresando uno de los códigos únicos CUN, NRFE, NUCG, CUEV (recibidos respectivamente durante la ejecución del hisopo molecular o del hisopo antigénico o al preparar el certificado de curación.), o el código de autorización AUTHCODE recibido vía e-mail o SMS junto con los últimos 8 dígitos del número de identificación y la fecha de vencimiento de la Tarjeta Sanitaria. - Todos estos códigos están asociados de forma única con el certificado verde COVID-19 relacionado con el evento de salud que lo generó. - Para obtener más información, visita el sitio web www.dgc.gov.it + En Italia, la certificación verde COVID-19 es emitida por el Ministerio de Salud, en formato digital, a quienes han sido vacunados o han obtenido un resultado negativo en una prueba molecular o antigénica o están curados de COVID-19. Cuenta con un código QR que contiene la información esencial del titular y el evento de salud que lo generó (vacunación, test negativo, recuperación de COVID-19) y está firmado digitalmente para garantizar su autenticidad. + Puedes recuperar tu Certificación Verde COVID-19 con esta App ingresando el código único recibido después de la vacunación, el hisopado (CUN, NRFE) o recuperación (NUCG), o con el código AUTHCODE, junto con los últimos 8 dígitos del número de identificación y la fecha de vencimiento de su Tarjeta Sanitaria. También puede usar esta aplicación para descargar la certificación de exención de vacunación Covid-19, utilizando el código CUEV o AUTHCODE. + La certificación verde COVID–19 se muestra en la pantalla del smartphone para que, en caso de verificación, se pueda mostrar bajo petición incluso en modo offline. El botón \"Eliminar\" le permite cancelar la certificación desde su teléfono inteligente en cualquier momento. EU Digital Covid Certificate recuperado con éxito Selecciona tipo ¿Está seguro de que deseas eliminar tu EU Digital Covid Certificate? @@ -501,7 +499,6 @@ Sistema operativo: iOS 13.5.1; modelo: iPhone XS; notificaciones de exposición: Certificación válida por 48 horas desde el momento de la extracción. Certificación válida por 72 horas desde el momento de la extracción. No se encontró ningún EU Digital Covid Certificate. Comprueba que los datos introducidos son correctos - La certificación verde COVID-19 se muestra en la pantalla del teléfono inteligente para que se pueda ver y mostrar a pedido, en caso de verificación, incluso en modo fuera de línea. El botón \"Eliminar\" le permite eliminar su certificado de su teléfono inteligente de forma independiente en cualquier momento. Certificación válida en la Unión Europea hasta el final de la fecha de validez y válida solo en Italia hasta 6 meses desde el inicio de la fecha de validez Entiendo Hemos cambiado el orden de sus Certificados @@ -516,4 +513,6 @@ Sistema operativo: iOS 13.5.1; modelo: iPhone XS; notificaciones de exposición: Certificación digital de exención de vacunación COVID-19 Sujeto que emitió el certificado de exención digital Certificación válida por 180 días (6 meses) a partir de la fecha de la última administración, sujeta a cambios regulatorios + Cuarentena y aislamiento + Certificación válida en la Unión Europea hasta el final de la fecha de validez y válida en Italia 540 días (18 meses) desde el inicio de la fecha de validez, sujeta a cambios regulatorios diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 34b68be60..83df9bd85 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -206,7 +206,7 @@ des données en cours… Si vous êtes en contact avec votre médecin ou l\'ASL (agence de santé locale), vous pouvez masquer cet avertissement. J’ai contacté le médecin Par mesure de précaution et dans l\'attente des indications de votre médecin ou de l\'ASL (agence de santé locale) : - Rester isolé à votre domicile pendant les 14 jours après le contact avec une personne malade du Covid-19. + [Suivez les directives d\'autosurveillance ou de quarantaine en vigueur.]\n\n{En savoir plus} Contrôlez votre température au moins deux fois par jour et prenez en compte l\'apparition de symptômes, même s\'ils sont légers. Prêtez particulièrement attention à la fièvre ou à l\'apparition d\'au moins un des symptômes suivants : mal de gorge, toux, rhume ou nez bouché, difficulté à respirer, douleur musculaire, perte ou altération de l\'odorat ou du goût, diarrhée. Si des symptômes apparaissent, isolez-vous des personnes partageant votre domicile. @@ -431,11 +431,9 @@ Système d\'exploitation : iOS 13.5.1; Modèle iPhone XS ; Notifications de risq Carte Santé des 8 derniers chiffres Date d\'expiration de la carte Santé Comment acquérir le EU Digital Covid Certificate - Le «EU Digital Covid Certificate», en Italie «certification verte COVID-19», est délivré par le ministère de la Santé au format numérique à ceux qui ont été vaccinés ou ont obtenu un résultat négatif au test moléculaire / antigène ou sont guéris de COVID-19. - Le certificat comporte un code-barres bidimensionnel (QR code) qui contient les informations essentielles du titulaire du certificat et l\'événement de santé auquel le certificat est associé (vaccination, test négatif, cure COVID-19) et signé numériquement pour garantir l\'authenticité . - Si vous avez reçu le code pour récupérer la certification par e-mail ou SMS, vous pouvez utiliser cette App en saisissant l\'un des codes uniques CUN, NRFE, NUCG, CUEV (reçus respectivement lors de l\'exécution de l\'écouvillonnage moléculaire ou lors de l\'écouvillonnage antigénique ou lors de la préparation le certificat de guérison. ), ou le code d\'autorisation AUTHCODE reçu par e-mail ou SMS accompagné des 8 derniers chiffres du numéro d\'identification et de la date d\'expiration de la Carte Santé. - Tous ces codes sont associés de manière unique au certificat vert COVID-19 relatif à l\'événement sanitaire qui l\'a généré. - Pour plus d\'informations, visitez le site Web www.dgc.gov.it + En Italie, la certification verte COVID-19 est délivrée par le ministère de la Santé, sous format numérique, à ceux qui ont été vaccinés ou qui ont obtenu un résultat négatif à un test moléculaire ou antigénique ou qui sont guéris du COVID-19. Il dispose d\'un code QR qui contient les informations essentielles du titulaire et de l\'événement de santé qui l\'a généré (vaccination, test négatif, guérison du COVID-19) et est signé numériquement pour garantir son authenticité. + Vous pouvez récupérer votre certification verte COVID-19 avec cette application en entrant le code unique reçu après la vaccination, l\'écouvillon (CUN, NRFE) ou la récupération (NUCG), ou avec le code AUTHCODE, ainsi que les 8 derniers chiffres du numéro d\'identification et la date d\'expiration de votre carte Santé. Vous pouvez également utiliser cette application pour télécharger le certificat d\'exemption de vaccination Covid-19, en utilisant le code CUEV ou AUTHCODE. + La certification verte COVID-19 est affichée sur l\'écran du smartphone afin qu\'en cas de vérification, elle puisse être affichée sur demande même en mode hors ligne. Le bouton \"Supprimer\" vous permet d\'annuler à tout moment la certification depuis votre smartphone. EU Digital Covid Certificate récupéré avec succès Sélectionner le genre - Saisissez les 10 derniers caractères du code CUN qui vous a été communiqué\n @@ -500,7 +498,6 @@ Système d\'exploitation : iOS 13.5.1; Modèle iPhone XS ; Notifications de risq Aucun EU Digital Covid Certificate trouvé. Vérifiez que les données saisies sont correctes Confirmation %s sur %s - La certification verte COVID-19 est affichée sur l\'écran du smartphone afin qu\'elle puisse être consultée et affichée sur demande, en cas de vérification, même en mode hors ligne. Le bouton «Supprimer» vous permet de supprimer votre certificat de votre smartphone de manière autonome à tout moment. Certification valable dans l\'Union européenne jusqu\'à la date de fin de validité et valable uniquement en Italie jusqu\'à 6 mois à compter de la date de début de validité Je comprend Nous avons modifié l\'ordre de vos Certificats @@ -515,5 +512,7 @@ Système d\'exploitation : iOS 13.5.1; Modèle iPhone XS ; Notifications de risq Certification numérique de l\'exemption de vaccination COVID-19 Sujet qui a délivré le certificat d\'exemption numérique Certification valable 180 jours (6 mois) à compter de la date de la dernière administration, sous réserve de modifications réglementaires + Quarantaine et isolement + Certification valable dans l\'Union européenne jusqu\'à la date de fin de validité et valable en Italie 540 jours (18 mois) à compter de la date de début de validité, sous réserve de modifications réglementaires diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1c55e7f96..5d39b514b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -207,7 +207,7 @@ dei dati… Se sei in contatto con il tuo medico o la tua ASL, puoi nascondere questo avviso. Ho contattato il medico In via precauzionale, in attesa delle indicazioni del tuo medico o della ASL: - Rimani a casa per i 14 giorni successivi alla data del contatto. + [Segui le indicazione di autosorveglianza o quarantena attualmente previste.]\n\n{Scopri di più} Misura la temperatura corporea almeno due volte al giorno e valuta la comparsa di sintomi, anche lievi. In particolare febbre o almeno uno dei seguenti: mal di gola, tosse, raffreddore o naso chiuso, difficoltà respiratoria, dolori muscolari, perdita o alterazioni di olfatto o gusto, diarrea. In caso di comparsa dei sintomi, isolati dal resto dei tuoi conviventi. @@ -431,12 +431,9 @@ Sistema operativo: iOS 13.5.1; Modello iPhone XS; Notifiche di esposizione: Atti Ultime 8 cifre Tessera Sanitaria Data scadenza Tessera Sanitaria Come acquisire l\'EU Digital Covid Certificate - L\'\"EU Digital Covid Certificate\", in Italia \"Certificazione verde COVID-19\", è rilasciata dal Ministero della Salute in formato digitale a chi è stato vaccinato o ha ottenuto un risultato negativo al test molecolare/antigenico o è guarito da COVID-19. - Il certificato dispone di un codice a barre bidimensionale (QR code) che contiene le informazioni essenziali dell’intestatario del certificato e dell’evento sanitario a cui il certificato è associato (vaccinazione, test negativo, guarigione COVID-19) e firmato digitalmente per garantirne l’autenticità. - Se hai ricevuto via email o SMS il codice per recuperare la certificazione puoi utilizzare questa App inserendo uno dei codici univoci CUN, NRFE, NUCG, CUEV (ricevuti rispettivamente in sede di esecuzione del tampone molecolare o di esecuzione del tampone antigenico o di redazione del certificato di guarigione), oppure il codice autorizzativo AUTHCODE ricevuto via e-mail o SMS insieme con le ultime 8 cifre del numero identificativo e la data di scadenza della Tessera Sanitaria. - Tutti questi codici sono univocamente associati al Certificato verde COVID-19 relativo all’evento sanitario che l’ha generato. - La Certificazione verde COVID–19 viene mostrata sullo schermo dello smartphone in modo che possa essere visualizzato e mostrato su richiesta, in caso di verifica, anche in modalità offline. Il tasto \"Elimina\" ti consente di cancellare il tuo certificato dallo smartphone in autonomia in qualsiasi momento. - Per ulteriori informazioni visita il sito www.dgc.gov.it + In Italia, la Certificazione verde COVID-19, è rilasciata dal Ministero della Salute, in formato digitale, a chi è stato vaccinato o ha ottenuto un risultato negativo a un test molecolare o antigenico o è guarito dal COVID-19. Dispone di un QR code che contiene le informazioni essenziali dell’intestatario e dell’evento sanitario che l’ha generata (vaccinazione, test negativo, guarigione da COVID-19) ed è firmata digitalmente per garantirne l’autenticità. + Puoi recuperare la tua Certificazione verde COVID-19 con questa App inserendo il codice univoco ricevuto dopo la vaccinazione, il tampone (CUN, NRFE) o la guarigione (NUCG), oppure con il codice AUTHCODE, insieme alle ultime 8 cifre del numero identificativo e la data di scadenza della tua Tessera Sanitaria. Puoi utilizzare questa App anche per scaricare la certificazione di esenzione dalla vaccinazione anti Covid-19, utilizzando il codice CUEV o AUTHCODE. + La Certificazione verde COVID–19 viene mostrata sullo schermo dello smartphone in modo che, in caso di verifica, possa essere mostrata su richiesta anche in modalità offline. Il tasto \"Elimina\" ti consente di cancellare la certificazione dallo smartphone in qualsiasi momento. EU Digital Covid Certificate recuperato con successo Seleziona tipologia - Inserisci gli ultimi 10 caratteri del codice CUN che ti è stato comunicato\n @@ -515,5 +512,7 @@ Sistema operativo: iOS 13.5.1; Modello iPhone XS; Notifiche di esposizione: Atti Certificazione digitale di esenzione dalla vaccinazione anti-COVID-19 Soggetto che ha rilasciato la certificazione digitale di esenzione Certificazione valida 180 giorni (6 mesi) dalla data dell\'ultima somministrazione, salvo modifiche normative + Quarantena e isolamento + Certificazione valida in Unione Europea fino alla data di fine validità e valida in Italia 540 giorni (18 mesi) dalla data di inizio validità, salvo modifiche normative diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 64039da21..1e9478464 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -201,7 +201,7 @@ If you\'re in contact with your general practitioner or local health authority, you can hide this alert. I have contacted my general practitioner As a precaution, while you wait for instructions from your general practitioner or local health authority: - Stay at home for 14 days after the date of contact. + [Follow the current self-surveillance or quarantine guidelines.]\n\n{Find out more} Measure your body temperature at least twice a day and assess if you are exhibiting symptoms, even mild ones. In particular, fever or at least one of the following: sore throat, cough, cold or blocked nose, breathing difficulty, muscle pain, loss or alteration of sense of smell or taste, diarrhoea. If you display symptoms, isolate yourself from the people you live with. @@ -430,12 +430,9 @@ Operating system: iOS 13.5.1; Model: iPhone XS; Exposure notifications: Active; Health Card expiry date Done How to acquire the EU Digital Covid Certificate - The \"EU Digital Covid Certificate\", in Italy \"COVID-19 green certification\", is issued by the Ministry of Health in digital format to those who have been vaccinated or have obtained a negative result on the molecular / antigen test or are cured of COVID- 19. - The certificate has a two-dimensional barcode (QR code) that contains the essential information of the holder of the certificate and the health event to which the certificate is associated (vaccination, negative test, COVID-19 cure) and digitally signed to guarantee authenticity. - If you have received the code to recover the certification via email or SMS, you can use this App by entering one of the unique codes CUN, NRFE, NUCG, CUEV (received respectively during the execution of the molecular swab or the execution of the antigenic swab or the preparation of the healing certificate ), or the AUTHCODE authorization code received via e-mail or SMS together with the last 8 digits of the identification number and the expiry date of the Health Card. - All these codes are uniquely associated with the COVID-19 green certificate relating to the health event that generated it. - For more information visit the website www.dgc.gov.it - www.dgc.gov.it + In Italy, the COVID-19 green certification is issued by the Ministry of Health, in digital format, to those who have been vaccinated or have obtained a negative result in a molecular or antigenic test or are cured of COVID-19. It has a QR code that contains the essential information of the holder and the health event that generated it (vaccination, negative test, recovery from COVID-19) and is digitally signed to guarantee its authenticity. + You can retrieve your COVID-19 Green Certification with this App by entering the unique code received after vaccination, the swab (CUN, NRFE) or recovery (NUCG), or with the AUTHCODE code, together with the last 8 digits of the identification number and the expiration date of your Health Card. You can also use this App to download the Covid-19 vaccination exemption certification, using the CUEV or AUTHCODE code. + The green COVID–19 certification is shown on the smartphone screen so that, in case of verification, it can be shown on request even in offline mode. The \"Delete\" button allows you to cancel the certification from your smartphone at any time. EU Digital Covid Certificate successfully recovered Select type @@ -579,7 +576,6 @@ Operating system: iOS 13.5.1; Model: iPhone XS; Exposure notifications: Active; Inactivated SARS-CoV-2 (Vero Cell) CoronaVac Covaxin (also known as BBV152 A, B, C) - The green COVID–19 certification is shown on the smartphone screen so that it can be viewed and shown on request, in case of verification, even in offline mode. The \"Delete\" button allows you to delete your certificate from your smartphone independently at any time. Certification valid in the European Union until the end of validity date and valid only in Italy up to 6 months from the start of validity date We have changed the order of your Certificates If you are reading this message it means that you have more than one COVID-19 Green Certificate installed on your device: they are now displayed in chronological order starting with the most recent. Remember that you can delete them or move from one to the other by swiping sideways with your finger @@ -598,4 +594,7 @@ Operating system: iOS 13.5.1; Model: iPhone XS; Exposure notifications: Active; Digital certification of COVID-19 vaccination exemption Soggetto che ha rilasciato la certificazione digitale di esenzione Certification valid for 180 days (6 months) from the date of the last administration, subject to regulatory changes + https://www.salute.gov.it/portale/nuovocoronavirus/dettaglioFaqNuovoCoronavirus.jsp?lingua=italiano&id=244#19 + Quarantine and isolation + Certification valid in the European Union until the end of validity date and valid in Italy 540 days (18 months) from the start of validity date, subject to regulatory changes diff --git a/build.gradle b/build.gradle index 6173e3b55..28f87f32a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { // App version digits versionMajor = 2 versionMinor = 5 - versionPatch = 9 + versionPatch = 10 // Version name follows the .. convention computeVersionName = { -> @@ -14,7 +14,12 @@ buildscript { // Version code is computed as: major + minor + patch + build number (where available) computeVersionCode = { -> - return (versionMajor * 1000000) + (versionMinor * 100000) + (versionPatch * 10000) + Integer.valueOf(System.env.BUILD_NUMBER ?: 0) + if (versionPatch <= 9) { + return (versionMajor * 1000000) + (versionMinor * 100000) + (versionPatch * 10000) + Integer.valueOf(System.env.BUILD_NUMBER ?: 0) + } + else { + return (versionMajor * 1000000) + (versionMinor * 100000) + (9 * 10000) + (versionPatch * 100) + Integer.valueOf(System.env.BUILD_NUMBER ?: 0) + } } // App version diff --git a/extensions/src/main/java/it/ministerodellasalute/immuni/extensions/utils/SpannableUtils.kt b/extensions/src/main/java/it/ministerodellasalute/immuni/extensions/utils/SpannableUtils.kt index 263f78571..b86d4c35b 100644 --- a/extensions/src/main/java/it/ministerodellasalute/immuni/extensions/utils/SpannableUtils.kt +++ b/extensions/src/main/java/it/ministerodellasalute/immuni/extensions/utils/SpannableUtils.kt @@ -17,6 +17,7 @@ package it.ministerodellasalute.immuni.extensions.utils import android.text.SpannableStringBuilder import android.text.SpannedString +import android.text.TextPaint import android.text.style.ClickableSpan import android.view.View import android.widget.TextView @@ -39,7 +40,6 @@ fun String.spanPlaceholder( val text = this val startIdx = this.indexOf(startPlaceholder) val endIdx = this.indexOf(endPlaceholder) - return buildSpannedString { append(text.subSequence(0, startIdx)) builderAction(text.subSequence(startIdx + 1, endIdx)) @@ -61,6 +61,22 @@ inline fun SpannableStringBuilder.clickable( } }, builderAction = builderAction) +/** + * Add click handler to spannable string + */ +inline fun SpannableStringBuilder.clickableWithoutUnderline( + crossinline onClick: () -> Unit, + builderAction: SpannableStringBuilder.() -> Unit +) = inSpans(object : ClickableSpan() { + override fun onClick(p0: View) { + onClick() + } + + override fun updateDrawState(ds: TextPaint) { + ds.isUnderlineText = false + } +}, builderAction = builderAction) + /** * Change color and weight of a specific part of a [TextView]. * @@ -145,3 +161,91 @@ fun String.colorHighlight( append(text.subSequence(currStart, text.length)) } } + +fun String.boldLinkSpan( + startPlaceholderLink: Char = '{', + endPlaceholderLink: Char = '}', + @ColorInt colorLink: Int, + linkUnderlined: Boolean = true, + boldLink: Boolean = false, + startPlaceholderBold: Char = '[', + endPlaceholderBold: Char = ']', + @ColorInt color: Int, + bold: Boolean = false, + onClick: () -> Unit +): SpannedString { + val text = this + val startIdx = this.indexOf(startPlaceholderBold) + val endIdx = this.indexOf(endPlaceholderBold) + val startIdxLink = this.indexOf(startPlaceholderLink) + val endIdxLink = this.indexOf(endPlaceholderLink) + if (startIdx < startIdxLink) { + return buildSpannedString { + append(text.subSequence(0, startIdx)) + color(color) { + if (bold) { + bold { + append(text.subSequence(startIdx + 1, endIdx)) + } + } else append(text.subSequence(startIdx + 1, endIdx)) + } + append(text.subSequence(endIdx + 1, startIdxLink)) + color(colorLink) { + if (linkUnderlined) { + clickable(onClick) { + if (boldLink) { + bold { + append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else { + clickableWithoutUnderline(onClick) { + if (boldLink) { + bold { + append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } + } + if (endIdxLink < text.length - 1) { + append(text.subSequence(endIdxLink + 1, text.length)) + } + } + } else { + return buildSpannedString { + append(text.subSequence(0, startIdxLink)) + color(colorLink) { + if (linkUnderlined) { + clickable(onClick) { + if (boldLink) { + bold { + append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else { + clickableWithoutUnderline(onClick) { + if (boldLink) { + bold { + append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } else append(text.subSequence(startIdxLink + 1, endIdxLink)) + } + } + } + append(text.subSequence(endIdxLink + 1, startIdx)) + color(color) { + if (bold) { + bold { + append(text.subSequence(startIdx + 1, endIdx)) + } + } else append(text.subSequence(startIdx + 1, endIdx)) + } + if (endIdx < text.length - 1) { + append(text.subSequence(endIdx + 1, text.length)) + } + } + } +}