diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt index c36cb24610b6aabd39782549adc9be355ff38be8..39be22363ad93e8911be994071f4b7e9591ce19d 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt @@ -2,15 +2,14 @@ package de.rki.coronawarnapp.covidcertificate.test.ui import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import androidx.test.espresso.Espresso -import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.ext.junit.runners.AndroidJUnit4 import dagger.Module import dagger.android.ContributesAndroidInjector import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateCard -import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateErrorCard -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinatedPerson import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.CreateVaccinationCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.HeaderInfoVaccinationCard @@ -25,6 +24,7 @@ import org.joda.time.Duration import org.joda.time.format.DateTimeFormat import org.junit.After import org.junit.Before +import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import testhelpers.BaseUITest @@ -35,6 +35,7 @@ import testhelpers.selectBottomNavTab import testhelpers.takeScreenshot @RunWith(AndroidJUnit4::class) +@Ignore("To be removed") class CertificatesFragmentTest : BaseUITest() { @MockK lateinit var viewModel: CertificatesViewModel @@ -107,28 +108,6 @@ class CertificatesFragmentTest : BaseUITest() { ) } - @Screenshot - @Test - fun capture_screenshot_vaccination_complete() { - every { vaccinatedPerson.getVaccinationStatus() } returns VaccinatedPerson.Status.IMMUNITY - every { viewModel.screenItems } returns getVaccinationImmuneScreenItems() - - takeScreenshotInMainActivity("immune") - } - - private fun getVaccinationImmuneScreenItems(): LiveData<List<CertificatesItem>> { - return MutableLiveData( - listOf( - HeaderInfoVaccinationCard.Item, - ImmuneVaccinationCard.Item( - vaccinatedPerson = vaccinatedPerson, - onClickAction = {} - ), - NoCovidTestCertificatesCard.Item - ) - ) - } - @Screenshot @Test fun capture_screenshot_green_certificate() { @@ -158,33 +137,12 @@ class CertificatesFragmentTest : BaseUITest() { @Test fun capture_screenshot_pending_certificate() { every { vaccinatedPerson.getVaccinationStatus() } returns VaccinatedPerson.Status.IMMUNITY - every { viewModel.screenItems } returns getVaccinationPendingCertScreenItems() - takeScreenshotInMainActivity("pending") } - private fun getVaccinationPendingCertScreenItems(): LiveData<List<CertificatesItem>> { - return MutableLiveData( - listOf( - HeaderInfoVaccinationCard.Item, - ImmuneVaccinationCard.Item( - vaccinatedPerson = vaccinatedPerson, - onClickAction = {} - ), - CovidTestCertificateErrorCard.Item( - testDate = testDate, - isUpdatingData = false, - onRetryAction = {}, - onDeleteAction = {} - ) - ) - ) - } - private fun takeScreenshotInMainActivity(suffix: String = "") { launchInMainActivity<CertificatesFragment>() - Espresso.onView(ViewMatchers.withId(R.id.fake_bottom_navigation)) - .perform(selectBottomNavTab(R.id.green_certificate_graph)) + onView(withId(R.id.fake_bottom_navigation)).perform(selectBottomNavTab(R.id.certificate_graph)) takeScreenshot<CertificatesFragment>(suffix) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CovidCertificateDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CovidCertificateDetailsFragmentTest.kt index ad52fa92bba5a5aa7cf6ea6be89462fd26bec974..5411c5a5d063308827cf6c253607d0f2732335fe 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CovidCertificateDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CovidCertificateDetailsFragmentTest.kt @@ -94,7 +94,7 @@ class VaccinationDetailsFragmentTest : BaseUITest() { get() = "negative" override val testName: String get() = "Xep" - override val testNameAndManufactor: String + override val testNameAndManufacturer: String get() = "Xup" override val sampleCollectedAt: Instant get() = testDate @@ -102,6 +102,12 @@ class VaccinationDetailsFragmentTest : BaseUITest() { get() = testDate override val testCenter: String get() = "AB123" + override val registeredAt: Instant + get() = testDate + override val isUpdatingData: Boolean + get() = false + override val isCertificateRetrievalPending: Boolean + get() = false override val issuer: String get() = "G0593048274845483647869576478784" override val issuedAt: Instant diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificates.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificates.kt index 7569f233ab442deaad00c7ec5c870a6918e9be54..e0d609ca6c24fbcb650f9ba4e791e8a9418df1b8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificates.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificates.kt @@ -4,9 +4,9 @@ import de.rki.coronawarnapp.covidcertificate.common.certificate.CertificatePerso import de.rki.coronawarnapp.covidcertificate.common.certificate.CwaCovidCertificate data class PersonCertificates( - val certificates: List<CwaCovidCertificate> + val certificates: List<CwaCovidCertificate>, + val isCwaUser: Boolean = false // TODO distinguish between CWA user and other family members ) { - val personIdentifier: CertificatePersonIdentifier get() = certificates.first().personIdentifier diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt index 6c2481f4605175e4680d94ae792b2fb01d55c20f..d5cd4770d0861327d9aee0bae856f32b272ecd4e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt @@ -1,11 +1,16 @@ package de.rki.coronawarnapp.covidcertificate.person.core import dagger.Reusable +import de.rki.coronawarnapp.covidcertificate.common.certificate.CertificatePersonIdentifier +import de.rki.coronawarnapp.covidcertificate.common.qrcode.QrCodeString import de.rki.coronawarnapp.covidcertificate.recovery.core.RecoveryCertificateRepository +import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateRepository import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.VaccinationRepository import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOf +import org.joda.time.Instant +import org.joda.time.LocalDate import javax.inject.Inject // Aggregate the certificates and sort them @@ -16,6 +21,67 @@ class PersonCertificatesProvider @Inject constructor( private val vaccinationRepository: VaccinationRepository, ) { + // TODO remove + fun testCertificate(index: Int, isCertificateRetrievalPending: Boolean = false, isUpdating: Boolean = false) = + object : TestCertificate { + override val targetName: String + get() = "targetName" + override val testType: String + get() = "testType" + override val testResult: String + get() = "testResult" + override val testName: String? + get() = "testName" + override val testNameAndManufacturer: String? + get() = "testNameAndManufacturer" + override val sampleCollectedAt: Instant + get() = Instant.now() + override val testResultAt: Instant? + get() = Instant.now() + override val testCenter: String + get() = "testCenter" + override val registeredAt: Instant + get() = Instant.now() + override val isUpdatingData: Boolean + get() = isUpdating + override val isCertificateRetrievalPending: Boolean + get() = isCertificateRetrievalPending + override val issuer: String + get() = "issuer" + override val issuedAt: Instant + get() = Instant.now() + override val expiresAt: Instant + get() = Instant.now() + override val qrCode: QrCodeString + get() = (0..20).fold("") { it, _ -> it + "qrCode$index" } + + override val firstName: String + get() = "Max" + override val lastName: String + get() = "Mustermann" + override val fullName: String + get() = "Max Mustermann $index" + override val dateOfBirth: LocalDate + get() = LocalDate.now() + override val personIdentifier: CertificatePersonIdentifier + get() = CertificatePersonIdentifier( + LocalDate.now(), + "last$index", + "firs$index" + ) + override val certificateIssuer: String + get() = "certificateIssuer" + override val certificateCountry: String + get() = "certificateCountry" + override val certificateId: String + get() = "certificateId" + } + // TODO - val personCertificates: Flow<Set<PersonCertificates>> = emptyFlow() + val personCertificates: Flow<Set<PersonCertificates>> = flowOf( + (0..30).map { PersonCertificates(listOf(testCertificate(it))) }.toSet() + + PersonCertificates(listOf(testCertificate(31, true, false))) + + PersonCertificates(listOf(testCertificate(32, true, true))) + + PersonCertificates(listOf(testCertificate(33)), true) + ) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewAdapter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..1f5a6625591ebd1918748c75851f864d540c88a0 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewAdapter.kt @@ -0,0 +1,42 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview + +import android.view.ViewGroup +import androidx.annotation.LayoutRes +import androidx.viewbinding.ViewBinding +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CovidTestCertificatePendingCard +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.PersonCertificateCard +import de.rki.coronawarnapp.util.lists.BindableVH +import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffUtilAdapter +import de.rki.coronawarnapp.util.lists.diffutil.AsyncDiffer +import de.rki.coronawarnapp.util.lists.modular.ModularAdapter +import de.rki.coronawarnapp.util.lists.modular.mods.DataBinderMod +import de.rki.coronawarnapp.util.lists.modular.mods.StableIdMod +import de.rki.coronawarnapp.util.lists.modular.mods.TypedVHCreatorMod + +class PersonOverviewAdapter : + ModularAdapter<PersonOverviewAdapter.PersonOverviewItemVH<CertificatesItem, ViewBinding>>(), + AsyncDiffUtilAdapter<CertificatesItem> { + + override val asyncDiffer: AsyncDiffer<CertificatesItem> = AsyncDiffer(adapter = this) + + init { + modules.addAll( + listOf( + StableIdMod(data), + DataBinderMod<CertificatesItem, PersonOverviewItemVH<CertificatesItem, ViewBinding>>(data), + TypedVHCreatorMod({ data[it] is CovidTestCertificatePendingCard.Item }) { + CovidTestCertificatePendingCard(it) + }, + TypedVHCreatorMod({ data[it] is PersonCertificateCard.Item }) { PersonCertificateCard(it) }, + ) + ) + } + + override fun getItemCount(): Int = data.size + + abstract class PersonOverviewItemVH<Item : CertificatesItem, VB : ViewBinding>( + @LayoutRes layoutRes: Int, + parent: ViewGroup + ) : ModularAdapter.VH(layoutRes, parent), BindableVH<Item, VB> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragment.kt index 90fe2f52ef6b9b3b2b98c1d6f887d3cc91c93815..3304e0ad3f1c86e5732339221a8bc78ea8ce39fc 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragment.kt @@ -1,4 +1,96 @@ package de.rki.coronawarnapp.covidcertificate.person.ui.overview +import android.os.Bundle +import android.view.View +import android.widget.Toast +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.DefaultItemAnimator +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem +import de.rki.coronawarnapp.databinding.PersonOverviewFragmentBinding +import de.rki.coronawarnapp.util.di.AutoInject +import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator +import de.rki.coronawarnapp.util.lists.diffutil.update +import de.rki.coronawarnapp.util.onScroll +import de.rki.coronawarnapp.util.ui.doNavigate +import de.rki.coronawarnapp.util.ui.viewBinding +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider +import de.rki.coronawarnapp.util.viewmodel.cwaViewModels +import javax.inject.Inject + // Shows a list of multiple persons -class PersonOverviewFragment +class PersonOverviewFragment : Fragment(R.layout.person_overview_fragment), AutoInject { + @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory + private val viewModel: PersonOverviewViewModel by cwaViewModels { viewModelFactory } + private val binding by viewBinding<PersonOverviewFragmentBinding>() + private val personOverviewAdapter = PersonOverviewAdapter() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + binding.apply { + bindToolbar() + bindRecycler() + scanQrcodeFab.setOnClickListener { viewModel.onScanQrCode() } + } + viewModel.personCertificates.observe(viewLifecycleOwner) { binding.bindViews(it) } + viewModel.events.observe(viewLifecycleOwner) { onNavEvent(it) } + } + + private fun onNavEvent(event: PersonOverviewFragmentEvents) { + when (event) { + is OpenPersonDetailsFragment -> doNavigate( + PersonOverviewFragmentDirections.actionPersonOverviewFragmentToVaccinationListFragment( + event.personIdentifier + ) + ) + is ShowDeleteDialog -> MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.test_certificate_delete_dialog_title) + .setMessage(R.string.test_certificate_delete_dialog_body) + .setNegativeButton(R.string.test_certificate_delete_dialog_cancel_button) { _, _ -> } + .setCancelable(false) + .setPositiveButton(R.string.test_certificate_delete_dialog_confirm_button) { _, _ -> + viewModel.deleteTestCertificate(event.certificateId) + } + .show() + + is ShowRefreshErrorDialog -> MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.test_certificate_refresh_dialog_title) + .setMessage(event.error.localizedMessage ?: getString(R.string.errors_generic_headline)) + .setCancelable(false) + .setPositiveButton(R.string.test_certificate_refresh_dialog_confirm_button) { _, _ -> } + .show() + + ScanQrCode -> Toast.makeText( + requireContext(), + "TODO \uD83D\uDEA7 Tomorrow maybe?!", + Toast.LENGTH_LONG + ).show() + } + } + + private fun PersonOverviewFragmentBinding.bindToolbar() { + toolbar.setOnMenuItemClickListener { + when (it.itemId) { + R.id.menu_information -> doNavigate( + PersonOverviewFragmentDirections.actionPersonOverviewFragmentToVaccinationConsentFragment(false) + ).run { true } + + else -> onOptionsItemSelected(it) + } + } + } + + private fun PersonOverviewFragmentBinding.bindViews(persons: List<CertificatesItem>) { + emptyLayout.isVisible = persons.isEmpty() + personOverviewAdapter.update(persons) + } + + private fun PersonOverviewFragmentBinding.bindRecycler() = recyclerView.apply { + adapter = personOverviewAdapter + addItemDecoration(TopBottomPaddingDecorator(topPadding = R.dimen.spacing_tiny)) + itemAnimator = DefaultItemAnimator() + + with(scanQrcodeFab) { onScroll { extend -> if (extend) extend() else shrink() } } + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentEvents.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentEvents.kt new file mode 100644 index 0000000000000000000000000000000000000000..92702e837525293161006f1dbc62429c08710068 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentEvents.kt @@ -0,0 +1,8 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview + +sealed class PersonOverviewFragmentEvents + +data class ShowRefreshErrorDialog(val error: Throwable) : PersonOverviewFragmentEvents() +data class ShowDeleteDialog(val certificateId: String) : PersonOverviewFragmentEvents() +data class OpenPersonDetailsFragment(val personIdentifier: String) : PersonOverviewFragmentEvents() +object ScanQrCode : PersonOverviewFragmentEvents() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentModule.kt new file mode 100644 index 0000000000000000000000000000000000000000..802b89be17b6359311c046282ace9211ee540747 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentModule.kt @@ -0,0 +1,19 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview + +import dagger.Binds +import dagger.Module +import dagger.multibindings.IntoMap +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory +import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey + +@Module +abstract class PersonOverviewFragmentModule { + + @Binds + @IntoMap + @CWAViewModelKey(PersonOverviewViewModel::class) + abstract fun personOverviewFragment( + factory: PersonOverviewViewModel.Factory + ): CWAViewModelFactory<out CWAViewModel> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewItemColor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewItemColor.kt new file mode 100644 index 0000000000000000000000000000000000000000..e03adfe037deec24760a4fef57979559b72e5f22 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewItemColor.kt @@ -0,0 +1,22 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview + +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes +import de.rki.coronawarnapp.R + +enum class PersonOverviewItemColor( + @ColorRes val starsTint: Int, + @DrawableRes val background: Int +) { + + COLOR_1(R.color.starsColor1, R.drawable.bg_person_overview_1), + COLOR_2(R.color.starsColor2, R.drawable.bg_person_overview_2), + COLOR_3(R.color.starsColor3, R.drawable.bg_person_overview_3); + + companion object { + fun colorFor(index: Int): PersonOverviewItemColor { + val values = values() + return values.getOrElse(index.rem(values.size)) { COLOR_1 } + } + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..de79765ae9f87e2b1cad2b2b73a8903971e2282c --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewViewModel.kt @@ -0,0 +1,129 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview + +import android.graphics.Bitmap +import androidx.lifecycle.LiveData +import androidx.lifecycle.asLiveData +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.covidcertificate.common.qrcode.QrCodeString +import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates +import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificatesProvider +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.PersonCertificateCard +import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate +import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateRepository +import de.rki.coronawarnapp.covidcertificate.test.core.storage.TestCertificateIdentifier +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CovidTestCertificatePendingCard +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem +import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator +import de.rki.coronawarnapp.util.coroutine.DispatcherProvider +import de.rki.coronawarnapp.util.ui.SingleLiveEvent +import de.rki.coronawarnapp.util.viewmodel.CWAViewModel +import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.transform +import timber.log.Timber + +class PersonOverviewViewModel @AssistedInject constructor( + dispatcherProvider: DispatcherProvider, + certificatesProvider: PersonCertificatesProvider, + private val testCertificateRepository: TestCertificateRepository, + private val qrCodeGenerator: QrCodeGenerator, +) : CWAViewModel(dispatcherProvider) { + + private val qrCodes = mutableMapOf<String, Bitmap?>() + val events = SingleLiveEvent<PersonOverviewFragmentEvents>() + val personCertificates: LiveData<List<CertificatesItem>> = combine( + certificatesProvider.personCertificates, + certificatesProvider.qrCodesFlow + ) { persons, qrCodesMap -> + mapPersons(persons, qrCodesMap) + }.asLiveData(dispatcherProvider.Default) + + private fun mapPersons(persons: Set<PersonCertificates>, qrCodesMap: Map<String, Bitmap?>): List<CertificatesItem> = + mutableListOf<CertificatesItem>().apply { + addPendingCards(persons) + addCertificateCards(persons, qrCodesMap) + } + + private fun MutableList<CertificatesItem>.addCertificateCards( + persons: Set<PersonCertificates>, + qrCodes: Map<String, Bitmap?> + ) { + persons.filterNotPending() + .forEachIndexed { index, person -> + val certificate = person.highestPriorityCertificate + add( + PersonCertificateCard.Item( + certificate = certificate, + qrcodeBitmap = qrCodes[certificate.qrCode], + color = PersonOverviewItemColor.colorFor(index), + onClickAction = { + events.postValue( + OpenPersonDetailsFragment(person.personIdentifier.codeSHA256) + ) + } + ) + ) + } + } + + private fun PersonCertificates.hasPendingTestCertificate(): Boolean { + val certificate = highestPriorityCertificate + return certificate is TestCertificate && certificate.isCertificateRetrievalPending + } + + private fun MutableList<CertificatesItem>.addPendingCards(persons: Set<PersonCertificates>) { + persons.forEach { + val certificate = it.highestPriorityCertificate + if (certificate is TestCertificate && certificate.isCertificateRetrievalPending) { + add( + CovidTestCertificatePendingCard.Item( + certificate = certificate, + onRetryAction = { refreshCertificate(certificate.certificateId) }, + onDeleteAction = { events.postValue(ShowDeleteDialog(certificate.certificateId)) } + ) + ) + } + } + } + + private val PersonCertificatesProvider.qrCodesFlow + get() = personCertificates + .transform { persons -> + emit(emptyMap()) // Initial state + persons.filterNotPending() + .forEach { + val qrCode = it.highestPriorityCertificate.qrCode + qrCodes[qrCode] = generateQrCode(qrCode) + emit(qrCodes) + } + } + + private fun Set<PersonCertificates>.filterNotPending() = this + .filter { !it.hasPendingTestCertificate() } + .sortedByDescending { it.isCwaUser } + + private suspend fun generateQrCode(qrCode: QrCodeString): Bitmap? = try { + qrCodeGenerator.createQrCode(qrCode, margin = 0) + } catch (e: Exception) { + Timber.d(e, "generateQrCode failed for $qrCode") + null + } + + private fun refreshCertificate(identifier: TestCertificateIdentifier) = + launch { + val error = testCertificateRepository.refresh(identifier).mapNotNull { it.error }.singleOrNull() + error?.let { events.postValue(ShowRefreshErrorDialog(error)) } + } + + fun deleteTestCertificate(identifier: TestCertificateIdentifier) = launch { + testCertificateRepository.deleteCertificate(identifier) + } + + fun onScanQrCode() { + events.postValue(ScanQrCode) + } + + @AssistedFactory + interface Factory : SimpleCWAViewModelFactory<PersonOverviewViewModel> +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/items/CertificatesItem.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CertificatesItem.kt similarity index 56% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/items/CertificatesItem.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CertificatesItem.kt index ec7c5198c6016e25bee488d6bedbf3fd5af6db63..5807642325f750e3855c57c7580b4d3793d6101b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/items/CertificatesItem.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CertificatesItem.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.covidcertificate.test.ui.items +package de.rki.coronawarnapp.covidcertificate.person.ui.overview.items import de.rki.coronawarnapp.util.lists.HasStableId diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt similarity index 67% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt index 3377a129fe47ba8d15b4ac6677af453871b3e028..9bcbf87936cc1dd3c6187082729203a7bf7e6282 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt @@ -1,18 +1,18 @@ -package de.rki.coronawarnapp.covidcertificate.test.ui.cards +package de.rki.coronawarnapp.covidcertificate.person.ui.overview.items import android.view.ViewGroup import androidx.core.view.isGone import androidx.core.view.isInvisible import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter import de.rki.coronawarnapp.databinding.CovidTestErrorCardBinding import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer -import org.joda.time.Instant -class CovidTestCertificateErrorCard(parent: ViewGroup) : - CertificatesAdapter.CertificatesItemVH<CovidTestCertificateErrorCard.Item, CovidTestErrorCardBinding>( +class CovidTestCertificatePendingCard(parent: ViewGroup) : + CertificatesAdapter.CertificatesItemVH<CovidTestCertificatePendingCard.Item, CovidTestErrorCardBinding>( R.layout.home_card_container_layout, parent ) { @@ -24,19 +24,22 @@ class CovidTestCertificateErrorCard(parent: ViewGroup) : override val onBindData: CovidTestErrorCardBinding.( item: Item, payloads: List<Any> - ) -> Unit = { item, _ -> + ) -> Unit = { item, payloads -> + val curItem = payloads.filterIsInstance<Item>().singleOrNull() ?: item + + val registeredAt = curItem.certificate.registeredAt testTime.text = context.getString( R.string.test_certificate_time, - item.testDate.toShortDayFormat(), - item.testDate.toShortTimeFormat(), + registeredAt.toShortDayFormat(), + registeredAt.toShortTimeFormat(), ) retryButton.setOnClickListener { item.onRetryAction(item) } - if (item.isUpdatingData) { + if (curItem.certificate.isUpdatingData) { refreshStatus.isGone = false progressBar.show() retryButton.isInvisible = true @@ -53,11 +56,11 @@ class CovidTestCertificateErrorCard(parent: ViewGroup) : } data class Item( - override val testDate: Instant, + val certificate: TestCertificate, val onRetryAction: (Item) -> Unit, - val onDeleteAction: (Item) -> Unit, - val isUpdatingData: Boolean, - ) : CovidCertificateTestItem, HasPayloadDiffer { + val onDeleteAction: (Item) -> Unit + ) : CertificatesItem, HasPayloadDiffer { override fun diffPayload(old: Any, new: Any): Any? = if (old::class == new::class) new else null + override val stableId: Long = certificate.personIdentifier.codeSHA256.hashCode().toLong() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/PersonCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/PersonCertificateCard.kt new file mode 100644 index 0000000000000000000000000000000000000000..4ccac7f3fcc5ed1df1ab6195a024c252900f51ce --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/PersonCertificateCard.kt @@ -0,0 +1,55 @@ +package de.rki.coronawarnapp.covidcertificate.person.ui.overview.items + +import android.graphics.Bitmap +import android.view.ViewGroup +import androidx.core.graphics.drawable.DrawableCompat +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.covidcertificate.common.certificate.CwaCovidCertificate +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewAdapter +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewItemColor +import de.rki.coronawarnapp.databinding.PersonOverviewItemBinding +import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat +import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer + +class PersonCertificateCard(parent: ViewGroup) : + PersonOverviewAdapter.PersonOverviewItemVH<PersonCertificateCard.Item, PersonOverviewItemBinding>( + R.layout.home_card_container_layout, + parent + ) { + + override val viewBinding = lazy { + PersonOverviewItemBinding.inflate(layoutInflater, itemView.findViewById(R.id.card_container), true) + } + + override val onBindData: PersonOverviewItemBinding.( + item: Item, + payloads: List<Any> + ) -> Unit = { item, payloads -> + val curItem = payloads.filterIsInstance<Item>().singleOrNull() ?: item + name.text = curItem.certificate.fullName + qrcodeImage.setImageBitmap(curItem.qrcodeBitmap) + backgroundImage.setImageResource(curItem.color.background) + starsImage.setImageDrawable(starsDrawable(curItem)) + itemView.setOnClickListener { curItem.onClickAction(curItem) } + } + + private fun starsDrawable(item: Item) = + context.getDrawableCompat(R.drawable.ic_eu_stars_blue)?.let { + DrawableCompat.wrap(it) + .mutate() + .apply { + setTint(context.getColorCompat(item.color.starsTint)) + } + } + + data class Item( + val certificate: CwaCovidCertificate, + val qrcodeBitmap: Bitmap?, + val color: PersonOverviewItemColor, + val onClickAction: (Item) -> Unit, + ) : CertificatesItem, HasPayloadDiffer { + override fun diffPayload(old: Any, new: Any): Any? = if (old::class == new::class) new else null + override val stableId: Long = certificate.personIdentifier.codeSHA256.hashCode().toLong() + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt index b4589236afa4541e4266755cd1a88cd6ab5022b6..82da1f8c47c7ecd4815776ab19051914bf1b1ff8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt @@ -20,8 +20,11 @@ interface TestCertificate : CwaCovidCertificate { /** * RAT Test name and manufacturer (only for RAT tests, but not required) */ - val testNameAndManufactor: String? + val testNameAndManufacturer: String? val sampleCollectedAt: Instant val testResultAt: Instant? val testCenter: String + val registeredAt: Instant + val isUpdatingData: Boolean + val isCertificateRetrievalPending: Boolean } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt index 972fcc5db5ee6c333fb06819ec23d70eb719632c..216b2e3265de96207397275845ca50d43f4df014 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt @@ -68,7 +68,7 @@ data class TestCertificateContainer( get() = valueSet?.getDisplayText(testCertificate.testResult) ?: testCertificate.testResult override val testName: String? get() = testCertificate.testName?.let { valueSet?.getDisplayText(it) ?: it } - override val testNameAndManufactor: String? + override val testNameAndManufacturer: String? get() = testCertificate.testNameAndManufactor?.let { valueSet?.getDisplayText(it) ?: it } override val sampleCollectedAt: Instant get() = testCertificate.sampleCollectedAt @@ -77,6 +77,15 @@ data class TestCertificateContainer( override val testCenter: String get() = testCertificate.testCenter + override val isUpdatingData: Boolean + get() = this@TestCertificateContainer.isUpdatingData + + override val registeredAt: Instant + get() = this@TestCertificateContainer.registeredAt + + override val isCertificateRetrievalPending: Boolean + get() = this@TestCertificateContainer.isCertificateRetrievalPending + override val certificateIssuer: String get() = header.issuer override val certificateCountry: String diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesAdapter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesAdapter.kt index 41a700c645df7214a93cbec367d066dbf862b589..1ea789a5256b56aa5d71c294e5b8c631437cdb3c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesAdapter.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesAdapter.kt @@ -4,8 +4,8 @@ import android.view.ViewGroup import androidx.annotation.LayoutRes import androidx.viewbinding.ViewBinding import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateCard -import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateErrorCard -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CovidTestCertificatePendingCard +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.CreateVaccinationCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.HeaderInfoVaccinationCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.ImmuneVaccinationCard @@ -40,8 +40,8 @@ class CertificatesAdapter : TypedVHCreatorMod({ data[it] is HeaderInfoVaccinationCard.Item }) { HeaderInfoVaccinationCard(it) }, TypedVHCreatorMod({ data[it] is NoCovidTestCertificatesCard.Item }) { NoCovidTestCertificatesCard(it) }, TypedVHCreatorMod({ data[it] is CovidTestCertificateCard.Item }) { CovidTestCertificateCard(it) }, - TypedVHCreatorMod({ data[it] is CovidTestCertificateErrorCard.Item }) { - CovidTestCertificateErrorCard(it) + TypedVHCreatorMod({ data[it] is CovidTestCertificatePendingCard.Item }) { + CovidTestCertificatePendingCard(it) }, ) ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt index afd660e979ff7f8197838d140578d3350edb9b55..2df68832354b00165ac8dfdd5e0237109fe7f54b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt @@ -9,12 +9,9 @@ import androidx.recyclerview.widget.DefaultItemAnimator import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.vaccination.ui.list.VaccinationListFragment import de.rki.coronawarnapp.databinding.FragmentCertificatesBinding -import de.rki.coronawarnapp.util.DialogHelper import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator import de.rki.coronawarnapp.util.lists.diffutil.update -import de.rki.coronawarnapp.util.ui.doNavigate -import de.rki.coronawarnapp.util.ui.findNestedGraph import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.viewBinding import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider @@ -48,38 +45,18 @@ class CertificatesFragment : Fragment(R.layout.fragment_certificates), AutoInjec VaccinationListFragment.navigationUri(event.personIdentifierCodeSha256) ) is CertificatesFragmentEvents.OpenVaccinationRegistrationGraph -> { - findNestedGraph(R.id.vaccination_nav_graph).startDestination = R.id.vaccinationQrCodeScanFragment - doNavigate(CertificatesFragmentDirections.actionCertificatesFragmentToVaccinationNavGraph()) + // findNestedGraph(R.id.vaccination_nav_graph).startDestination = R.id.vaccinationQrCodeScanFragment + // doNavigate(CertificatesFragmentDirections.actionCertificatesFragmentToVaccinationNavGraph()) } is CertificatesFragmentEvents.GoToCovidCertificateDetailScreen -> { - doNavigate( - CertificatesFragmentDirections - .actionCertificatesFragmentToCovidCertificateDetailsFragment(event.identifier) - ) + // doNavigate( + // CertificatesFragmentDirections + // .actionCertificatesFragmentToCovidCertificateDetailsFragment(event.identifier) + // ) } is CertificatesFragmentEvents.ShowRefreshErrorCertificateDialog -> { - val dialog = DialogHelper.DialogInstance( - context = requireContext(), - title = R.string.test_certificate_refresh_dialog_title, - message = event.error.localizedMessage, - positiveButton = R.string.test_certificate_refresh_dialog_confirm_button, - cancelable = false - ) - DialogHelper.showDialog(dialog) } is CertificatesFragmentEvents.ShowDeleteErrorCertificateDialog -> { - val dialog = DialogHelper.DialogInstance( - context = requireContext(), - title = R.string.test_certificate_delete_dialog_title, - message = R.string.test_certificate_delete_dialog_body, - positiveButton = R.string.test_certificate_delete_dialog_confirm_button, - negativeButton = R.string.test_certificate_delete_dialog_cancel_button, - cancelable = false, - positiveButtonFunction = { - viewModel.deleteTestCertificate(event.identifier) - } - ) - DialogHelper.showDialog(dialog) } } } @@ -89,7 +66,7 @@ class CertificatesFragment : Fragment(R.layout.fragment_certificates), AutoInjec setOnMenuItemClickListener { when (it.itemId) { R.id.menu_information -> { - doNavigate(CertificatesFragmentDirections.actionCertificatesFragmentToConsentFragment(false)) + // doNavigate(CertificatesFragmentDirections.actionCertificatesFragmentToConsentFragment(false)) true } else -> onOptionsItemSelected(it) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt index 374c269b475ecea16b6f5fe41bc4f6896b73937e..9a83e0d986a23848e5fae91f6c3f29c77fc5a5a2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt @@ -5,11 +5,7 @@ import androidx.lifecycle.asLiveData import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateRepository -import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateWrapper -import de.rki.coronawarnapp.covidcertificate.test.core.storage.TestCertificateIdentifier -import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateCard -import de.rki.coronawarnapp.covidcertificate.test.ui.cards.CovidTestCertificateErrorCard -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinatedPerson import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationSettings import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.VaccinationRepository @@ -31,21 +27,6 @@ class CertificatesViewModel @AssistedInject constructor( val events = SingleLiveEvent<CertificatesFragmentEvents>() - private fun refreshTestCertificate(identifier: TestCertificateIdentifier) { - launch { - val error = testCertificateRepository.refresh(identifier).mapNotNull { it.error }.singleOrNull() - if (error != null) { - events.postValue(CertificatesFragmentEvents.ShowRefreshErrorCertificateDialog(error)) - } - } - } - - fun deleteTestCertificate(identifier: TestCertificateIdentifier) { - launch { - testCertificateRepository.deleteCertificate(identifier) - } - } - val screenItems: LiveData<List<CertificatesItem>> = vaccinationRepository.vaccinationInfos .combine(testCertificateRepository.certificates) { vaccinatedPersons, certificates -> @@ -67,8 +48,6 @@ class CertificatesViewModel @AssistedInject constructor( if (certificates.isEmpty()) { add(NoCovidTestCertificatesCard.Item) - } else { - addAll(certificates.toCertificateItems()) } } }.asLiveData() @@ -95,37 +74,6 @@ class CertificatesViewModel @AssistedInject constructor( } } - private fun Collection<TestCertificateWrapper>.toCertificateItems(): List<CertificatesItem> = map { certificate -> - if (certificate.isCertificateRetrievalPending) { - CovidTestCertificateErrorCard.Item( - testDate = certificate.registeredAt, - isUpdatingData = certificate.isUpdatingData, - onRetryAction = { - refreshTestCertificate(certificate.identifier) - }, - onDeleteAction = { - events.postValue( - CertificatesFragmentEvents.ShowDeleteErrorCertificateDialog( - certificate.identifier - ) - ) - } - ) - } else { - CovidTestCertificateCard.Item( - testDate = certificate.registeredAt, - testPerson = - certificate.testCertificate?.firstName + " " + - certificate.testCertificate?.lastName, - onClickAction = { - CertificatesFragmentEvents.GoToCovidCertificateDetailScreen( - certificate.identifier - ).run { events.postValue(this) } - } - ) - } - } - @AssistedFactory interface Factory : SimpleCWAViewModelFactory<CertificatesViewModel> } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateUIModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateUIModule.kt index 6f370f687824221a9774e2eda278c7914e642897..23e9fa4035cc3f7fa118c2e5421ce768e3251e5f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateUIModule.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateUIModule.kt @@ -2,6 +2,8 @@ package de.rki.coronawarnapp.covidcertificate.test.ui import dagger.Module import dagger.android.ContributesAndroidInjector +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewFragment +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewFragmentModule import de.rki.coronawarnapp.covidcertificate.test.ui.details.CovidCertificateDetailsFragment import de.rki.coronawarnapp.covidcertificate.test.ui.details.CovidCertificateDetailsModule @@ -13,4 +15,7 @@ abstract class TestCertificateUIModule { @ContributesAndroidInjector(modules = [CovidCertificateDetailsModule::class]) abstract fun certificateDetailsFragment(): CovidCertificateDetailsFragment + + @ContributesAndroidInjector(modules = [PersonOverviewFragmentModule::class]) + abstract fun personOverviewFragment(): PersonOverviewFragment } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt index bc27a92dd94416a5e9e1f45b22b9f384af8f8856..85ddac6dcb9ddf4fded87e296b67482f52b934c1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt @@ -1,6 +1,6 @@ package de.rki.coronawarnapp.covidcertificate.test.ui.cards -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import org.joda.time.Instant interface CovidCertificateTestItem : CertificatesItem { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/CovidCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/CovidCertificateDetailsFragment.kt index 537948f0a4c0ac1dc75c6b5a75b87015c2e7fd66..670da564f0f1f45af487c4cdca23c5ab9a2fa4f9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/CovidCertificateDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/CovidCertificateDetailsFragment.kt @@ -65,7 +65,7 @@ class CovidCertificateDetailsFragment : Fragment(R.layout.fragment_covid_certifi diseaseType.text = testCertificate.targetName testType.text = testCertificate.testType testName.text = testCertificate.testName - testManufacturer.text = testCertificate.testNameAndManufactor + testManufacturer.text = testCertificate.testNameAndManufacturer testDate.text = "%s %s".format( testCertificate.sampleCollectedAt.toShortDayFormat(), testCertificate.sampleCollectedAt.toShortTimeFormat() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/CreateVaccinationCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/CreateVaccinationCard.kt index e45d550ef3b1dfa80d2adfb7197a9c3f6ed9dbc9..2b5d12b5371d059f3a573d31a27013b2788fa9d4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/CreateVaccinationCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/CreateVaccinationCard.kt @@ -3,7 +3,7 @@ package de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards import android.view.ViewGroup import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.databinding.VaccinationHomeRegistrationCardBinding import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/HeaderInfoVaccinationCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/HeaderInfoVaccinationCard.kt index a2026dfa69f6b8ee8061f7a914e5e1b113876b57..d7a3c55eebb66035c5ef513c5ebf6ecd08697336 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/HeaderInfoVaccinationCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/HeaderInfoVaccinationCard.kt @@ -3,7 +3,7 @@ package de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards import android.view.ViewGroup import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.databinding.VaccinationHeaderInfoCardBinding class HeaderInfoVaccinationCard(parent: ViewGroup) : diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/NoCovidTestCertificatesCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/NoCovidTestCertificatesCard.kt index dae5c0dba1c885464b7000b4135013f5a65b8f91..96f4b491c5ebd59707b51b94d2f7d98d34261e5e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/NoCovidTestCertificatesCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/NoCovidTestCertificatesCard.kt @@ -3,7 +3,7 @@ package de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards import android.view.ViewGroup import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.databinding.VaccinationBottomInfoCardBinding class NoCovidTestCertificatesCard(parent: ViewGroup) : diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/VaccinationStatusItem.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/VaccinationStatusItem.kt index 0216d7eea4c3df9009ba8aaf52cd76a67c349c07..33d6a9141afc58a99e44b8142a85165f5469a12d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/VaccinationStatusItem.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/cards/VaccinationStatusItem.kt @@ -1,6 +1,6 @@ package de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards -import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinatedPerson interface VaccinationStatusItem : CertificatesItem { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/consent/VaccinationConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/consent/VaccinationConsentFragment.kt index 49e64766849f48005f1f3d71582d288d475f8c82..ef5dc377f2cf902f3586c30d46a91566dc062adb 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/consent/VaccinationConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/consent/VaccinationConsentFragment.kt @@ -51,7 +51,7 @@ class VaccinationConsentFragment : Fragment(R.layout.vaccination_consent_fragmen VaccinationConsentNavigationEvent.NavigateToCertificates -> { doNavigate( VaccinationConsentFragmentDirections - .actionVaccinationConsentFragmentToCertificatesFragment() + .actionVaccinationConsentFragmentToPersonOverviewFragment() ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UIExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UIExtensions.kt index da20583ee80adcb0c315a4477eb19351fbd262a3..6a21e36aa4c7743554853fc1b0e89271fb8c4ca4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UIExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UIExtensions.kt @@ -56,7 +56,7 @@ fun BottomNavigationView.setupWithNavController2( R.id.mainFragment, R.id.checkInsFragment, R.id.contactDiaryOverviewFragment, - R.id.certificatesFragment, + R.id.personOverviewFragment, ) // For destinations that can show or hide the bottom bar in different cases // for example [ContactDiaryOnboardingFragment] diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt index 698550e696ba035b1021e37c0eb0cb3eec7329c2..0313c13a83921b33d5a9b037821f821d2fbe771d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt @@ -169,8 +169,8 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { } private fun startCertificatesNestedGraphDestination(navController: NavController, isConsentGiven: Boolean) { - navController.findNestedGraph(R.id.green_certificate_graph).startDestination = if (isConsentGiven) { - R.id.certificatesFragment + navController.findNestedGraph(R.id.certificate_graph).startDestination = if (isConsentGiven) { + R.id.personOverviewFragment } else { R.id.vaccinationConsentFragment } diff --git a/Corona-Warn-App/src/main/res/drawable-night/ic_person_overview_illustration.xml b/Corona-Warn-App/src/main/res/drawable-night/ic_person_overview_illustration.xml new file mode 100644 index 0000000000000000000000000000000000000000..885f4f46d98f912bb7f2cc3b010065bd011d5a4f --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable-night/ic_person_overview_illustration.xml @@ -0,0 +1,1359 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="200dp" + android:height="200dp" + android:viewportWidth="200" + android:viewportHeight="200"> + <group> + <clip-path + android:pathData="M100,100m-100,0a100,100 0,1 1,200 0a100,100 0,1 1,-200 0"/> + <path + android:pathData="M0,0h200v200h-200z" + android:fillColor="#2D2D2F"/> + <path + android:pathData="M71.317,44.201L148.825,44.11A4,4 134.966,0 1,152.83 48.105L152.953,150.913A4,4 134.966,0 1,148.957 154.918L71.449,155.009A4,4 134.966,0 1,67.445 151.013L67.322,48.206A4,4 134.966,0 1,71.317 44.201z" + android:fillColor="#747576"/> + <path + android:pathData="M76,123.082L144.675,123.001A1,1 134.966,0 1,145.676 124L145.676,124A1,1 134.966,0 1,144.677 125.001L76.002,125.082A1,1 134.966,0 1,75.001 124.083L75.001,124.083A1,1 134.966,0 1,76 123.082z" + android:fillColor="#3F3F43"/> + <path + android:pathData="M77,131.061L127.352,131.002A1,1 134.966,0 1,128.353 132L128.353,132A1,1 134.966,0 1,127.354 133.002L77.002,133.061A1,1 134.966,0 1,76.001 132.062L76.001,132.062A1,1 134.966,0 1,77 131.061z" + android:fillColor="#3F3F43"/> + <path + android:pathData="M77,138.073L137.822,138.001A1,1 134.966,0 1,138.823 139L138.823,139A1,1 134.966,0 1,137.825 140.001L77.002,140.073A1,1 134.966,0 1,76.001 139.074L76.001,139.074A1,1 134.966,0 1,77 138.073z" + android:fillColor="#3F3F43"/> + <path + android:pathData="M122.455,68.783L121.273,68.78L121.276,67.599L122.459,67.602L122.455,68.783Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.634,68.789L122.453,68.784L122.456,67.604L123.637,67.607L123.634,68.789Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.818,68.791L123.637,68.788L123.64,67.607L124.822,67.611L124.818,68.791Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.998,68.793L124.817,68.788L124.82,67.608L126.001,67.611L125.998,68.793Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M127.18,68.799L125.999,68.796L126.002,67.615L127.184,67.618L127.18,68.799Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M128.363,68.801L127.182,68.797L127.185,67.617L128.367,67.62L128.363,68.801Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.541,68.804L128.359,68.801L128.362,67.619L129.544,67.622L129.541,68.804Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.538,69.988L128.357,69.984L128.36,68.804L129.542,68.807L129.538,69.988Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.534,71.168L128.353,71.163L128.356,69.982L129.537,69.986L129.534,71.168Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.53,72.347L128.349,72.344L128.352,71.163L129.535,71.166L129.53,72.347Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.528,73.528L128.347,73.524L128.35,72.344L129.532,72.347L129.528,73.528Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.524,74.711L128.342,74.708L128.345,73.527L129.527,73.53L129.524,74.711Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.519,75.892L128.338,75.888L128.341,74.708L129.523,74.711L129.519,75.892Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.419,68.717L100.6,68.72L100.603,67.539L99.422,67.536L99.419,68.717Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.238,68.708L99.419,68.712L99.422,67.53L98.242,67.527L98.238,68.708Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.059,68.706L98.24,68.71L98.243,67.528L97.062,67.525L97.059,68.706Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M95.876,68.703L97.057,68.708L97.06,67.525L95.879,67.522L95.876,68.703Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M94.692,68.699L95.873,68.702L95.876,67.521L94.696,67.518L94.692,68.699Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M93.513,68.699L94.694,68.703L94.697,67.521L93.516,67.518L93.513,68.699Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.332,68.692L93.513,68.696L93.516,67.514L92.336,67.512L92.332,68.692Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.328,69.875L93.509,69.88L93.512,68.697L92.331,68.694L92.328,69.875Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.324,71.052L93.505,71.055L93.508,69.874L92.328,69.871L92.324,71.052Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.322,72.236L93.503,72.24L93.507,71.058L92.325,71.055L92.322,72.236Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.319,73.416L93.5,73.42L93.503,72.238L92.323,72.235L92.319,73.416Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.311,74.6L93.493,74.603L93.497,73.422L92.315,73.419L92.311,74.6Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.312,75.78L93.493,75.784L93.496,74.602L92.314,74.599L92.312,75.78Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.349,103.922L121.168,103.919L121.163,105.1L122.345,105.103L122.349,103.922Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.533,103.929L122.352,103.925L122.349,105.107L123.53,105.11L123.533,103.929Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.711,103.934L123.529,103.931L123.526,105.112L124.706,105.114L124.711,103.934Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.893,103.937L124.712,103.932L124.709,105.115L125.89,105.118L125.893,103.937Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M127.076,103.94L125.895,103.937L125.892,105.118L127.073,105.121L127.076,103.94Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M128.255,103.94L127.074,103.936L127.07,105.119L128.25,105.121L128.255,103.94Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.439,103.948L128.258,103.944L128.255,105.126L129.436,105.129L129.439,103.948Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.441,102.764L128.26,102.76L128.257,103.942L129.437,103.945L129.441,102.764Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.443,101.584L128.262,101.581L128.259,102.762L129.44,102.765L129.443,101.584Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.45,100.404L128.269,100.4L128.266,101.582L129.446,101.585L129.45,100.404Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.452,99.22L128.271,99.217L128.268,100.398L129.449,100.401L129.452,99.22Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.455,98.039L128.274,98.035L128.271,99.217L129.451,99.22L129.455,98.039Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M129.457,96.855L128.276,96.851L128.272,98.034L129.454,98.037L129.457,96.855Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.314,103.857L100.496,103.86L100.493,105.041L99.312,105.038L99.314,103.857Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.134,103.853L99.315,103.857L99.312,105.039L98.13,105.034L98.134,103.853Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M96.95,103.848L98.132,103.851L98.129,105.032L96.947,105.029L96.95,103.848Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M95.772,103.845L96.953,103.85L96.95,105.03L95.768,105.026L95.772,103.845Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M94.589,103.84L95.77,103.843L95.767,105.024L94.585,105.021L94.589,103.84Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M93.41,103.837L94.59,103.841L94.588,105.021L93.407,105.018L93.41,103.837Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.229,103.836L93.41,103.839L93.407,105.02L92.224,105.017L92.229,103.836Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.231,102.651L93.412,102.655L93.409,103.835L92.228,103.832L92.231,102.651Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.235,101.471L93.417,101.474L93.414,102.655L92.231,102.652L92.235,101.471Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.24,100.288L93.421,100.291L93.418,101.473L92.237,101.47L92.24,100.288Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.242,99.11L93.423,99.114L93.42,100.294L92.237,100.291L92.242,99.11Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.246,97.929L93.427,97.932L93.424,99.113L92.243,99.11L92.246,97.929Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M92.248,96.747L93.429,96.751L93.427,97.931L92.244,97.928L92.248,96.747Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.969,72.725L106.788,72.722L106.791,71.541L107.973,71.544L107.969,72.725Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.514,72.736L110.333,72.732L110.336,71.552L111.518,71.555L111.514,72.736Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.149,73.913L107.968,73.91L107.971,72.728L109.153,72.732L109.149,73.913Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.695,73.92L111.514,73.917L111.517,72.736L112.7,72.739L112.695,73.92Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.055,73.931L113.874,73.928L113.877,72.747L115.059,72.75L115.055,73.931Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.328,75.094L109.147,75.09L109.15,73.909L110.332,73.913L110.328,75.094Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.05,75.111L113.869,75.107L113.872,73.927L115.053,73.93L115.05,75.111Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.962,76.27L106.781,76.267L106.784,75.086L107.965,75.089L107.962,76.27Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.325,76.278L109.144,76.275L109.147,75.094L110.328,75.097L110.325,76.278Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.686,76.283L111.505,76.28L111.508,75.099L112.69,75.102L112.686,76.283Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.868,76.289L112.687,76.284L112.69,75.104L113.871,75.107L113.868,76.289Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.956,77.45L106.775,77.446L106.777,76.266L107.96,76.269L107.956,77.45Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.139,77.454L107.958,77.451L107.961,76.269L109.142,76.272L109.139,77.454Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.136,78.635L107.955,78.631L107.958,77.451L109.14,77.454L109.136,78.635Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.317,78.638L109.136,78.635L109.139,77.454L110.32,77.457L110.317,78.638Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.861,78.653L112.68,78.649L112.683,77.469L113.864,77.472L113.861,78.653Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.04,78.654L113.859,78.65L113.862,77.468L115.044,77.473L115.04,78.654Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.952,79.814L106.771,79.81L106.774,78.63L107.956,78.633L107.952,79.814Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.493,79.823L110.312,79.818L110.315,78.637L111.496,78.642L111.493,79.823Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.947,80.998L106.766,80.993L106.769,79.812L107.95,79.816L107.947,80.998Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.127,80.998L107.946,80.995L107.949,79.814L109.131,79.818L109.127,80.998Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.491,81.004L110.31,81.001L110.313,79.82L111.495,79.824L111.491,81.004Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.853,81.012L112.672,81.009L112.675,79.828L113.856,79.831L113.853,81.012Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.034,81.014L113.853,81.01L113.856,79.83L115.038,79.833L115.034,81.014Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.422,72.756L116.242,72.752L116.245,71.571L117.427,71.576L117.422,72.756Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.42,73.937L116.239,73.934L116.242,72.753L117.423,72.756L117.42,73.937Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.416,75.12L116.235,75.115L116.237,73.935L117.42,73.939L117.416,75.12Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.779,75.124L118.598,75.12L118.601,73.94L119.783,73.944L119.779,75.124Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.961,75.127L119.78,75.124L119.783,73.943L120.964,73.946L120.961,75.127Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.139,75.132L120.958,75.128L120.961,73.948L122.143,73.951L122.139,75.132Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.322,75.134L122.141,75.131L122.144,73.95L123.326,73.953L123.322,75.134Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.412,76.296L116.23,76.293L116.233,75.112L117.415,75.115L117.412,76.296Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.776,76.309L118.595,76.306L118.598,75.124L119.779,75.127L119.776,76.309Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.957,76.309L119.776,76.305L119.778,75.125L120.961,75.128L120.957,76.309Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.137,76.312L120.956,76.309L120.959,75.128L122.14,75.131L122.137,76.312Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.318,76.313L122.137,76.309L122.14,75.129L123.321,75.132L123.318,76.313Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.41,77.479L116.229,77.474L116.232,76.294L117.414,76.298L117.41,77.479Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.769,77.488L118.588,77.485L118.591,76.304L119.773,76.307L119.769,77.488Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.953,77.491L119.772,77.487L119.775,76.305L120.956,76.31L120.953,77.491Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.132,77.496L120.951,77.493L120.954,76.311L122.137,76.315L122.132,77.496Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.315,77.497L122.134,77.493L122.137,76.312L123.319,76.317L123.315,77.497Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.405,78.66L116.224,78.655L116.227,77.474L117.41,77.479L117.405,78.66Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.768,78.668L118.587,78.664L118.59,77.484L119.771,77.487L119.768,78.668Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.949,78.67L119.768,78.667L119.771,77.486L120.953,77.49L120.949,78.67Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.128,78.676L120.947,78.672L120.95,77.492L122.131,77.495L122.128,78.676Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.309,78.678L122.128,78.675L122.131,77.493L123.313,77.497L123.309,78.678Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.402,79.843L116.221,79.84L116.224,78.659L117.405,78.662L117.402,79.843Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.603,72.757L117.422,72.754L117.425,71.573L118.606,71.576L118.603,72.757Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.784,72.76L118.603,72.756L118.606,71.574L119.788,71.579L119.784,72.76Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.966,72.763L119.785,72.76L119.788,71.578L120.969,71.581L120.966,72.763Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.148,72.769L120.967,72.765L120.97,71.585L122.151,71.588L122.148,72.769Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.328,72.775L122.146,72.772L122.15,71.591L123.332,71.594L123.328,72.775Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.508,72.775L123.327,72.771L123.33,71.591L124.511,71.594L124.508,72.775Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.689,72.779L124.508,72.776L124.511,71.595L125.693,71.598L125.689,72.779Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.687,73.962L124.506,73.958L124.508,72.778L125.69,72.781L125.687,73.962Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.685,75.144L124.504,75.14L124.507,73.959L125.689,73.963L125.685,75.144Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.681,76.321L124.5,76.318L124.503,75.137L125.684,75.14L125.681,76.321Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.676,77.502L124.495,77.498L124.498,76.318L125.681,76.322L125.676,77.502Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.673,78.686L124.492,78.683L124.495,77.502L125.676,77.505L125.673,78.686Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.669,79.866L124.489,79.862L124.491,78.682L125.674,78.685L125.669,79.866Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.398,81.023L116.218,81.019L116.22,79.839L117.403,79.842L117.398,81.023Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.578,81.03L117.397,81.027L117.4,79.846L118.582,79.849L118.578,81.03Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.759,81.031L118.578,81.026L118.581,79.847L119.762,79.85L119.759,81.031Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.941,81.034L119.76,81.031L119.763,79.85L120.946,79.853L120.941,81.034Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.125,81.037L120.944,81.033L120.946,79.853L122.128,79.856L122.125,81.037Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.305,81.039L122.124,81.035L122.127,79.854L123.309,79.858L123.305,81.039Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.487,81.045L123.306,81.041L123.309,79.861L124.491,79.864L124.487,81.045Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.665,81.05L124.484,81.046L124.487,79.864L125.668,79.869L125.665,81.05Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.342,72.694L96.161,72.69L96.164,71.508L97.345,71.513L97.342,72.694Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.522,72.698L97.341,72.695L97.344,71.514L98.526,71.517L98.522,72.698Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.703,72.699L98.522,72.695L98.525,71.513L99.707,71.518L99.703,72.699Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.882,72.705L99.701,72.702L99.704,71.521L100.885,71.524L100.882,72.705Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.065,72.711L100.884,72.707L100.887,71.526L102.069,71.531L102.065,72.711Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.248,72.714L102.066,72.711L102.069,71.53L103.251,71.533L103.248,72.714Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.428,72.716L103.247,72.712L103.25,71.532L104.432,71.535L104.428,72.716Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.609,72.718L104.428,72.715L104.431,71.534L105.613,71.537L105.609,72.718Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.338,73.874L96.156,73.871L96.159,72.69L97.342,72.694L97.338,73.874Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.606,73.902L104.425,73.898L104.428,72.718L105.609,72.721L105.606,73.902Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.335,75.059L96.154,75.055L96.156,73.875L97.338,73.878L97.335,75.059Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.693,75.063L98.512,75.058L98.515,73.878L99.698,73.882L99.693,75.063Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.878,75.07L99.696,75.067L99.699,73.886L100.881,73.889L100.878,75.07Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.059,75.071L100.878,75.067L100.881,73.887L102.063,73.89L102.059,75.071Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.239,75.073L102.058,75.07L102.061,73.889L103.242,73.892L103.239,75.073Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.602,75.081L104.421,75.078L104.424,73.897L105.606,73.901L105.602,75.081Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.331,76.239L96.149,76.236L96.152,75.055L97.335,75.058L97.331,76.239Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.691,76.246L98.51,76.243L98.513,75.061L99.695,75.065L99.691,76.246Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.874,76.249L99.693,76.245L99.695,75.065L100.878,75.069L100.874,76.249Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.057,76.252L100.876,76.248L100.879,75.067L102.06,75.07L102.057,76.252Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.236,76.257L102.055,76.253L102.058,75.073L103.241,75.076L103.236,76.257Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.597,76.262L104.416,76.259L104.419,75.077L105.6,75.081L105.597,76.262Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.326,77.418L96.145,77.414L96.148,76.234L97.329,76.237L97.326,77.418Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.69,77.422L98.509,77.418L98.512,76.238L99.693,76.241L99.69,77.422Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.871,77.433L99.69,77.429L99.693,76.248L100.874,76.252L100.871,77.433Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.049,77.435L100.868,77.432L100.871,76.25L102.054,76.254L102.049,77.435Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.232,77.438L102.051,77.433L102.054,76.252L103.235,76.256L103.232,77.438Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.595,77.445L104.414,77.441L104.417,76.261L105.599,76.264L105.595,77.445Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.324,78.602L96.143,78.598L96.146,77.417L97.328,77.421L97.324,78.602Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.687,78.607L98.506,78.603L98.509,77.422L99.691,77.426L99.687,78.607Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.868,78.61L99.687,78.607L99.689,77.426L100.872,77.429L100.868,78.61Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.047,78.615L100.866,78.611L100.869,77.431L102.05,77.434L102.047,78.615Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.23,78.621L102.048,78.618L102.051,77.436L103.234,77.44L103.23,78.621Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.593,78.626L104.412,78.623L104.415,77.442L105.598,77.445L105.593,78.626Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.32,79.783L96.139,79.78L96.142,78.599L97.323,78.602L97.32,79.783Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.586,79.809L104.405,79.805L104.407,78.625L105.589,78.628L105.586,79.809Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.317,80.966L96.136,80.962L96.139,79.782L97.321,79.785L97.317,80.966Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.498,80.968L97.316,80.965L97.319,79.784L98.501,79.787L98.498,80.968Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.678,80.97L98.497,80.966L98.5,79.786L99.683,79.789L99.678,80.97Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.861,80.973L99.68,80.97L99.683,79.789L100.864,79.792L100.861,80.973Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.039,80.979L100.858,80.975L100.86,79.795L102.042,79.798L102.039,80.979Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.222,80.98L102.041,80.977L102.044,79.796L103.226,79.799L103.222,80.98Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.406,80.984L103.225,80.98L103.228,79.8L104.409,79.803L104.406,80.984Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.585,80.987L104.403,80.984L104.406,79.803L105.589,79.806L105.585,80.987Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.28,92.777L96.099,92.773L96.102,91.593L97.283,91.596L97.28,92.777Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.461,92.78L97.279,92.777L97.282,91.596L98.465,91.599L98.461,92.78Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.644,92.782L98.463,92.777L98.465,91.598L99.648,91.601L99.644,92.782Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.825,92.789L99.644,92.785L99.647,91.604L100.828,91.607L100.825,92.789Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.003,92.789L100.823,92.785L100.825,91.605L102.008,91.609L102.003,92.789Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.186,92.793L102.005,92.789L102.008,91.608L103.189,91.611L103.186,92.793Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.37,92.794L103.189,92.79L103.191,91.61L104.374,91.614L104.37,92.794Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.549,92.8L104.368,92.797L104.371,91.616L105.554,91.619L105.549,92.8Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.278,93.957L96.097,93.954L96.1,92.773L97.282,92.777L97.278,93.957Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.545,93.98L104.363,93.977L104.366,92.796L105.548,92.799L105.545,93.98Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.274,95.137L96.093,95.133L96.096,93.953L97.277,93.956L97.274,95.137Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.636,95.146L98.455,95.142L98.458,93.962L99.639,93.965L99.636,95.146Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.816,95.151L99.635,95.147L99.638,93.965L100.819,93.97L100.816,95.151Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M101.999,95.154L100.818,95.151L100.821,93.97L102.003,93.973L101.999,95.154Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.179,95.157L101.998,95.153L102.001,93.972L103.182,93.976L103.179,95.157Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.543,95.164L104.362,95.16L104.364,93.98L105.547,93.984L105.543,95.164Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.269,96.321L96.088,96.317L96.091,95.135L97.273,95.14L97.269,96.321Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.632,96.327L98.451,96.322L98.454,95.141L99.636,95.146L99.632,96.327Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.815,96.329L99.634,96.326L99.637,95.144L100.82,95.148L100.815,96.329Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M101.993,96.332L100.812,96.328L100.815,95.148L101.996,95.151L101.993,96.332Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.176,96.335L101.995,96.332L101.998,95.151L103.18,95.155L103.176,96.335Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.538,96.344L104.357,96.341L104.36,95.16L105.542,95.163L105.538,96.344Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.267,97.502L96.086,97.498L96.089,96.317L97.27,96.32L97.267,97.502Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.63,97.509L98.448,97.506L98.451,96.325L99.632,96.328L99.63,97.509Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.81,97.511L99.629,97.507L99.632,96.327L100.814,96.33L100.81,97.511Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M101.991,97.514L100.81,97.511L100.813,96.329L101.995,96.333L101.991,97.514Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.174,97.516L101.993,97.511L101.996,96.331L103.177,96.335L103.174,97.516Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.533,97.528L104.352,97.524L104.355,96.344L105.536,96.347L105.533,97.528Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.264,98.686L96.083,98.681L96.086,97.501L97.268,97.505L97.264,98.686Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.623,98.689L98.442,98.685L98.445,97.505L99.627,97.509L99.623,98.689Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.806,98.692L99.625,98.689L99.628,97.508L100.809,97.511L100.806,98.692Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M101.988,98.698L100.807,98.693L100.81,97.514L101.991,97.517L101.988,98.698Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.169,98.699L101.988,98.696L101.991,97.515L103.173,97.518L103.169,98.699Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.53,98.704L104.349,98.701L104.352,97.519L105.534,97.523L105.53,98.704Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.259,99.861L96.078,99.858L96.081,98.677L97.262,98.68L97.259,99.861Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.527,99.887L104.346,99.884L104.349,98.702L105.53,98.705L105.527,99.887Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.256,101.044L96.076,101.04L96.078,99.86L97.261,99.863L97.256,101.044Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.437,101.047L97.256,101.043L97.259,99.862L98.44,99.866L98.437,101.047Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.62,101.049L98.438,101.046L98.441,99.865L99.624,99.868L99.62,101.049Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.799,101.055L99.618,101.051L99.621,99.87L100.802,99.874L100.799,101.055Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M101.979,101.061L100.798,101.058L100.801,99.877L101.983,99.88L101.979,101.061Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.162,101.063L101.981,101.059L101.984,99.878L103.166,99.882L103.162,101.063Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.342,101.066L103.161,101.063L103.164,99.882L104.345,99.885L104.342,101.066Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.525,101.068L104.344,101.064L104.347,99.884L105.529,99.887L105.525,101.068Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.305,82.186L109.124,82.183L109.127,81.002L110.309,81.005L110.305,82.186Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.488,82.188L110.307,82.183L110.31,81.003L111.491,81.006L111.488,82.188Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.669,82.191L111.487,82.188L111.49,81.007L112.673,81.01L112.669,82.191Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.032,82.195L113.851,82.192L113.854,81.011L115.035,81.014L115.032,82.195Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.309,83.326L96.128,83.322L96.131,82.142L97.313,82.145L97.309,83.326Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.672,83.331L98.492,83.327L98.494,82.147L99.677,82.15L99.672,83.331Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.852,83.336L99.671,83.332L99.674,82.151L100.855,82.155L100.852,83.336Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.034,83.343L100.853,83.34L100.856,82.159L102.038,82.162L102.034,83.343Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.398,83.348L103.216,83.345L103.219,82.163L104.401,82.166L104.398,83.348Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.94,83.358L106.759,83.354L106.762,82.174L107.943,82.177L107.94,83.358Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.121,83.36L107.94,83.357L107.943,82.176L109.125,82.179L109.121,83.36Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.303,83.366L109.122,83.362L109.125,82.182L110.306,82.185L110.303,83.366Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.664,83.373L111.483,83.369L111.485,82.189L112.667,82.192L112.664,83.373Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.849,83.376L112.668,83.373L112.671,82.192L113.852,82.195L113.849,83.376Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.027,83.377L113.846,83.373L113.849,82.193L115.031,82.197L115.027,83.377Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M116.21,83.382L115.028,83.379L115.031,82.198L116.213,82.201L116.21,83.382Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.935,83.398L119.754,83.394L119.757,82.213L120.939,82.217L120.935,83.398Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.478,83.407L123.297,83.404L123.3,82.223L124.481,82.226L124.478,83.407Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.661,83.411L124.48,83.406L124.483,82.227L125.664,82.229L125.661,83.411Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.488,84.508L97.307,84.505L97.31,83.324L98.492,83.327L98.488,84.508Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.85,84.516L99.669,84.513L99.672,83.332L100.854,83.335L100.85,84.516Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.573,84.532L104.392,84.529L104.395,83.348L105.576,83.351L105.573,84.532Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.936,84.539L106.755,84.535L106.758,83.354L107.94,83.358L107.936,84.539Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.661,84.555L111.48,84.552L111.483,83.37L112.665,83.374L112.661,84.555Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.024,84.563L113.843,84.558L113.846,83.377L115.027,83.381L115.024,84.563Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.387,84.567L116.206,84.563L116.209,83.382L117.39,83.386L117.387,84.567Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.933,84.578L119.752,84.575L119.755,83.393L120.936,83.396L120.933,84.578Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.11,84.582L120.929,84.578L120.932,83.398L122.115,83.402L122.11,84.582Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.476,84.588L123.295,84.584L123.298,83.404L124.48,83.407L124.476,84.588Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M97.302,85.689L96.121,85.686L96.124,84.505L97.307,84.508L97.302,85.689Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.48,85.691L97.3,85.687L97.302,84.507L98.483,84.51L98.48,85.691Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.665,85.696L98.484,85.693L98.487,84.512L99.669,84.515L99.665,85.696Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.025,85.703L100.844,85.7L100.847,84.518L102.03,84.522L102.025,85.703Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M106.751,85.719L105.569,85.716L105.572,84.535L106.754,84.538L106.751,85.719Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.114,85.724L107.933,85.721L107.936,84.54L109.118,84.543L109.114,85.724Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.66,85.734L111.479,85.731L111.482,84.55L112.663,84.553L112.66,85.734Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.385,85.751L116.204,85.748L116.207,84.567L117.39,84.57L117.385,85.751Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.746,85.755L118.565,85.752L118.568,84.571L119.75,84.574L119.746,85.755Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.107,85.759L120.926,85.756L120.929,84.575L122.11,84.578L122.107,85.759Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.661,86.877L98.48,86.873L98.482,85.693L99.664,85.696L99.661,86.877Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.567,86.893L104.386,86.89L104.389,85.709L105.57,85.712L105.567,86.893Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M106.75,86.899L105.569,86.895L105.571,85.715L106.754,85.718L106.75,86.899Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.932,86.901L106.751,86.897L106.754,85.716L107.935,85.72L107.932,86.901Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.473,86.911L110.292,86.908L110.295,85.727L111.476,85.73L111.473,86.911Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.838,86.916L112.657,86.913L112.66,85.732L113.841,85.735L113.838,86.916Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.016,86.922L113.835,86.918L113.838,85.738L115.019,85.741L115.016,86.922Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.559,86.933L117.378,86.93L117.381,85.749L118.563,85.752L118.559,86.933Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.744,86.936L118.563,86.932L118.566,85.752L119.747,85.755L119.744,86.936Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.649,86.958L124.468,86.954L124.471,85.773L125.652,85.777L125.649,86.958Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.476,88.056L97.295,88.051L97.298,86.871L98.479,86.874L98.476,88.056Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.656,88.058L98.475,88.055L98.478,86.873L99.66,86.877L99.656,88.058Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.019,88.066L100.838,88.063L100.841,86.882L102.023,86.885L102.019,88.066Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.563,88.073L104.382,88.07L104.385,86.889L105.567,86.892L105.563,88.073Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.925,88.081L106.744,88.077L106.747,86.896L107.93,86.9L107.925,88.081Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.108,88.087L107.927,88.083L107.93,86.903L109.112,86.907L109.108,88.087Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.468,88.092L110.287,88.088L110.29,86.908L111.473,86.911L111.468,88.092Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.282,88.129L122.101,88.126L122.104,86.945L123.286,86.949L123.282,88.129Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.465,88.131L123.284,88.127L123.287,86.946L124.468,86.95L124.465,88.131Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M99.655,89.238L98.474,89.234L98.477,88.054L99.658,88.057L99.655,89.238Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M103.198,89.249L102.017,89.245L102.02,88.064L103.202,88.068L103.198,89.249Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M104.377,89.254L103.196,89.251L103.199,88.07L104.381,88.074L104.377,89.254Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.103,89.268L107.922,89.265L107.925,88.083L109.107,88.087L109.103,89.268Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M116.19,89.288L115.009,89.285L115.012,88.103L116.194,88.107L116.19,89.288Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.553,89.293L117.372,89.288L117.375,88.107L118.557,88.112L118.553,89.293Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.735,89.298L118.554,89.295L118.557,88.114L119.738,88.117L119.735,89.298Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.095,89.307L120.914,89.304L120.917,88.122L122.099,88.126L122.095,89.307Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M98.467,90.416L97.286,90.413L97.289,89.232L98.471,89.236L98.467,90.416Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M100.832,90.424L99.651,90.421L99.654,89.24L100.835,89.243L100.832,90.424Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M102.012,90.429L100.831,90.424L100.834,89.244L102.016,89.248L102.012,90.429Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M105.556,90.436L104.375,90.433L104.378,89.252L105.56,89.255L105.556,90.436Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.101,90.448L107.92,90.444L107.923,89.264L109.104,89.267L109.101,90.448Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.282,90.45L109.101,90.447L109.104,89.266L110.285,89.269L110.282,90.45Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.645,90.457L111.464,90.454L111.467,89.273L112.648,89.276L112.645,90.457Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M115.007,90.467L113.826,90.463L113.829,89.282L115.01,89.286L115.007,90.467Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M116.188,90.468L115.006,90.465L115.009,89.284L116.191,89.287L116.188,90.468Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.914,90.481L119.732,90.478L119.735,89.297L120.917,89.3L120.914,90.481Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.093,90.491L120.912,90.487L120.915,89.307L122.096,89.31L122.093,90.491Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.279,91.633L109.098,91.629L109.101,90.449L110.284,90.452L110.279,91.633Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.64,91.637L111.459,91.634L111.462,90.453L112.644,90.456L112.64,91.637Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.821,91.648L112.64,91.644L112.643,90.463L113.824,90.467L113.821,91.648Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.365,91.655L116.184,91.652L116.187,90.471L117.368,90.474L117.365,91.655Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.546,91.657L117.365,91.652L117.368,90.473L118.55,90.476L118.546,91.657Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.274,91.67L122.094,91.666L122.096,90.486L123.277,90.489L123.274,91.67Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.634,91.682L124.453,91.677L124.456,90.497L125.637,90.501L125.634,91.682Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.912,92.809L106.731,92.805L106.734,91.624L107.916,91.628L107.912,92.809Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.092,92.811L107.911,92.808L107.914,91.627L109.095,91.63L109.092,92.811Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.818,92.824L112.637,92.821L112.64,91.64L113.822,91.643L113.818,92.824Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M114.999,92.826L113.818,92.822L113.82,91.642L115.002,91.645L114.999,92.826Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.363,92.838L116.182,92.834L116.185,91.654L117.367,91.658L117.363,92.838Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M120.907,92.845L119.726,92.842L119.729,91.661L120.91,91.664L120.907,92.845Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.269,92.853L122.088,92.85L122.091,91.669L123.273,91.672L123.269,92.853Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.815,94.008L112.635,94.004L112.637,92.824L113.818,92.827L113.815,94.008Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.908,95.17L106.727,95.166L106.73,93.986L107.912,93.99L107.908,95.17Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.086,95.171L107.905,95.168L107.908,93.987L109.089,93.99L109.086,95.171Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.451,95.183L110.27,95.18L110.273,93.999L111.455,94.002L111.451,95.183Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M114.994,95.19L113.813,95.186L113.816,94.006L114.997,94.009L114.994,95.19Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M116.174,95.196L114.993,95.193L114.996,94.012L116.179,94.015L116.174,95.196Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.355,95.198L116.174,95.193L116.177,94.014L117.359,94.017L117.355,95.198Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.717,95.203L118.536,95.2L118.539,94.018L119.722,94.022L119.717,95.203Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.26,95.216L122.079,95.212L122.082,94.032L123.265,94.035L123.26,95.216Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.624,95.222L124.443,95.218L124.445,94.038L125.628,94.041L125.624,95.222Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.901,96.352L106.72,96.349L106.723,95.168L107.904,95.171L107.901,96.352Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.627,96.366L111.445,96.363L111.448,95.182L112.631,95.185L112.627,96.366Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M113.806,96.372L112.625,96.367L112.628,95.187L113.809,95.19L113.806,96.372Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.353,96.378L116.172,96.374L116.175,95.193L117.357,95.198L117.353,96.378Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.079,97.536L107.898,97.533L107.901,96.352L109.082,96.354L109.079,97.536Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.442,97.543L110.262,97.538L110.265,96.357L111.445,96.361L111.442,97.543Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M114.988,97.554L113.807,97.551L113.81,96.37L114.991,96.373L114.988,97.554Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M116.165,97.559L114.984,97.555L114.986,96.375L116.169,96.378L116.165,97.559Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M119.711,97.566L118.53,97.563L118.533,96.382L119.716,96.385L119.711,97.566Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.072,97.573L120.891,97.57L120.894,96.389L122.076,96.392L122.072,97.573Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M118.526,98.748L117.345,98.744L117.348,97.563L118.53,97.567L118.526,98.748Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.25,98.76L122.068,98.757L122.071,97.576L123.254,97.579L123.25,98.76Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M124.432,98.762L123.251,98.758L123.254,97.578L124.436,97.581L124.432,98.762Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.615,98.765L124.434,98.761L124.437,97.58L125.618,97.584L125.615,98.765Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M107.893,99.893L106.712,99.89L106.715,98.709L107.897,98.712L107.893,99.893Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M109.07,99.898L107.889,99.894L107.892,98.714L109.073,98.717L109.07,99.898Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M111.435,99.907L110.254,99.902L110.257,98.723L111.438,98.726L111.435,99.907Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M122.067,99.938L120.886,99.934L120.889,98.753L122.071,98.757L122.067,99.938Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M123.248,99.941L122.066,99.938L122.069,98.757L123.251,98.76L123.248,99.941Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M110.249,101.081L109.068,101.076L109.071,99.896L110.252,99.899L110.249,101.081Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M112.613,101.093L111.432,101.089L111.435,99.909L112.616,99.912L112.613,101.093Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M117.339,101.106L116.158,101.102L116.161,99.922L117.344,99.925L117.339,101.106Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M125.606,101.129L124.425,101.125L124.428,99.945L125.609,99.948L125.606,101.129Z" + android:fillColor="#3F3F43" + android:fillType="evenOdd"/> + <path + android:pathData="M59.118,101.245l20.642,11.845l-23.252,40.523l-20.642,-11.845z" + android:fillColor="#3F3F43"/> + <path + android:pathData="M39.997,156.333H47.381C48.074,156.333 48.594,156.507 49.114,157.027L54.384,162.262C58.232,166.179 61.733,166.145 65.616,162.262L70.886,157.027C71.406,156.507 71.891,156.333 72.619,156.333H80.003C85.481,156.333 87.977,153.872 87.977,148.36V140.976C87.977,140.248 88.185,139.762 88.705,139.208L93.905,133.973C97.823,130.09 97.788,126.588 93.905,122.706L88.705,117.471C88.185,116.951 87.977,116.431 87.977,115.737V108.318C87.977,102.841 85.516,100.345 80.003,100.345H72.619C71.891,100.345 71.406,100.171 70.886,99.651L65.616,94.416C61.733,90.499 58.232,90.534 54.349,94.416L49.114,99.651C48.594,100.137 48.074,100.345 47.381,100.345H39.997C34.484,100.345 31.988,102.806 31.988,108.318V115.737C31.988,116.431 31.78,116.951 31.295,117.471L26.06,122.706C22.143,126.588 22.177,130.09 26.06,133.973L31.295,139.208C31.78,139.762 31.988,140.248 31.988,140.976V148.36C31.988,153.837 34.484,156.333 39.997,156.333ZM56.36,144.234C55.389,144.234 54.661,143.853 53.898,142.882L45.266,132.447C44.85,131.893 44.573,131.234 44.573,130.61C44.573,129.327 45.578,128.287 46.861,128.287C47.658,128.287 48.282,128.564 48.976,129.466L56.256,138.583L70.92,115.287C71.44,114.42 72.169,113.969 72.931,113.969C74.145,113.969 75.289,114.836 75.289,116.153C75.289,116.743 74.942,117.436 74.595,117.991L58.717,142.882C58.128,143.784 57.331,144.234 56.36,144.234Z" + android:fillColor="#B8E0FA"/> + </group> +</vector> diff --git a/Corona-Warn-App/src/main/res/drawable/bg_person_overview_1.xml b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..743bc1b4f9bd9b378ecee0c501eafe2956011523 --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_1.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners + android:topLeftRadius="@dimen/radius_card" + android:topRightRadius="@dimen/radius_card" /> + + <gradient + android:angle="0" + android:endColor="#FF007FAD" + android:startColor="#FF0093C8" + android:type="linear" /> + +</shape> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/drawable/bg_person_overview_2.xml b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a4b51ef28fab575e66c6b8b38d0b9fe787effc9 --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_2.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners + android:topLeftRadius="@dimen/radius_card" + android:topRightRadius="@dimen/radius_card" /> + + + <gradient + android:angle="0" + android:endColor="#2077AB" + android:startColor="#FF0F689D" + android:type="linear" /> +</shape> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/drawable/bg_person_overview_3.xml b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_3.xml new file mode 100644 index 0000000000000000000000000000000000000000..317199a8573541a24ab582320f2c35597502abf1 --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/bg_person_overview_3.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners + android:topLeftRadius="@dimen/radius_card" + android:topRightRadius="@dimen/radius_card" /> + <gradient + android:angle="0" + android:endColor="#2077AB" + android:startColor="#FF015588" + android:type="linear" /> +</shape> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/drawable/ic_person_overview_illustration.xml b/Corona-Warn-App/src/main/res/drawable/ic_person_overview_illustration.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ce45acb17029e839d84afcabed77bbb3f1dbfab --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/ic_person_overview_illustration.xml @@ -0,0 +1,1363 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="200dp" + android:height="200dp" + android:viewportWidth="200" + android:viewportHeight="200"> + <group> + <clip-path + android:pathData="M100,100m-100,0a100,100 0,1 1,200 0a100,100 0,1 1,-200 0"/> + <path + android:pathData="M-9.091,-6.818h224.242v257.576h-224.242z" + android:fillColor="#E8F5FF"/> + <path + android:pathData="M71.317,44.201L148.825,44.11A4,4 134.966,0 1,152.83 48.105L152.953,150.913A4,4 134.966,0 1,148.957 154.918L71.45,155.009A4,4 134.966,0 1,67.445 151.013L67.322,48.206A4,4 134.966,0 1,71.317 44.201z" + android:fillColor="#ffffff"/> + <path + android:pathData="M76,123.082L144.675,123.001A1,1 134.966,0 1,145.676 124L145.676,124A1,1 134.966,0 1,144.677 125.001L76.002,125.082A1,1 134.966,0 1,75.001 124.083L75.001,124.083A1,1 134.966,0 1,76 123.082z" + android:fillColor="#B8E0FA"/> + <path + android:pathData="M77,131.061L127.352,131.002A1,1 134.966,0 1,128.353 132L128.353,132A1,1 134.966,0 1,127.354 133.002L77.002,133.061A1,1 134.966,0 1,76.001 132.062L76.001,132.062A1,1 134.966,0 1,77 131.061z" + android:fillColor="#B8E0FA"/> + <path + android:pathData="M77,138.073L137.822,138.001A1,1 134.966,0 1,138.823 139L138.823,139A1,1 134.966,0 1,137.825 140.001L77.002,140.073A1,1 134.966,0 1,76.001 139.074L76.001,139.074A1,1 134.966,0 1,77 138.073z" + android:fillColor="#B8E0FA"/> + <path + android:pathData="M122.455,68.783L121.274,68.78L121.277,67.599L122.459,67.602L122.455,68.783Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.634,68.788L122.453,68.784L122.456,67.604L123.637,67.607L123.634,68.788Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.818,68.791L123.637,68.788L123.64,67.607L124.822,67.611L124.818,68.791Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.998,68.793L124.817,68.788L124.82,67.608L126.001,67.611L125.998,68.793Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M127.18,68.799L125.999,68.796L126.002,67.615L127.184,67.618L127.18,68.799Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M128.363,68.801L127.182,68.797L127.185,67.617L128.367,67.62L128.363,68.801Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.541,68.804L128.36,68.801L128.363,67.619L129.544,67.622L129.541,68.804Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.538,69.988L128.357,69.984L128.36,68.804L129.542,68.807L129.538,69.988Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.534,71.168L128.353,71.163L128.356,69.982L129.537,69.986L129.534,71.168Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.53,72.347L128.349,72.344L128.352,71.163L129.535,71.166L129.53,72.347Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.528,73.528L128.347,73.524L128.35,72.344L129.532,72.347L129.528,73.528Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.523,74.711L128.342,74.708L128.345,73.527L129.526,73.53L129.523,74.711Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.519,75.892L128.338,75.888L128.341,74.708L129.523,74.711L129.519,75.892Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.419,68.717L100.6,68.72L100.603,67.539L99.422,67.535L99.419,68.717Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.238,68.708L99.419,68.712L99.422,67.53L98.242,67.527L98.238,68.708Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.059,68.706L98.24,68.71L98.243,67.528L97.062,67.525L97.059,68.706Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M95.876,68.703L97.057,68.707L97.06,67.525L95.879,67.522L95.876,68.703Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M94.692,68.699L95.873,68.702L95.876,67.521L94.696,67.518L94.692,68.699Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M93.513,68.699L94.694,68.703L94.697,67.521L93.516,67.518L93.513,68.699Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.332,68.692L93.513,68.696L93.516,67.514L92.336,67.512L92.332,68.692Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.328,69.875L93.509,69.879L93.512,68.697L92.331,68.694L92.328,69.875Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.323,71.051L93.505,71.054L93.508,69.873L92.328,69.87L92.323,71.051Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.322,72.236L93.503,72.24L93.506,71.058L92.325,71.055L92.322,72.236Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.319,73.416L93.5,73.42L93.503,72.238L92.323,72.235L92.319,73.416Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.312,74.6L93.493,74.603L93.497,73.422L92.316,73.419L92.312,74.6Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.311,75.779L93.492,75.783L93.495,74.601L92.314,74.598L92.311,75.779Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.349,103.922L121.167,103.919L121.163,105.1L122.344,105.103L122.349,103.922Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.533,103.929L122.352,103.925L122.349,105.107L123.53,105.11L123.533,103.929Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.71,103.934L123.529,103.931L123.526,105.112L124.706,105.114L124.71,103.934Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.893,103.936L124.712,103.932L124.709,105.114L125.89,105.117L125.893,103.936Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M127.076,103.94L125.895,103.937L125.892,105.118L127.073,105.121L127.076,103.94Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M128.254,103.94L127.073,103.936L127.07,105.119L128.25,105.121L128.254,103.94Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.439,103.948L128.258,103.944L128.255,105.126L129.436,105.129L129.439,103.948Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.441,102.764L128.26,102.76L128.257,103.942L129.437,103.945L129.441,102.764Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.443,101.583L128.262,101.58L128.259,102.762L129.44,102.765L129.443,101.583Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.45,100.404L128.269,100.4L128.265,101.582L129.445,101.585L129.45,100.404Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.452,99.219L128.271,99.216L128.268,100.397L129.449,100.4L129.452,99.219Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.455,98.039L128.274,98.034L128.27,99.217L129.45,99.219L129.455,98.039Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M129.457,96.855L128.276,96.851L128.273,98.034L129.454,98.037L129.457,96.855Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.314,103.857L100.496,103.86L100.493,105.041L99.311,105.038L99.314,103.857Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.134,103.853L99.315,103.857L99.312,105.039L98.13,105.034L98.134,103.853Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M96.95,103.848L98.131,103.851L98.128,105.032L96.947,105.029L96.95,103.848Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M95.772,103.845L96.953,103.85L96.95,105.03L95.767,105.026L95.772,103.845Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M94.589,103.84L95.77,103.843L95.767,105.024L94.585,105.021L94.589,103.84Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M93.409,103.837L94.59,103.841L94.587,105.021L93.406,105.018L93.409,103.837Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.228,103.835L93.41,103.838L93.407,105.02L92.224,105.016L92.228,103.835Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.231,102.651L93.412,102.655L93.409,103.835L92.228,103.832L92.231,102.651Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.235,101.471L93.417,101.474L93.414,102.655L92.231,102.652L92.235,101.471Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.24,100.288L93.421,100.291L93.418,101.473L92.237,101.47L92.24,100.288Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.242,99.109L93.423,99.114L93.42,100.294L92.238,100.29L92.242,99.109Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.246,97.929L93.427,97.932L93.424,99.113L92.243,99.11L92.246,97.929Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M92.248,96.747L93.429,96.751L93.427,97.931L92.244,97.928L92.248,96.747Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.969,72.725L106.788,72.722L106.791,71.54L107.973,71.544L107.969,72.725Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.515,72.736L110.334,72.732L110.336,71.552L111.519,71.555L111.515,72.736Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.149,73.913L107.968,73.91L107.971,72.728L109.153,72.732L109.149,73.913Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.695,73.92L111.514,73.917L111.517,72.736L112.699,72.739L112.695,73.92Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.055,73.931L113.873,73.928L113.876,72.747L115.059,72.75L115.055,73.931Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.328,75.094L109.147,75.09L109.15,73.909L110.332,73.913L110.328,75.094Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.051,75.111L113.87,75.107L113.872,73.927L115.054,73.93L115.051,75.111Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.963,76.27L106.782,76.267L106.785,75.086L107.966,75.089L107.963,76.27Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.325,76.278L109.144,76.275L109.147,75.094L110.328,75.097L110.325,76.278Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.686,76.283L111.505,76.28L111.508,75.099L112.69,75.102L112.686,76.283Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.868,76.289L112.687,76.284L112.69,75.104L113.871,75.107L113.868,76.289Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.956,77.45L106.775,77.446L106.778,76.266L107.96,76.269L107.956,77.45Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.139,77.453L107.958,77.45L107.961,76.269L109.142,76.272L109.139,77.453Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.136,78.635L107.955,78.631L107.958,77.451L109.14,77.454L109.136,78.635Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.317,78.638L109.136,78.635L109.139,77.453L110.32,77.456L110.317,78.638Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.861,78.653L112.68,78.649L112.683,77.469L113.864,77.472L113.861,78.653Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.04,78.653L113.859,78.649L113.862,77.468L115.044,77.472L115.04,78.653Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.952,79.814L106.771,79.81L106.774,78.63L107.956,78.633L107.952,79.814Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.492,79.823L110.312,79.818L110.315,78.637L111.495,78.642L111.492,79.823Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.947,80.997L106.766,80.993L106.769,79.812L107.95,79.816L107.947,80.997Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.127,80.998L107.946,80.995L107.949,79.814L109.131,79.818L109.127,80.998Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.491,81.004L110.309,81.001L110.312,79.82L111.495,79.823L111.491,81.004Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.853,81.012L112.672,81.009L112.675,79.828L113.856,79.831L113.853,81.012Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.034,81.014L113.853,81.01L113.856,79.83L115.038,79.833L115.034,81.014Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.422,72.756L116.241,72.752L116.244,71.571L117.427,71.575L117.422,72.756Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.42,73.937L116.239,73.934L116.242,72.752L117.423,72.755L117.42,73.937Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.415,75.12L116.235,75.115L116.237,73.935L117.42,73.939L117.415,75.12Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.779,75.124L118.598,75.12L118.601,73.94L119.783,73.944L119.779,75.124Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.962,75.127L119.781,75.124L119.784,73.943L120.965,73.946L120.962,75.127Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.139,75.132L120.959,75.128L120.961,73.948L122.144,73.951L122.139,75.132Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.322,75.134L122.141,75.131L122.144,73.95L123.326,73.953L123.322,75.134Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.412,76.296L116.23,76.293L116.233,75.112L117.415,75.115L117.412,76.296Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.776,76.309L118.595,76.306L118.598,75.124L119.779,75.127L119.776,76.309Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.957,76.309L119.776,76.305L119.779,75.125L120.961,75.128L120.957,76.309Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.137,76.312L120.956,76.309L120.959,75.128L122.14,75.131L122.137,76.312Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.318,76.313L122.137,76.309L122.14,75.129L123.321,75.132L123.318,76.313Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.41,77.479L116.229,77.474L116.231,76.294L117.414,76.298L117.41,77.479Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.769,77.488L118.588,77.485L118.591,76.304L119.774,76.307L119.769,77.488Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.953,77.49L119.772,77.486L119.775,76.305L120.956,76.309L120.953,77.49Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.133,77.496L120.951,77.493L120.954,76.311L122.137,76.315L122.133,77.496Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.315,77.497L122.134,77.493L122.137,76.312L123.319,76.317L123.315,77.497Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.405,78.66L116.224,78.655L116.227,77.474L117.41,77.479L117.405,78.66Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.768,78.668L118.587,78.664L118.59,77.484L119.771,77.487L119.768,78.668Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.949,78.67L119.767,78.667L119.77,77.486L120.953,77.489L120.949,78.67Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.128,78.676L120.947,78.672L120.95,77.492L122.131,77.495L122.128,78.676Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.309,78.678L122.128,78.675L122.131,77.493L123.313,77.497L123.309,78.678Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.403,79.843L116.221,79.84L116.224,78.659L117.406,78.662L117.403,79.843Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.603,72.757L117.422,72.754L117.425,71.573L118.606,71.576L118.603,72.757Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.783,72.76L118.603,72.756L118.606,71.574L119.788,71.579L119.783,72.76Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.966,72.763L119.785,72.76L119.788,71.578L120.969,71.581L120.966,72.763Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.148,72.769L120.967,72.765L120.97,71.585L122.151,71.588L122.148,72.769Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.328,72.774L122.147,72.771L122.15,71.59L123.332,71.593L123.328,72.774Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.509,72.775L123.328,72.771L123.33,71.591L124.512,71.594L124.509,72.775Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.689,72.779L124.508,72.776L124.511,71.595L125.693,71.598L125.689,72.779Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.687,73.962L124.506,73.958L124.508,72.778L125.69,72.781L125.687,73.962Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.685,75.144L124.504,75.139L124.507,73.958L125.689,73.963L125.685,75.144Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.681,76.321L124.5,76.318L124.503,75.137L125.684,75.14L125.681,76.321Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.676,77.502L124.495,77.498L124.498,76.318L125.68,76.322L125.676,77.502Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.674,78.686L124.492,78.683L124.495,77.502L125.677,77.505L125.674,78.686Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.67,79.866L124.489,79.862L124.491,78.682L125.674,78.685L125.67,79.866Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.399,81.023L116.218,81.019L116.22,79.839L117.403,79.842L117.399,81.023Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.578,81.03L117.397,81.027L117.4,79.846L118.582,79.849L118.578,81.03Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.759,81.03L118.578,81.026L118.581,79.846L119.762,79.849L119.759,81.03Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.942,81.034L119.76,81.031L119.763,79.85L120.946,79.853L120.942,81.034Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.125,81.037L120.944,81.033L120.946,79.853L122.128,79.856L122.125,81.037Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.305,81.038L122.124,81.035L122.127,79.854L123.309,79.857L123.305,81.038Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.487,81.045L123.306,81.041L123.309,79.861L124.491,79.864L124.487,81.045Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.664,81.05L124.483,81.046L124.486,79.864L125.667,79.869L125.664,81.05Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.342,72.694L96.161,72.69L96.164,71.508L97.345,71.513L97.342,72.694Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.522,72.698L97.341,72.695L97.344,71.514L98.526,71.517L98.522,72.698Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.703,72.699L98.522,72.695L98.525,71.513L99.707,71.518L99.703,72.699Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.883,72.705L99.701,72.702L99.704,71.521L100.886,71.524L100.883,72.705Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.065,72.711L100.884,72.707L100.887,71.526L102.069,71.531L102.065,72.711Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.247,72.714L102.066,72.711L102.069,71.53L103.25,71.533L103.247,72.714Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.428,72.716L103.247,72.712L103.25,71.532L104.432,71.535L104.428,72.716Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.609,72.718L104.428,72.715L104.431,71.534L105.613,71.537L105.609,72.718Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.338,73.874L96.157,73.871L96.16,72.69L97.342,72.694L97.338,73.874Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.606,73.901L104.425,73.897L104.428,72.717L105.609,72.72L105.606,73.901Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.335,75.059L96.154,75.054L96.157,73.874L97.338,73.877L97.335,75.059Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.693,75.063L98.512,75.058L98.515,73.878L99.698,73.882L99.693,75.063Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.878,75.069L99.697,75.066L99.7,73.885L100.881,73.888L100.878,75.069Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.059,75.071L100.878,75.067L100.881,73.887L102.063,73.89L102.059,75.071Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.239,75.073L102.058,75.07L102.061,73.889L103.242,73.892L103.239,75.073Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.602,75.081L104.421,75.078L104.424,73.897L105.606,73.901L105.602,75.081Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.331,76.239L96.15,76.236L96.153,75.055L97.335,75.058L97.331,76.239Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.691,76.246L98.51,76.243L98.513,75.061L99.695,75.065L99.691,76.246Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.874,76.249L99.693,76.245L99.696,75.065L100.878,75.069L100.874,76.249Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.057,76.252L100.876,76.248L100.879,75.067L102.06,75.07L102.057,76.252Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.236,76.257L102.056,76.253L102.058,75.073L103.241,75.076L103.236,76.257Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.597,76.262L104.416,76.259L104.419,75.077L105.6,75.081L105.597,76.262Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.326,77.418L96.145,77.414L96.148,76.234L97.329,76.237L97.326,77.418Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.69,77.422L98.509,77.418L98.512,76.238L99.693,76.241L99.69,77.422Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.871,77.433L99.69,77.429L99.693,76.248L100.874,76.252L100.871,77.433Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.05,77.435L100.868,77.432L100.871,76.25L102.054,76.254L102.05,77.435Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.232,77.438L102.051,77.433L102.054,76.252L103.235,76.256L103.232,77.438Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.595,77.445L104.414,77.441L104.417,76.261L105.599,76.264L105.595,77.445Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.324,78.602L96.143,78.598L96.146,77.417L97.328,77.421L97.324,78.602Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.687,78.607L98.506,78.603L98.509,77.422L99.691,77.426L99.687,78.607Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.868,78.61L99.686,78.607L99.689,77.426L100.872,77.429L100.868,78.61Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.048,78.615L100.867,78.611L100.87,77.431L102.051,77.434L102.048,78.615Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.23,78.621L102.048,78.618L102.051,77.437L103.234,77.44L103.23,78.621Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.593,78.626L104.412,78.623L104.415,77.442L105.597,77.445L105.593,78.626Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.32,79.782L96.139,79.779L96.142,78.598L97.323,78.601L97.32,79.782Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.586,79.809L104.405,79.804L104.408,78.624L105.589,78.627L105.586,79.809Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.317,80.966L96.136,80.962L96.139,79.782L97.321,79.785L97.317,80.966Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.498,80.968L97.317,80.965L97.32,79.784L98.501,79.787L98.498,80.968Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.678,80.97L98.497,80.966L98.5,79.786L99.682,79.789L99.678,80.97Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.861,80.973L99.68,80.97L99.683,79.789L100.864,79.792L100.861,80.973Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.038,80.979L100.858,80.974L100.86,79.794L102.041,79.797L102.038,80.979Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.222,80.98L102.041,80.977L102.044,79.796L103.226,79.799L103.222,80.98Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.406,80.984L103.225,80.98L103.228,79.8L104.409,79.803L104.406,80.984Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.585,80.986L104.403,80.983L104.406,79.802L105.589,79.805L105.585,80.986Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.28,92.777L96.099,92.773L96.102,91.593L97.283,91.596L97.28,92.777Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.46,92.78L97.279,92.777L97.282,91.596L98.465,91.599L98.46,92.78Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.644,92.782L98.463,92.777L98.465,91.598L99.648,91.601L99.644,92.782Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.825,92.789L99.644,92.785L99.647,91.604L100.828,91.607L100.825,92.789Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.004,92.789L100.823,92.785L100.825,91.605L102.008,91.609L102.004,92.789Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.186,92.793L102.005,92.789L102.008,91.608L103.189,91.611L103.186,92.793Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.369,92.794L103.188,92.79L103.191,91.61L104.374,91.614L104.369,92.794Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.549,92.8L104.368,92.797L104.371,91.616L105.553,91.619L105.549,92.8Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.278,93.957L96.097,93.954L96.1,92.773L97.282,92.777L97.278,93.957Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.545,93.98L104.364,93.977L104.367,92.796L105.548,92.799L105.545,93.98Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.274,95.137L96.093,95.133L96.096,93.953L97.277,93.956L97.274,95.137Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.636,95.146L98.456,95.141L98.458,93.961L99.64,93.964L99.636,95.146Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.817,95.151L99.636,95.147L99.639,93.965L100.82,93.97L100.817,95.151Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M101.999,95.153L100.818,95.15L100.821,93.969L102.003,93.972L101.999,95.153Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.179,95.157L101.999,95.153L102.002,93.972L103.182,93.976L103.179,95.157Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.542,95.164L104.361,95.16L104.364,93.98L105.546,93.983L105.542,95.164Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.269,96.321L96.088,96.317L96.091,95.135L97.273,95.14L97.269,96.321Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.632,96.326L98.451,96.322L98.454,95.141L99.636,95.145L99.632,96.326Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.816,96.328L99.634,96.325L99.637,95.144L100.82,95.147L100.816,96.328Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M101.993,96.332L100.812,96.328L100.815,95.148L101.996,95.151L101.993,96.332Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.176,96.335L101.995,96.332L101.998,95.151L103.18,95.154L103.176,96.335Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.538,96.344L104.357,96.341L104.36,95.16L105.542,95.163L105.538,96.344Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.267,97.502L96.086,97.498L96.089,96.317L97.27,96.32L97.267,97.502Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.63,97.509L98.449,97.506L98.451,96.325L99.633,96.328L99.63,97.509Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.81,97.511L99.63,97.507L99.632,96.327L100.815,96.33L100.81,97.511Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M101.991,97.514L100.809,97.511L100.812,96.329L101.995,96.333L101.991,97.514Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.174,97.516L101.993,97.511L101.996,96.331L103.177,96.335L103.174,97.516Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.533,97.528L104.352,97.524L104.355,96.344L105.536,96.347L105.533,97.528Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.265,98.686L96.084,98.681L96.086,97.501L97.269,97.505L97.265,98.686Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.623,98.689L98.442,98.685L98.445,97.505L99.627,97.509L99.623,98.689Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.806,98.692L99.625,98.689L99.628,97.508L100.809,97.511L100.806,98.692Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M101.988,98.698L100.807,98.693L100.81,97.514L101.991,97.517L101.988,98.698Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.169,98.699L101.988,98.696L101.991,97.515L103.173,97.518L103.169,98.699Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.53,98.704L104.349,98.701L104.352,97.519L105.534,97.523L105.53,98.704Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.259,99.86L96.078,99.857L96.081,98.676L97.262,98.679L97.259,99.86Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.527,99.887L104.346,99.884L104.349,98.702L105.53,98.705L105.527,99.887Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.256,101.044L96.076,101.04L96.078,99.86L97.261,99.863L97.256,101.044Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.437,101.047L97.256,101.043L97.259,99.862L98.439,99.866L98.437,101.047Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.619,101.049L98.438,101.046L98.441,99.865L99.624,99.868L99.619,101.049Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.799,101.056L99.618,101.051L99.621,99.87L100.802,99.874L100.799,101.056Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M101.979,101.061L100.798,101.058L100.801,99.876L101.983,99.88L101.979,101.061Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.162,101.063L101.981,101.059L101.984,99.878L103.166,99.882L103.162,101.063Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.342,101.066L103.161,101.063L103.164,99.882L104.345,99.885L104.342,101.066Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.525,101.068L104.344,101.064L104.347,99.884L105.529,99.887L105.525,101.068Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.305,82.186L109.124,82.183L109.127,81.001L110.309,81.005L110.305,82.186Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.488,82.188L110.307,82.183L110.31,81.003L111.491,81.006L111.488,82.188Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.668,82.19L111.487,82.187L111.49,81.006L112.672,81.009L112.668,82.19Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.032,82.195L113.85,82.192L113.853,81.011L115.035,81.014L115.032,82.195Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.309,83.326L96.128,83.322L96.131,82.142L97.313,82.145L97.309,83.326Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.672,83.331L98.491,83.327L98.494,82.147L99.676,82.15L99.672,83.331Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.852,83.336L99.671,83.332L99.674,82.151L100.855,82.155L100.852,83.336Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.034,83.343L100.853,83.34L100.856,82.159L102.038,82.162L102.034,83.343Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.398,83.348L103.216,83.345L103.219,82.163L104.401,82.166L104.398,83.348Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.94,83.358L106.759,83.354L106.762,82.174L107.943,82.177L107.94,83.358Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.121,83.36L107.94,83.357L107.943,82.176L109.125,82.179L109.121,83.36Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.303,83.366L109.122,83.362L109.125,82.182L110.306,82.185L110.303,83.366Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.664,83.373L111.483,83.369L111.485,82.189L112.667,82.192L112.664,83.373Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.849,83.376L112.668,83.373L112.671,82.192L113.852,82.195L113.849,83.376Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.027,83.377L113.846,83.373L113.849,82.193L115.031,82.197L115.027,83.377Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M116.21,83.382L115.028,83.379L115.031,82.198L116.213,82.201L116.21,83.382Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.935,83.398L119.754,83.394L119.757,82.213L120.939,82.217L120.935,83.398Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.478,83.407L123.297,83.404L123.3,82.223L124.481,82.226L124.478,83.407Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.66,83.411L124.479,83.406L124.482,82.227L125.663,82.229L125.66,83.411Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.488,84.508L97.306,84.505L97.309,83.324L98.492,83.327L98.488,84.508Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.85,84.516L99.669,84.513L99.672,83.332L100.854,83.335L100.85,84.516Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.573,84.532L104.392,84.529L104.395,83.348L105.576,83.351L105.573,84.532Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.936,84.539L106.755,84.535L106.758,83.354L107.94,83.358L107.936,84.539Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.661,84.555L111.48,84.552L111.483,83.37L112.665,83.374L112.661,84.555Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.024,84.563L113.843,84.558L113.846,83.377L115.027,83.381L115.024,84.563Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.387,84.567L116.207,84.563L116.21,83.382L117.39,83.386L117.387,84.567Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.933,84.578L119.752,84.575L119.755,83.393L120.936,83.396L120.933,84.578Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.11,84.582L120.929,84.578L120.932,83.398L122.115,83.402L122.11,84.582Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.476,84.588L123.295,84.584L123.298,83.404L124.481,83.407L124.476,84.588Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M97.302,85.689L96.121,85.686L96.124,84.505L97.306,84.508L97.302,85.689Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.481,85.691L97.3,85.687L97.302,84.507L98.484,84.51L98.481,85.691Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.665,85.695L98.484,85.692L98.487,84.511L99.669,84.514L99.665,85.695Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.025,85.702L100.844,85.699L100.847,84.518L102.03,84.521L102.025,85.702Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M106.751,85.719L105.57,85.716L105.573,84.535L106.754,84.538L106.751,85.719Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.114,85.724L107.933,85.721L107.936,84.54L109.118,84.543L109.114,85.724Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.66,85.734L111.479,85.731L111.482,84.55L112.663,84.553L112.66,85.734Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.385,85.751L116.204,85.748L116.207,84.567L117.389,84.57L117.385,85.751Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.746,85.755L118.565,85.752L118.568,84.571L119.75,84.574L119.746,85.755Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.107,85.759L120.926,85.756L120.929,84.575L122.11,84.578L122.107,85.759Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.661,86.877L98.48,86.873L98.483,85.693L99.664,85.696L99.661,86.877Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.567,86.893L104.386,86.89L104.389,85.709L105.57,85.712L105.567,86.893Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M106.749,86.899L105.568,86.895L105.571,85.715L106.753,85.718L106.749,86.899Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.932,86.901L106.751,86.897L106.754,85.716L107.935,85.72L107.932,86.901Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.473,86.911L110.292,86.908L110.295,85.727L111.476,85.73L111.473,86.911Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.838,86.916L112.657,86.913L112.66,85.732L113.841,85.735L113.838,86.916Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.016,86.922L113.835,86.918L113.838,85.738L115.019,85.741L115.016,86.922Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.559,86.933L117.378,86.93L117.381,85.748L118.563,85.752L118.559,86.933Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.744,86.936L118.563,86.932L118.566,85.752L119.747,85.755L119.744,86.936Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.649,86.958L124.468,86.954L124.471,85.773L125.652,85.777L125.649,86.958Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.476,88.056L97.295,88.051L97.298,86.871L98.479,86.874L98.476,88.056Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.656,88.058L98.475,88.055L98.478,86.873L99.66,86.877L99.656,88.058Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.019,88.066L100.838,88.063L100.841,86.882L102.023,86.885L102.019,88.066Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.563,88.073L104.382,88.07L104.385,86.889L105.567,86.892L105.563,88.073Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.926,88.081L106.744,88.077L106.747,86.896L107.93,86.9L107.926,88.081Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.108,88.087L107.927,88.083L107.929,86.903L109.112,86.907L109.108,88.087Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.469,88.092L110.288,88.088L110.29,86.908L111.473,86.911L111.469,88.092Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.282,88.129L122.101,88.126L122.104,86.945L123.287,86.948L123.282,88.129Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.465,88.131L123.284,88.127L123.287,86.946L124.468,86.95L124.465,88.131Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M99.655,89.237L98.474,89.233L98.476,88.053L99.658,88.056L99.655,89.237Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M103.198,89.249L102.017,89.245L102.02,88.064L103.202,88.068L103.198,89.249Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M104.377,89.254L103.196,89.251L103.199,88.07L104.381,88.073L104.377,89.254Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.103,89.268L107.922,89.265L107.925,88.083L109.107,88.087L109.103,89.268Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M116.19,89.287L115.009,89.284L115.012,88.103L116.194,88.106L116.19,89.287Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.553,89.293L117.372,89.288L117.375,88.107L118.557,88.112L118.553,89.293Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.735,89.298L118.554,89.295L118.557,88.114L119.738,88.117L119.735,89.298Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.095,89.307L120.914,89.304L120.917,88.122L122.1,88.126L122.095,89.307Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M98.467,90.416L97.286,90.413L97.289,89.232L98.471,89.235L98.467,90.416Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M100.832,90.424L99.651,90.421L99.654,89.24L100.835,89.243L100.832,90.424Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M102.012,90.429L100.831,90.424L100.834,89.244L102.017,89.248L102.012,90.429Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M105.556,90.436L104.375,90.433L104.378,89.252L105.56,89.255L105.556,90.436Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.101,90.448L107.921,90.444L107.923,89.264L109.104,89.267L109.101,90.448Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.282,90.449L109.101,90.446L109.104,89.265L110.285,89.268L110.282,90.449Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.645,90.457L111.464,90.454L111.467,89.273L112.648,89.276L112.645,90.457Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M115.007,90.467L113.826,90.463L113.829,89.282L115.01,89.286L115.007,90.467Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M116.188,90.468L115.006,90.465L115.009,89.284L116.191,89.287L116.188,90.468Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.914,90.481L119.733,90.478L119.736,89.297L120.917,89.3L120.914,90.481Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.093,90.491L120.912,90.487L120.915,89.307L122.096,89.31L122.093,90.491Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.279,91.633L109.098,91.629L109.101,90.449L110.284,90.452L110.279,91.633Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.64,91.637L111.459,91.634L111.462,90.453L112.645,90.456L112.64,91.637Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.821,91.647L112.64,91.643L112.643,90.462L113.824,90.466L113.821,91.647Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.365,91.654L116.184,91.651L116.187,90.47L117.368,90.473L117.365,91.654Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.546,91.657L117.365,91.652L117.368,90.473L118.55,90.476L118.546,91.657Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.275,91.67L122.094,91.666L122.096,90.486L123.278,90.489L123.275,91.67Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.634,91.682L124.453,91.677L124.456,90.497L125.637,90.501L125.634,91.682Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.912,92.809L106.731,92.804L106.734,91.623L107.916,91.628L107.912,92.809Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.092,92.811L107.911,92.808L107.914,91.627L109.095,91.63L109.092,92.811Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.818,92.824L112.637,92.821L112.64,91.64L113.822,91.643L113.818,92.824Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M114.999,92.826L113.818,92.822L113.821,91.642L115.002,91.645L114.999,92.826Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.363,92.838L116.182,92.834L116.185,91.654L117.367,91.658L117.363,92.838Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M120.907,92.845L119.726,92.842L119.729,91.66L120.91,91.664L120.907,92.845Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.269,92.853L122.088,92.85L122.091,91.669L123.273,91.672L123.269,92.853Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.816,94.008L112.635,94.004L112.637,92.824L113.819,92.827L113.816,94.008Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.908,95.17L106.727,95.166L106.73,93.986L107.912,93.99L107.908,95.17Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.086,95.171L107.905,95.168L107.908,93.987L109.089,93.99L109.086,95.171Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.451,95.183L110.27,95.18L110.273,93.999L111.455,94.002L111.451,95.183Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M114.994,95.19L113.813,95.186L113.816,94.006L114.997,94.009L114.994,95.19Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M116.174,95.196L114.993,95.193L114.996,94.012L116.178,94.015L116.174,95.196Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.355,95.198L116.174,95.193L116.177,94.014L117.359,94.017L117.355,95.198Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.718,95.203L118.536,95.2L118.539,94.018L119.722,94.022L119.718,95.203Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.261,95.216L122.08,95.212L122.082,94.032L123.265,94.035L123.261,95.216Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.624,95.222L124.443,95.217L124.445,94.037L125.628,94.041L125.624,95.222Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.901,96.352L106.72,96.349L106.723,95.168L107.904,95.171L107.901,96.352Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.626,96.365L111.445,96.362L111.448,95.181L112.631,95.184L112.626,96.365Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M113.806,96.371L112.625,96.367L112.628,95.187L113.809,95.19L113.806,96.371Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.353,96.378L116.172,96.374L116.175,95.193L117.357,95.198L117.353,96.378Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.079,97.535L107.898,97.532L107.901,96.351L109.082,96.354L109.079,97.535Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.442,97.543L110.261,97.538L110.264,96.357L111.445,96.361L111.442,97.543Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M114.988,97.554L113.807,97.551L113.81,96.369L114.991,96.372L114.988,97.554Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M116.165,97.559L114.984,97.555L114.987,96.375L116.169,96.378L116.165,97.559Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M119.711,97.566L118.53,97.563L118.533,96.382L119.715,96.385L119.711,97.566Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.072,97.573L120.89,97.57L120.893,96.389L122.076,96.392L122.072,97.573Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M118.526,98.748L117.344,98.744L117.347,97.563L118.53,97.567L118.526,98.748Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.25,98.76L122.068,98.757L122.071,97.576L123.254,97.579L123.25,98.76Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M124.432,98.762L123.251,98.758L123.254,97.578L124.436,97.581L124.432,98.762Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.615,98.765L124.434,98.761L124.437,97.58L125.618,97.584L125.615,98.765Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M107.893,99.893L106.712,99.89L106.715,98.709L107.897,98.712L107.893,99.893Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M109.07,99.898L107.89,99.894L107.892,98.714L109.073,98.717L109.07,99.898Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M111.435,99.907L110.254,99.902L110.257,98.723L111.438,98.726L111.435,99.907Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M122.067,99.938L120.886,99.934L120.889,98.753L122.071,98.757L122.067,99.938Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M123.247,99.941L122.066,99.938L122.069,98.757L123.25,98.76L123.247,99.941Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M110.249,101.08L109.068,101.076L109.071,99.896L110.252,99.899L110.249,101.08Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M112.613,101.093L111.432,101.089L111.435,99.909L112.616,99.912L112.613,101.093Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M117.339,101.106L116.158,101.102L116.161,99.922L117.343,99.925L117.339,101.106Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M125.606,101.129L124.425,101.125L124.428,99.945L125.609,99.948L125.606,101.129Z" + android:fillColor="#B8E0FA" + android:fillType="evenOdd"/> + <path + android:pathData="M164.653,105.645L162.868,105.226L164.653,105.645Z" + android:fillColor="#FF395A" + android:fillType="evenOdd"/> + <path + android:pathData="M59.118,101.245l20.642,11.845l-23.252,40.523l-20.642,-11.845z" + android:fillColor="#E8F5FF"/> + <path + android:pathData="M39.997,156.333H47.381C48.074,156.333 48.594,156.507 49.114,157.027L54.384,162.262C58.232,166.179 61.733,166.145 65.616,162.262L70.886,157.027C71.406,156.507 71.891,156.333 72.619,156.333H80.003C85.481,156.333 87.977,153.872 87.977,148.36V140.976C87.977,140.248 88.185,139.762 88.705,139.208L93.905,133.973C97.823,130.09 97.788,126.588 93.905,122.706L88.705,117.471C88.185,116.951 87.977,116.431 87.977,115.737V108.318C87.977,102.841 85.516,100.345 80.003,100.345H72.619C71.891,100.345 71.406,100.171 70.886,99.651L65.616,94.416C61.733,90.499 58.232,90.534 54.349,94.416L49.114,99.651C48.594,100.137 48.074,100.345 47.381,100.345H39.997C34.484,100.345 31.988,102.806 31.988,108.318V115.737C31.988,116.431 31.78,116.951 31.295,117.471L26.06,122.706C22.143,126.588 22.177,130.09 26.06,133.973L31.295,139.208C31.78,139.762 31.988,140.248 31.988,140.976V148.36C31.988,153.837 34.484,156.333 39.997,156.333ZM56.36,144.234C55.389,144.234 54.661,143.853 53.898,142.882L45.266,132.447C44.85,131.893 44.573,131.234 44.573,130.61C44.573,129.327 45.578,128.287 46.861,128.287C47.658,128.287 48.282,128.564 48.976,129.466L56.256,138.583L70.92,115.287C71.44,114.42 72.169,113.969 72.931,113.969C74.145,113.969 75.289,114.836 75.289,116.153C75.289,116.743 74.942,117.436 74.595,117.991L58.717,142.882C58.128,143.784 57.331,144.234 56.36,144.234Z" + android:fillColor="#B8E0FA"/> + </group> +</vector> diff --git a/Corona-Warn-App/src/main/res/layout/covid_test_error_card.xml b/Corona-Warn-App/src/main/res/layout/covid_test_error_card.xml index a401b3ec4a0c88a00ba408374cc8a0c5b37a7268..d7143e26747e19aee5c4c5cf3825c546ef49a194 100644 --- a/Corona-Warn-App/src/main/res/layout/covid_test_error_card.xml +++ b/Corona-Warn-App/src/main/res/layout/covid_test_error_card.xml @@ -8,27 +8,27 @@ <TextView android:id="@+id/card_title" - style="@style/headline5" + style="@style/headline6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/card_padding" android:layout_marginTop="@dimen/card_padding" android:layout_marginEnd="@dimen/card_padding" android:focusable="false" - android:text="@string/info_banner_title_1" + android:text="@string/person_card_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/vaccination_label" - style="@style/headline5" + style="@style/headline6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/card_padding" android:layout_marginEnd="@dimen/card_padding" android:focusable="false" - android:text="@string/info_banner_title_2" + android:text="@string/person_card_subtitle" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/person_overview_fragment.xml b/Corona-Warn-App/src/main/res/layout/person_overview_fragment.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b9904dee3b628d1c9bc94d2cf5289d82638e2dd --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/person_overview_fragment.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/colorSurface"> + + <com.google.android.material.appbar.MaterialToolbar + android:id="@+id/toolbar" + style="@style/CWAToolbar" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:menu="@menu/menu_certificates_fragment" + app:title="@string/certification_screen_title" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recycler_view" + android:layout_width="0dp" + android:layout_height="0dp" + android:clipToPadding="false" + android:paddingBottom="@dimen/spacing_fab_padding" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/toolbar" /> + + <LinearLayout + android:id="@+id/empty_layout" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="48dp" + android:gravity="center" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/toolbar"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:contentDescription="@string/person_overview_no_certificates_image_description" + app:srcCompat="@drawable/ic_person_overview_illustration" /> + + <TextView + style="@style/subtitleMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginTop="36dp" + android:text="@string/person_overview_no_certificates_title" + android:textStyle="bold" /> + + <TextView + style="@style/body2Medium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="24dp" + android:gravity="center" + android:text="@string/person_overview_no_certificates_subtitle" /> + </LinearLayout> + + <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton + android:id="@+id/scan_qrcode_fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="@dimen/spacing_normal" + android:text="@string/person_overview_scan_button" + android:transitionName="shared_element_container" + app:icon="@drawable/ic_qrcode" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/layout/person_overview_item.xml b/Corona-Warn-App/src/main/res/layout/person_overview_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..70c2659a7a57dd7171e58a7504ccdb68695914cf --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/person_overview_item.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <ImageView + android:id="@+id/background_image" + android:layout_width="0dp" + android:layout_height="0dp" + android:importantForAccessibility="no" + app:layout_constraintDimensionRatio="1:0.95" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:srcCompat="@drawable/bg_person_overview_2" /> + + <ImageView + android:id="@+id/stars_image" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginEnd="30dp" + android:layout_marginBottom="55dp" + android:importantForAccessibility="no" + android:scaleType="fitXY" + app:layout_constraintBottom_toBottomOf="@id/background_image" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/ic_eu_stars_blue" + tools:tint="#116A9F" /> + + <FrameLayout + android:id="@+id/qr_code_image_container" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginHorizontal="16dp" + android:layout_marginBottom="16dp" + android:background="@drawable/rounded_white_background" + android:backgroundTint="@color/qrcodeCardColor" + android:contentDescription="@string/trace_location_event_detail_qr_code_accessibility" + android:elevation="1dp" + android:padding="12dp" + app:layout_constraintBottom_toBottomOf="@+id/background_image" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/background_image"> + <com.google.android.material.imageview.ShapeableImageView + android:id="@+id/qrcode_image" + style="@style/ShapeAppearanceOverlay" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:srcCompat="@drawable/ic_qr_code" + tools:tint="@android:color/black" /> + </FrameLayout> + + <TextView + android:id="@+id/certificate_title" + style="@style/headline6" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="16dp" + android:maxLines="1" + android:text="@string/person_card_title" + android:textColor="@color/colorTextPrimary1InvertedStable" + app:autoSizeTextType="uniform" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + <TextView + android:id="@+id/certificate_subtitle" + style="@style/headline6" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:maxLines="1" + android:text="@string/person_card_subtitle" + android:textColor="@color/colorTextPrimary1InvertedStable" + android:textStyle="bold" + app:autoSizeTextType="uniform" + app:layout_constraintEnd_toEndOf="@+id/certificate_title" + app:layout_constraintStart_toStartOf="@+id/certificate_title" + app:layout_constraintTop_toBottomOf="@+id/certificate_title" /> + <TextView + android:id="@+id/name" + style="@style/headline5" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:maxLines="1" + android:textColor="@color/colorTextPrimary1InvertedStable" + app:autoSizeTextType="uniform" + app:layout_constraintBottom_toTopOf="@+id/qr_code_image_container" + app:layout_constraintEnd_toEndOf="@+id/certificate_subtitle" + app:layout_constraintStart_toStartOf="@+id/certificate_subtitle" + app:layout_constraintTop_toBottomOf="@+id/certificate_subtitle" + app:layout_constraintVertical_bias="0.0" + tools:text="Andrea Schneider" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/menu/menu_bottom_nav.xml b/Corona-Warn-App/src/main/res/menu/menu_bottom_nav.xml index 6362d1a367aed00688d4c4943a13215bce2b44c8..1b6a427d2ea0c3ecef800b291b6d0dd46ff16a55 100644 --- a/Corona-Warn-App/src/main/res/menu/menu_bottom_nav.xml +++ b/Corona-Warn-App/src/main/res/menu/menu_bottom_nav.xml @@ -7,7 +7,7 @@ android:title="@string/bottom_nav_home_title" /> <item - android:id="@+id/green_certificate_graph" + android:id="@+id/certificate_graph" android:icon="@drawable/ic_certificates" android:title="@string/bottom_nav_certificates_title" /> diff --git a/Corona-Warn-App/src/main/res/navigation/certificate_graph.xml b/Corona-Warn-App/src/main/res/navigation/certificate_graph.xml index bd0273a1bfc9f9d738817d0f757de4a5cb6163c8..8e21587d789c80a60f3b3f84e4d139ad168dca59 100644 --- a/Corona-Warn-App/src/main/res/navigation/certificate_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/certificate_graph.xml @@ -1,5 +1,98 @@ <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/certificate_recovery_graph"> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/certificate_graph" + app:startDestination="@id/personOverviewFragment"> + <fragment + android:id="@+id/personOverviewFragment" + android:name="de.rki.coronawarnapp.covidcertificate.person.ui.overview.PersonOverviewFragment" + android:label="PersonOverviewFragment" + tools:layout="@layout/person_overview_fragment"> + <action + android:id="@+id/action_personOverviewFragment_to_vaccinationConsentFragment" + app:destination="@id/vaccinationConsentFragment" /> + <action + android:id="@+id/action_personOverviewFragment_to_vaccinationListFragment" + app:destination="@id/vaccinationListFragment" /> + </fragment> + <fragment + android:id="@+id/vaccinationConsentFragment" + android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.consent.VaccinationConsentFragment" + android:label="vaccination_consent_fragment" + tools:layout="@layout/vaccination_consent_fragment"> + <argument + android:name="showBottomNav" + android:defaultValue="true" + app:argType="boolean" /> + <action + android:id="@+id/action_vaccinationConsentFragment_to_personOverviewFragment" + app:destination="@id/personOverviewFragment" + app:popUpTo="@id/vaccinationConsentFragment" + app:popUpToInclusive="true" /> + <action + android:id="@+id/action_vaccinationConsentFragment_to_privacyFragment" + app:destination="@id/privacyFragment" /> + </fragment> + + <fragment + android:id="@+id/privacyFragment" + android:name="de.rki.coronawarnapp.ui.information.InformationPrivacyFragment" + android:label="privacyFragment" + tools:layout="@layout/fragment_information_privacy" /> + + <fragment + android:id="@+id/covidCertificateDetailsFragment" + android:name="de.rki.coronawarnapp.covidcertificate.test.ui.details.CovidCertificateDetailsFragment" + android:label="CovidCertificateDetailsFragment" + tools:layout="@layout/fragment_covid_certificate_details"> + + <argument + android:name="testCertificateIdentifier" + app:argType="string" /> + </fragment> + + <fragment + android:id="@+id/vaccinationQrCodeScanFragment" + android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.scan.VaccinationQrCodeScanFragment" + android:label="VaccinationQrCodeScanFragment" + tools:layout="@layout/fragment_scan_qr_code"> + <action + android:id="@+id/action_vaccinationQrCodeScanFragment_to_vaccinationListFragment" + app:destination="@id/vaccinationListFragment" + app:launchSingleTop="true" + app:popUpTo="@id/vaccinationQrCodeScanFragment" + app:popUpToInclusive="true"/> + </fragment> + + <fragment + android:id="@+id/vaccinationListFragment" + android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.list.VaccinationListFragment" + android:label="fragment_vaccination_list" + tools:layout="@layout/fragment_vaccination_list"> + <argument + android:name="personIdentifierCodeSha256" + app:argType="string" /> + <action + android:id="@+id/action_vaccinationListFragment_to_vaccinationDetailsFragment" + app:destination="@id/vaccinationDetailsFragment" /> + <deepLink app:uri="coronawarnapp://vaccination-list/{personIdentifierCodeSha256}" /> + <action + android:id="@+id/action_vaccinationListFragment_to_vaccinationQrCodeScanFragment" + app:destination="@id/vaccinationQrCodeScanFragment" /> + <action + android:id="@+id/action_vaccinationListFragment_to_covidCertificateDetailsFragment" + app:destination="@id/covidCertificateDetailsFragment" /> + </fragment> + + <fragment + android:id="@+id/vaccinationDetailsFragment" + android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.details.VaccinationDetailsFragment" + android:label="fragment_vaccination_details" + tools:layout="@layout/fragment_vaccination_details"> + <argument + android:name="vaccinationCertificateId" + app:argType="string" /> + </fragment> </navigation> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/navigation/certificate_recovery_graph.xml b/Corona-Warn-App/src/main/res/navigation/certificate_recovery_graph.xml deleted file mode 100644 index bd0273a1bfc9f9d738817d0f757de4a5cb6163c8..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/navigation/certificate_recovery_graph.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<navigation xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/certificate_recovery_graph"> - -</navigation> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/navigation/certificate_test_graph.xml b/Corona-Warn-App/src/main/res/navigation/certificate_test_graph.xml deleted file mode 100644 index f38cdb7fb4db60bb48e3abf7159527a05fd8e3e2..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/navigation/certificate_test_graph.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<navigation xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/green_certificate_graph" - app:startDestination="@id/certificatesFragment"> - - <fragment - android:id="@+id/certificatesFragment" - android:name="de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesFragment" - android:label="fragment_certificates" - tools:layout="@layout/fragment_certificates"> - - <action - android:id="@+id/action_certificatesFragment_to_vaccinationNavGraph" - app:destination="@id/vaccination_nav_graph" /> - <action - android:id="@+id/action_certificatesFragment_to_covidCertificateDetailsFragment" - app:destination="@id/covidCertificateDetailsFragment" /> - - <action - android:id="@+id/action_certificatesFragment_to_consentFragment" - app:destination="@id/vaccinationConsentFragment" /> - - </fragment> - - <fragment - android:id="@+id/vaccinationConsentFragment" - android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.consent.VaccinationConsentFragment" - android:label="vaccination_consent_fragment" - tools:layout="@layout/vaccination_consent_fragment"> - <argument - android:name="showBottomNav" - android:defaultValue="true" - app:argType="boolean" /> - <action - android:id="@+id/action_vaccinationConsentFragment_to_certificatesFragment" - app:destination="@id/certificatesFragment" - app:popUpTo="@id/vaccinationConsentFragment" - app:popUpToInclusive="true" /> - <action - android:id="@+id/action_vaccinationConsentFragment_to_privacyFragment" - app:destination="@id/privacyFragment" /> - </fragment> - - <fragment - android:id="@+id/privacyFragment" - android:name="de.rki.coronawarnapp.ui.information.InformationPrivacyFragment" - android:label="privacyFragment" - tools:layout="@layout/fragment_information_privacy" /> - - <fragment - android:id="@+id/covidCertificateDetailsFragment" - android:name="de.rki.coronawarnapp.covidcertificate.test.ui.details.CovidCertificateDetailsFragment" - android:label="CovidCertificateDetailsFragment" - tools:layout="@layout/fragment_covid_certificate_details"> - - <argument - android:name="testCertificateIdentifier" - app:argType="string" /> - </fragment> -</navigation> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/navigation/certificate_vaccination_graph.xml b/Corona-Warn-App/src/main/res/navigation/certificate_vaccination_graph.xml deleted file mode 100644 index aeb23461ad7891fb411110910168880b6693ae5d..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/navigation/certificate_vaccination_graph.xml +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<navigation xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/vaccination_nav_graph" - app:startDestination="@id/vaccinationListFragment"> - - <fragment - android:id="@+id/vaccinationQrCodeScanFragment" - android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.scan.VaccinationQrCodeScanFragment" - android:label="VaccinationQrCodeScanFragment" - tools:layout="@layout/fragment_scan_qr_code"> - <action - android:id="@+id/action_vaccinationQrCodeScanFragment_to_vaccinationListFragment" - app:destination="@id/vaccinationListFragment" - app:launchSingleTop="true" - app:popUpTo="@id/vaccinationQrCodeScanFragment" - app:popUpToInclusive="true"/> - </fragment> - - <fragment - android:id="@+id/vaccinationListFragment" - android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.list.VaccinationListFragment" - android:label="fragment_vaccination_list" - tools:layout="@layout/fragment_vaccination_list"> - <argument - android:name="personIdentifierCodeSha256" - app:argType="string" /> - <action - android:id="@+id/action_vaccinationListFragment_to_vaccinationDetailsFragment" - app:destination="@id/vaccinationDetailsFragment" /> - <deepLink app:uri="coronawarnapp://vaccination-list/{personIdentifierCodeSha256}" /> - <action - android:id="@+id/action_vaccinationListFragment_to_vaccinationQrCodeScanFragment" - app:destination="@id/vaccinationQrCodeScanFragment" /> - </fragment> - - <fragment - android:id="@+id/vaccinationDetailsFragment" - android:name="de.rki.coronawarnapp.covidcertificate.vaccination.ui.details.VaccinationDetailsFragment" - android:label="fragment_vaccination_details" - tools:layout="@layout/fragment_vaccination_details"> - <argument - android:name="vaccinationCertificateId" - app:argType="string" /> - </fragment> - -</navigation> diff --git a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml index 4f49ad457412173bc43ba2bc3d1be69bedd3ef71..217906dc87c006ef5b5aba2b0eca4c7bf84c34dc 100644 --- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml @@ -16,11 +16,8 @@ <!-- Rapid antigen test profile graph--> <include app:graph="@navigation/rapid_antigen_test_profile_nav_graph" /> - <!-- Vaccination graph--> - <include app:graph="@navigation/certificate_vaccination_graph" /> - <!-- Certificates graph--> - <include app:graph="@navigation/certificate_test_graph" /> + <include app:graph="@navigation/certificate_graph" /> <!-- Main --> <fragment @@ -79,9 +76,6 @@ <action android:id="@+id/action_mainFragment_to_submissionTestResultKeysSharedFragment" app:destination="@id/submissionTestResultKeysSharedFragment" /> - <action - android:id="@+id/action_mainFragment_to_vaccinationNavGraph" - app:destination="@id/vaccination_nav_graph" /> </fragment> <fragment diff --git a/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f42d09ecdf0b6157a7e9fcce3cc2b71c4e6b03cd --- /dev/null +++ b/Corona-Warn-App/src/main/res/values-de/covid_certificate_strings.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- XTXT: Person overview no certificates title--> + <string name="person_overview_no_certificates_title">Noch keine Zertifikate vorhanden</string> + <!-- XTXT: Person overview no certificates subtitle--> + <string name="person_overview_no_certificates_subtitle">Hier werden die gespeicherten digitalen Impfzertifikate, Genesenenzertifikate und Testzertifikate angezeigt.</string> + <!-- XBUT: Person overview certificates scan button--> + <string name="person_overview_scan_button">Zertifikat hinzufügen</string> + <!-- XTXT: Person overview no certificates image content description--> + <string name="person_overview_no_certificates_image_description">A certificate with a QR code symbol on it.</string> + <!-- XTXT: Person card title--> + <string name="person_card_title">EU Digitales</string> + <!-- XTXT: Person card subtitle--> + <string name="person_card_subtitle">COVID-Zertifikat</string> +</resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-de/recovery_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/recovery_certificate_strings.xml deleted file mode 100644 index dc6f30d7c27fdb36b4e97fba65b6156a32579623..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/values-de/recovery_certificate_strings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-night/colors.xml b/Corona-Warn-App/src/main/res/values-night/colors.xml index 930cd8d3ad91bba01dc01389b8c616e91b39c5c8..0396c904a2b5eb7b35563a622806cf6869adfab8 100644 --- a/Corona-Warn-App/src/main/res/values-night/colors.xml +++ b/Corona-Warn-App/src/main/res/values-night/colors.xml @@ -76,4 +76,5 @@ <color name="colorVaccinationCardBackground">@color/colorSurface2</color> <color name="dividerColor">#4DFFFFFF</color> + <color name="qrcodeCardColor">@color/colorSurface2</color> </resources> diff --git a/Corona-Warn-App/src/main/res/values/colors.xml b/Corona-Warn-App/src/main/res/values/colors.xml index c27d7c2fd7fba2e98dd2601c8f923c4f836f79f2..d69464ffc55f8e93fe3f0cdf43b4ae79c4aa7024 100644 --- a/Corona-Warn-App/src/main/res/values/colors.xml +++ b/Corona-Warn-App/src/main/res/values/colors.xml @@ -102,4 +102,10 @@ <color name="whiteAlpha60">#99FFFFFF</color> <color name="dividerColor">#DEDEDE</color> + + <color name="starsColor1">#0191C6</color> + <color name="starsColor2">#116A9F</color> + <color name="starsColor3">#025A8F</color> + <color name="qrcodeCardColor">@color/colorSurface</color> + </resources> diff --git a/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f42d09ecdf0b6157a7e9fcce3cc2b71c4e6b03cd --- /dev/null +++ b/Corona-Warn-App/src/main/res/values/covid_certificate_strings.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- XTXT: Person overview no certificates title--> + <string name="person_overview_no_certificates_title">Noch keine Zertifikate vorhanden</string> + <!-- XTXT: Person overview no certificates subtitle--> + <string name="person_overview_no_certificates_subtitle">Hier werden die gespeicherten digitalen Impfzertifikate, Genesenenzertifikate und Testzertifikate angezeigt.</string> + <!-- XBUT: Person overview certificates scan button--> + <string name="person_overview_scan_button">Zertifikat hinzufügen</string> + <!-- XTXT: Person overview no certificates image content description--> + <string name="person_overview_no_certificates_image_description">A certificate with a QR code symbol on it.</string> + <!-- XTXT: Person card title--> + <string name="person_card_title">EU Digitales</string> + <!-- XTXT: Person card subtitle--> + <string name="person_card_subtitle">COVID-Zertifikat</string> +</resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values/recovery_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/recovery_certificate_strings.xml deleted file mode 100644 index dc6f30d7c27fdb36b4e97fba65b6156a32579623..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/values/recovery_certificate_strings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/TestCertificateContainerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/TestCertificateContainerTest.kt index 8c42b1e213257a704b966a54a50df594a490bf29..18fd7a8ed99aab9ea3405f50ac03730c32754dd5 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/TestCertificateContainerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/TestCertificateContainerTest.kt @@ -28,7 +28,7 @@ class TestCertificateContainerTest : BaseTest() { certificateId shouldBe "URN:UVCI:V1:DE:7WR8CE12Y8O2AN4NK320TPNKB1" data.testCertificateQrCode shouldBe certificateTestData.personATest2CertQRCodeString data.certificateReceivedAt shouldBe Instant.parse("1970-01-02T10:17:36.789Z") - toTestCertificate(null) shouldNotBe null + toTestCertificate(null, mockk()) shouldNotBe null } } @@ -40,7 +40,7 @@ class TestCertificateContainerTest : BaseTest() { certificateId shouldBe null data.testCertificateQrCode shouldBe null data.certificateReceivedAt shouldBe null - toTestCertificate(mockk()) shouldBe null + toTestCertificate(mockk(), mockk()) shouldBe null } certificateTestData.personATest4CertPendingContainer.apply { @@ -49,7 +49,7 @@ class TestCertificateContainerTest : BaseTest() { certificateId shouldBe null data.testCertificateQrCode shouldBe null data.certificateReceivedAt shouldBe null - toTestCertificate(mockk()) shouldBe null + toTestCertificate(mockk(), mockk()) shouldBe null } } } diff --git a/translation_v2.json b/translation_v2.json index 178b0b914174679a18e8dce58c10231b6ead733f..8b057cc8a4715d603074d6d2d30d869676ba8315 100644 --- a/translation_v2.json +++ b/translation_v2.json @@ -14,7 +14,7 @@ "vaccination_strings.xml", "green_certificate_strings.xml", "green_certificate_attribute_strings.xml", - "recovery_certificate_strings.xml" + "covid_certificate_strings.xml" ], "targetFolderPath": "../values-[langCode]" }