Commit 919c6a09 authored by stopcovid@lunabee.com's avatar stopcovid@lunabee.com
Browse files

Update to 3.7.1

- Fix attestation not unregistering listener
- Fix API < 29 crash with viewPager
- Night themed pass icon
- Add long forgotten license text
parent 6ae30d25
......@@ -11,6 +11,7 @@ License Text URL: https://github.com/JakeWharton/timber/blob/master/LICENSE.txt
Source Code: https://github.com/JakeWharton/timber
Component: Progress button
License Text URL : http://www.apache.org/licenses/LICENSE-2.0
Source Code: https://github.com/razir/ProgressButton
Component: QRCode image processing library
......
......@@ -45,8 +45,8 @@ android {
applicationId "fr.gouv.android.stopcovid"
minSdkVersion 21
targetSdkVersion 30
versionCode 328
versionName "3.7.0"
versionCode 330
versionName "3.7.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
......
......@@ -7,5 +7,6 @@
"194fad873c5dfe7816819203063607ee496c2520e8a54b1d543bd8bd65dd2704",
"7c719083052144206256f36ff90cfd2781e57da74123cb733bd154d2ddb294c2",
"7d465e9fbd7fd0b8e7bb1f59507648817cbff0d1459d1bf4dfdb83782fa5bab2",
"cd7cbbaaba00f2c5ebf21b6d0aad5b0d7e517e0ed3edf41c20203101af4cccf7"
"cd7cbbaaba00f2c5ebf21b6d0aad5b0d7e517e0ed3edf41c20203101af4cccf7",
"31127784d6487168f1dbacb6fadf93e3a3899681ca58e778f200348f400ac655"
]
\ No newline at end of file
......@@ -989,7 +989,8 @@
"wallet.proof.europe.foreignCountryWarning.gb": "❤️ The NHS certificate is now recognized in France. If the venue staff can't scan it properly, please ask them to force a refresh and update \"TousAntiCovid Verif\" app on the Store.",
"widget.dcc.empty":"Add here your favorite certificate by tapping the heart ❤️ icon you want",
"widget.dcc.full":"Tap for full screen",
"walletController.favoriteCertificateSection.widget":"👉 Use the widget or soon the Apple Watch app to have this favorite certificate. Make sure to have the latest version of TousAntiCovid.",
"walletController.favoriteCertificateSection.widget":"👉 Use the widget to have this favorite certificate. Make sure to have the latest version of TousAntiCovid.",
"walletController.favoriteCertificateSection.widget.ios":"👉 Use the widget or the Apple Watch app to have this favorite certificate. Make sure to have the latest version of TousAntiCovid.",
"appShortcut.favoriteDcc": "Favorite certificate",
"keyfigure.nombrevaccinations.colorCode.light":"#51E476",
"keyfigure.nombrevaccinations.colorCode.dark":"#51E476",
......@@ -1101,7 +1102,36 @@
"accessibility.menu.moreoptions": "More options",
"accessibility.attestation.generate": "Generate my form",
"accessibility.hint.keyFigureChart.share": "Share the evolution of this key figure",
"accessibility.hint.keyFigureChart.label": "Chart representing the volution of the key figure",
"common.copied": "Copied"
"accessibility.hint.keyFigureChart.label": "Chart representing the evolution of the key figure",
"common.copied": "Copied",
"manageDataController.logFiles.title": "Log files",
"manageDataController.logFiles.subtitle": "To help the technical team, you can share these files when you contact the support team by email.\n\nThese log files are only stored on your smartphone, and don't contain personal data.",
"manageDataController.logFiles.noLogs": "You don't have any log file.",
"manageDataController.logFiles.logsFilesCount": "You currently have %d logs file(s).",
"manageDataController.logFiles.share.button": "Share logs",
"manageDataController.logFiles.delete.button": "Delete logs",
"manageDataController.logFiles.delete.confirmationDialog.title": "Warning",
"manageDataController.logFiles.delete.confirmationDialog.message": "Are you sure you want to delete the logs files?",
"pdfImport.protected.enterPassword.alert.title": "Protected document",
"pdfImport.protected.enterPassword.alert.message": "Please enter the document password to import the QR Code.",
"pdfImport.protected.enterPassword.alert.placeholder": "Password",
"pdfImport.protected.wrongPassword.alert.title": "Error",
"pdfImport.protected.wrongPassword.alert.message": "The provided document password is wrong.\nDo you want to try again?",
"vaccineCompletionController.button.favorite.title": "Add to favorites",
"vaccineCompletionController.footer.favorite": "Touch this button if you want to set this certificate as the favorite one in your wallet.",
"accessibility.home.otherOptions": "Other available actions",
"accessibility.isolation.formWasUpdated": "The form was updated. Continue to browse it to answer the questions and read the recommandations when available.",
"accessibility.back.zGesture": "You can go back by drawing a Z with 2 fingers.",
"accessibility.closeModal.zGesture": "You can close this screen by drawing a Z with 2 fingers.",
"accessibility.onboarding.explanations.step1": "Step 1",
"accessibility.onboarding.explanations.step2": "Step 2",
"accessibility.onboarding.explanations.step3": "Step 3",
"vaccineCompletionController.footer.notify": "En appuyant sur ce bouton, vous recevrez une notification le %@.",
"vaccineCompletionController.button.notifyAndFavorite.title": "Me notifier et ajouter en favori ❤️",
"vaccineCompletionController.footer.notifyAndFavorite": "En appuyant sur ce bouton, vous recevrez une notification le %@, et ce certificat sera ajouté en favori dans votre carnet."
}
......@@ -929,7 +929,6 @@
"europeanCertificate.fullscreen.englishDescription.recovery": "<FULL_NAME>\nDate of birth <BIRTHDATE>\nTested on <DATE>",
"europeanCertificate.fullscreen.englishDescription.test": "<FULL_NAME>\nDate of birth <BIRTHDATE>\n<ANALYSIS_RESULT> - <ANALYSIS_CODE>\nTested on <FROM_DATE>",
"documentExplanationController.vaccinCertificate.title": "Attestation de vaccin",
"documentExplanationController.testCertificate.title": "Certificat de test",
"documentExplanationController.vaccinCertificate.explanation": "Voici un exemple de document de l'Assurance Maladie avec le certificat de vaccination. Le QR Code à flasher avec TousAntiCovid est à droite, indiqué par le carré orange.\n\n🇪🇺 Le nouveau \"Certificat COVID Numérique UE\" est également accepté dans TousAntiCovid.",
......@@ -964,7 +963,8 @@
"wallet.proof.europe.foreignCountryWarning.gb": "❤️ Les certificats du NHS sont désormais reconnus en France. Si le personnel du lieu ne réussit pas à le scanner, veuillez leur demander de forcer une synchronisation, et de mettre à jour l'app \"TousAntiCovid Verif\" sur le Store.",
"widget.dcc.empty":"Ajoutez ici votre certificat favori en appuyant sur l'icône coeur ❤️ sur le certificat (au format européen) souhaité.",
"widget.dcc.full":"Appuyez pour passer en plein écran",
"walletController.favoriteCertificateSection.widget":"👉 Retrouvez ce certificat favori dans un widget et bientôt sur l'app Apple Watch. Mettez bien à jour TousAntiCovid.",
"walletController.favoriteCertificateSection.widget":"👉 Retrouvez ce certificat favori dans un widget. Mettez bien à jour TousAntiCovid.",
"walletController.favoriteCertificateSection.widget.ios":"👉 Retrouvez ce certificat favori dans un widget et l'appli Apple Watch. Mettez bien à jour TousAntiCovid.",
"appShortcut.favoriteDcc": "Certificat favori",
"keyfigure.nombrevaccinations.colorCode.light":"#51E476",
"keyfigure.nombrevaccinations.colorCode.dark":"#51E476",
......@@ -1065,9 +1065,6 @@
"keyfigure.sivicsidepvacsireanonvax.learnMore": "Il s’agit du nombre d'admissions en soins critiques (réanimation, soins intensifs ou en unité de surveillance continue) pour 1 million de personnes non vaccinées, tous âges confondus.\n\nCet indicateur rapporte, sur 7 jours, le nombre d’admissions de patients ayant eu un test PCR positif par date d’admission à la couverture vaccinale datant de 7 jours avant la date d’admission.\n\nCes résultats sont mis à jour de manière hebdomadaire et issus du rapprochement des informations issues de SI-VIC, SI-DEP et VAC-SI, les systèmes d’information portant respectivement sur les hospitalisations et la vaccination Covid-19.",
"walletController.alert.duplicatedCertificate.confirm":"Ajouter à nouveau",
"walletController.alert.duplicatedCertificate.subtitle":"Vous avez déjà importé ce certificat.\n\nSouhaitez-vous l’importer une nouvelle fois quand même ?",
"accessibility.wallet.dcc.favorite.define": "Ajouter en favori",
......@@ -1080,5 +1077,35 @@
"accessibility.menu.moreoptions": "Plus d'options",
"accessibility.attestation.generate": "Générer mon attestation",
"accessibility.hint.keyFigureChart.share": "Partager l'évolution du chiffre clé",
"accessibility.hint.keyFigureChart.label": "Graphique représentant l'évolution du chiffre clé dans le temps"
"accessibility.hint.keyFigureChart.label": "Graphique représentant l'évolution du chiffre clé dans le temps",
"common.copied": "Copié",
"manageDataController.logFiles.title": "Fichiers de logs",
"manageDataController.logFiles.subtitle": "Pour aider l'équipe technique, vous pouvez partager ce(s) fichier(s) quand vous contactez l'équipe de support par email.\n\nCes fichiers de logs sont uniquement stockés sur votre smartphone, et ne contiennent pas de données personnelles.",
"manageDataController.logFiles.noLogs": "Vous n'avez actuellement aucun fichier de log.",
"manageDataController.logFiles.logsFilesCount": "Vous avez actuellement %d fichier(s) de logs.",
"manageDataController.logFiles.share.button": "Partager les logs",
"manageDataController.logFiles.delete.button": "Supprimer les logs",
"manageDataController.logFiles.delete.confirmationDialog.title": "Attention",
"manageDataController.logFiles.delete.confirmationDialog.message": "Êtes-vous sûr de vouloir supprimer les fichiers de logs ?",
"pdfImport.protected.enterPassword.alert.title": "Document protégé",
"pdfImport.protected.enterPassword.alert.message": "Veuillez entrer le mot de passe du document afin de pouvoir importer le QR Code.",
"pdfImport.protected.enterPassword.alert.placeholder": "Mot de passe",
"pdfImport.protected.wrongPassword.alert.title": "Erreur",
"pdfImport.protected.wrongPassword.alert.message": "Le mot de passe saisi n'est pas le bon.\nVoulez-vous essayer à nouveau ?",
"vaccineCompletionController.button.favorite.title": "Ajouter en favori",
"vaccineCompletionController.footer.favorite": "En appuyant sur ce bouton, ce certificat sera ajouté en favori dans votre carnet.",
"accessibility.home.otherOptions": "Autres actions disponibles",
"accessibility.isolation.formWasUpdated": "Le formulaire a été mis à jour. Continuez de le parcourir pour répondre aux différentes questions et lire les recommandations le cas échéant.",
"accessibility.back.zGesture": "Vous pouvez revenir en arrière en dessinant un Z avec 2 doigts.",
"accessibility.closeModal.zGesture": "Vous pouvez fermer cet écran en dessinant un Z avec 2 doigts.",
"accessibility.onboarding.explanations.step1": "étape 1",
"accessibility.onboarding.explanations.step2": "étape 2",
"accessibility.onboarding.explanations.step3": "étape 3",
"vaccineCompletionController.footer.notify": "En appuyant sur ce bouton, vous recevrez une notification le %@.",
"vaccineCompletionController.button.notifyAndFavorite.title": "Me notifier et ajouter en favori ❤️",
"vaccineCompletionController.footer.notifyAndFavorite": "En appuyant sur ce bouton, vous recevrez une notification le %@, et ce certificat sera ajouté en favori dans votre carnet."
}
......@@ -19,6 +19,7 @@ import android.view.MenuItem
import android.view.View
import android.view.inputmethod.EditorInfo
import androidx.fragment.app.activityViewModels
import androidx.navigation.NavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
......@@ -65,6 +66,13 @@ class NewAttestationFragment : MainFragment() {
requireContext().robertManager()
}
private val onDestinationChangedListener = NavController.OnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.attestationsFragment) {
viewModel.resetInfos()
activity?.hideSoftKeyBoard()
}
}
override fun getTitleKey(): String = "newAttestationController.title"
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -88,12 +96,7 @@ class NewAttestationFragment : MainFragment() {
refreshScreen()
}
findNavControllerOrNull()?.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.attestationsFragment) {
viewModel.resetInfos()
activity?.hideSoftKeyBoard()
}
}
findNavControllerOrNull()?.addOnDestinationChangedListener(onDestinationChangedListener)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
......@@ -149,7 +152,7 @@ class NewAttestationFragment : MainFragment() {
FormManager.form.value?.peekContent()?.let { form ->
form.forEach { section ->
section.forEach { formField ->
items += itemForFormField(formField).apply {
items += itemForFormField(formField, items.count()).apply {
identifier = formField.key.hashCode().toLong()
}
}
......@@ -182,7 +185,7 @@ class NewAttestationFragment : MainFragment() {
return items
}
private fun itemForFormField(formField: FormField): GenericItem {
private fun itemForFormField(formField: FormField, position: Int): GenericItem {
return when (formField.type) {
"date" -> pickerEditTextItem {
placeholder = strings[formField.attestationPlaceholder()]
......@@ -199,7 +202,7 @@ class NewAttestationFragment : MainFragment() {
MaterialAlertDialogBuilder(requireContext()).showSpinnerDatePicker(strings, initialTimestamp) { newDate ->
text = dateFormat.format(Date(newDate))
viewModel.infos[formField.dataKeyValue] = FormEntry(newDate.toString(), formField.type, formField.key)
binding?.recyclerView?.adapter?.notifyDataSetChanged()
binding?.recyclerView?.adapter?.notifyItemChanged(position)
}
}
}
......@@ -231,7 +234,7 @@ class NewAttestationFragment : MainFragment() {
}.time
)
viewModel.infos[formField.dataKeyValue] = FormEntry(newDate.toString(), formField.type, formField.key)
binding?.recyclerView?.adapter?.notifyDataSetChanged()
binding?.recyclerView?.adapter?.notifyItemChanged(position)
}
}
}
......@@ -322,6 +325,11 @@ class NewAttestationFragment : MainFragment() {
super.onSaveInstanceState(outState)
}
override fun onDestroyView() {
super.onDestroyView()
findNavControllerOrNull()?.removeOnDestinationChangedListener(onDestinationChangedListener)
}
companion object {
private const val SAVE_INSTANCE_ATTESTATION_INFOS: String = "Save.Instance.Attestation.Info"
}
......
......@@ -134,7 +134,6 @@ class WalletPagerFragment : BaseFragment() {
override fun onDestroyView() {
super.onDestroyView()
viewPager.adapter = null
tabLayoutMediator?.detach()
(activity as? MainActivity)?.binding?.tabLayout?.apply {
isVisible = false
......@@ -142,6 +141,11 @@ class WalletPagerFragment : BaseFragment() {
}
}
override fun onDestroy() {
super.onDestroy()
viewPager.adapter = null
}
private inner class WalletPagerAdapter : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun getItemCount(): Int = VIEWPAGER_ITEM_COUNT
......
......@@ -44,7 +44,8 @@ object WalletManager {
// This function adds a way to refresh the liveData if the Keychain wasn't available at app start
fun refreshWalletIfNeeded(localKeystoreDataSource: LocalKeystoreDataSource) {
if (localKeystoreDataSource.rawWalletCertificatesLiveData.value != localKeystoreDataSource.rawWalletCertificates) {
if (localKeystoreDataSource.rawWalletCertificatesLiveData.value != localKeystoreDataSource.rawWalletCertificates
&& !localKeystoreDataSource.rawWalletCertificates.isNullOrEmpty()) {
localKeystoreDataSource.rawWalletCertificates = localKeystoreDataSource.rawWalletCertificates
}
}
......
<!--
~ This Source Code Form is subject to the terms of the Mozilla Public
~ License, v. 2.0. If a copy of the MPL was not distributed with this
~ file, You can obtain one at https://mozilla.org/MPL/2.0/.
~
~ Authors
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Created by Lunabee Studio / Date - 2021/13/08 - for the TOUS-ANTI-COVID project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="106dp"
android:height="36dp"
android:viewportWidth="106"
android:viewportHeight="36">
<path
android:fillColor="#85BBFF"
android:fillType="evenOdd"
android:pathData="M7.896,11.013C10.126,11.013 11.578,9.351 11.578,7.065C11.578,4.779 10.126,3.117 7.896,3.117C6.367,3.117 5.2,3.792 4.318,5.091L4.293,5.065L4.293,9.065L4.318,9.039C5.2,10.338 6.367,11.013 7.896,11.013L7.896,11.013ZM1,0.519L4.293,0.519L4.293,1.454C5.329,0.519 6.652,0 8.363,0C12.511,0 15,3.247 15,7.065C15,10.883 12.511,14.13 8.363,14.13C6.652,14.13 5.329,13.61 4.293,12.675L4.293,20L1,20L1,0.519Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#85BBFF"
android:fillType="evenOdd"
android:pathData="M22.25,11.375C23.777,11.375 24.875,10.603 25.571,9.548L25.571,7.772L22.384,8.313C20.937,8.544 20.375,9.11 20.375,9.934C20.375,10.757 21.098,11.375 22.25,11.375M17,10.063C17,8.081 18.581,6.562 21.5,6.099L25.571,5.43L25.571,5.096C25.571,3.732 24.5,2.857 22.973,2.857C21.661,2.857 20.563,3.397 19.946,4.401L17.428,2.574C18.634,0.978 20.643,0 23.08,0C26.991,0 29,2.239 29,5.096L29,13.485L25.571,13.485L25.571,12.276C24.714,13.305 23.134,14 21.554,14C18.848,14 17,12.507 17,10.063"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#85BBFF"
android:fillType="evenOdd"
android:pathData="M33.148,9.599C33.941,10.603 34.887,11.324 36.115,11.324C37.138,11.324 37.701,10.757 37.701,9.985C37.701,7.721 31.691,8.673 31.691,3.989C31.691,1.698 33.609,0 36.269,0C38.263,0 40.054,0.952 41,2.213L38.826,4.169C38.161,3.32 37.317,2.676 36.294,2.676C35.322,2.676 34.811,3.14 34.811,3.86C34.811,6.073 40.821,5.173 40.821,9.779C40.77,12.507 38.596,14 36.166,14C33.865,14 32.228,13.073 31,11.607L33.148,9.599Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#85BBFF"
android:fillType="evenOdd"
android:pathData="M45.148,9.599C45.941,10.603 46.888,11.324 48.115,11.324C49.138,11.324 49.701,10.757 49.701,9.985C49.701,7.721 43.691,8.673 43.691,3.989C43.691,1.698 45.609,0 48.269,0C50.263,0 52.054,0.952 53,2.213L50.826,4.169C50.161,3.32 49.317,2.676 48.294,2.676C47.322,2.676 46.811,3.14 46.811,3.86C46.811,6.073 52.821,5.173 52.821,9.779C52.77,12.507 50.596,14 48.166,14C45.865,14 44.228,13.073 43,11.607L45.148,9.599Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#5770BE"
android:fillType="evenOdd"
android:pathData="M58,13l48,0l0,-13l-48,0z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M67.169,8.265L68,8.841C67.413,9.538 66.482,10 65.335,10C63.346,10 62,8.622 62,7C62,5.378 63.346,4 65.335,4C66.482,4 67.413,4.462 68,5.159L67.169,5.735C66.771,5.225 66.129,4.876 65.335,4.876C64.015,4.876 63.066,5.816 63.066,7C63.066,8.192 64.015,9.124 65.335,9.124C66.129,9.124 66.771,8.776 67.169,8.265"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M75,7C75,8.622 73.781,10 72,10C70.211,10 69,8.622 69,7C69,5.378 70.211,4 72,4C73.781,4 75,5.378 75,7M74.032,7C74.032,5.808 73.187,4.876 72,4.876C70.813,4.876 69.959,5.816 69.959,7C69.959,8.192 70.813,9.124 72,9.124C73.187,9.124 74.032,8.184 74.032,7"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M76.049,4l1.951,4.98l1.952,-4.98l1.049,0l-2.355,6l-1.298,0l-2.347,-6z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M82,10l1,0l0,-6l-1,0z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M85,4L87.546,4C89.605,4 91,5.38 91,7C91,8.62 89.605,10 87.546,10L85,10L85,4ZM86.067,4.9L86.067,9.1L87.555,9.1C88.912,9.1 89.886,8.166 89.886,7C89.886,5.826 88.912,4.9 87.555,4.9L86.067,4.9Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M92,8l2,0l0,-1l-2,0z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M95.015,4.96l-1.509,0.797l-0.506,-0.668l2.033,-1.089l0.967,0l0,6l-0.985,0z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:pathData="M97,9.051L97.8,8.508C98.162,8.954 98.562,9.189 99.152,9.189C100.209,9.189 100.848,8.452 100.915,7.17C100.457,7.543 99.876,7.746 99.171,7.746C97.886,7.746 97.038,6.943 97.038,5.93C97.038,4.884 97.914,4 99.438,4C101.076,4 102,5.006 102,6.935C102,8.743 101.076,10 99.162,10C98.105,10 97.448,9.595 97,9.051M99.343,6.951C99.962,6.951 100.514,6.733 100.886,6.287C100.733,5.216 100.171,4.811 99.4,4.811C98.6,4.811 98.114,5.281 98.114,5.897C98.114,6.497 98.619,6.951 99.343,6.951"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M2.148,31.599C2.941,32.603 3.887,33.323 5.115,33.323C6.138,33.323 6.701,32.757 6.701,31.985C6.701,29.721 0.69,30.673 0.69,25.989C0.69,23.699 2.609,22 5.269,22C7.264,22 9.054,22.952 10,24.213L7.826,26.169C7.161,25.32 6.317,24.677 5.294,24.677C4.322,24.677 3.811,25.14 3.811,25.86C3.811,28.073 9.821,27.173 9.821,31.779C9.77,34.507 7.596,36 5.166,36C2.865,36 1.228,35.073 0,33.607L2.148,31.599Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M17.25,33.375C18.777,33.375 19.875,32.603 20.571,31.548L20.571,29.772L17.384,30.312C15.938,30.544 15.375,31.11 15.375,31.934C15.375,32.757 16.098,33.375 17.25,33.375M12,32.062C12,30.081 13.58,28.563 16.5,28.099L20.571,27.43L20.571,27.096C20.571,25.732 19.5,24.857 17.973,24.857C16.661,24.857 15.563,25.397 14.947,26.401L12.429,24.573C13.634,22.978 15.643,22 18.08,22C21.991,22 24,24.239 24,27.096L24,35.485L20.571,35.485L20.571,34.276C19.714,35.305 18.134,36 16.554,36C13.848,36 12,34.507 12,32.062"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M27,22.534L30.498,22.534L30.498,23.603C31.462,22.695 32.756,22 34.602,22C37.604,22 40,24.004 40,27.985L40,36L36.447,36L36.447,28.118C36.447,26.328 35.428,25.206 33.72,25.206C31.958,25.206 31.021,26.355 30.498,27.21L30.498,36L27,36L27,22.534Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M43.46,36L46.54,36L46.54,22.702L43.46,22.702L43.46,36ZM43,18.19C43,17.003 43.921,16 45.012,16C46.103,16 47,17.003 47,18.19C47,19.377 46.103,20.38 45.012,20.38C43.921,20.38 43,19.377 43,18.19L43,18.19Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M51.493,25.428L49,25.428L49,22.347L51.493,22.347L51.493,19L54.889,19L54.889,22.347L58.974,22.347L58.974,25.428L54.889,25.428L54.889,30.847C54.889,32.335 55.684,32.919 57.011,32.919C57.939,32.919 58.549,32.813 59,32.627L59,35.575C58.337,35.867 57.541,36 56.427,36C53.085,36 51.493,34.114 51.493,30.847L51.493,25.428Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M66.25,33.375C67.777,33.375 68.875,32.603 69.571,31.548L69.571,29.772L66.384,30.312C64.938,30.544 64.375,31.11 64.375,31.934C64.375,32.757 65.098,33.375 66.25,33.375M61,32.062C61,30.081 62.58,28.563 65.5,28.099L69.571,27.43L69.571,27.096C69.571,25.732 68.5,24.857 66.973,24.857C65.661,24.857 64.563,25.397 63.946,26.401L61.429,24.573C62.634,22.978 64.643,22 67.08,22C70.991,22 73,24.239 73,27.096L73,35.485L69.571,35.485L69.571,34.276C68.714,35.305 67.134,36 65.554,36C62.848,36 61,34.507 61,32.062"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M76.46,36L79.54,36L79.54,22.702L76.46,22.702L76.46,36ZM76,18.19C76,17.003 76.921,16 78.012,16C79.103,16 80,17.003 80,18.19C80,19.377 79.103,20.38 78.012,20.38C76.921,20.38 76,19.377 76,18.19L76,18.19Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M84,22.273L87.342,22.273L87.342,23.634C88.21,22.708 89.342,22 90.842,22C91.289,22 91.684,22.082 92,22.191L92,25.813C91.579,25.704 91.131,25.623 90.526,25.623C88.895,25.623 87.842,26.549 87.342,27.393L87.342,36L84,36L84,22.273Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillColor="#00AB57"
android:fillType="evenOdd"
android:pathData="M96.588,27.198L102.49,27.198C102.438,25.912 101.476,24.728 99.734,24.728C98.122,24.728 97.03,25.5 96.588,27.198M100.28,36C95.626,36 93,32.783 93,29C93,25.165 95.444,22 99.734,22C103.374,22 105.766,24.419 105.766,27.816C105.766,28.537 105.662,29.231 105.558,29.669L96.38,29.669C96.588,31.805 98.096,33.066 100.332,33.066C101.762,33.066 102.932,32.448 103.634,31.522L106,33.375C104.778,34.996 102.75,36 100.28,36"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment