From 36462b98d188abffd84097086f0076f1d8453fc5 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Thu, 17 Jun 2021 11:50:37 +0200 Subject: [PATCH] Fix merge regression & conflicts (2.4.x -> 2.5.x) --- .../ui/overview/PersonOverviewFragment.kt | 30 +++++++++++++++---- .../ui/overview/PersonOverviewViewModel.kt | 29 ++++++++++++++++-- .../items/CovidTestCertificatePendingCard.kt | 6 ++-- .../test/core/TestCertificateRepository.kt | 2 +- .../test/ui/CertificatesViewModel.kt | 17 +---------- .../CovidCertificateDetailsFragment.kt | 3 -- .../rki/coronawarnapp/ui/main/MainActivity.kt | 2 +- 7 files changed, 56 insertions(+), 33 deletions(-) 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 3304e0ad3..e7a6f912a 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 @@ -8,8 +8,11 @@ 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.bugreporting.ui.toErrorDialogBuilder +import de.rki.coronawarnapp.covidcertificate.common.exception.TestCertificateServerException import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem import de.rki.coronawarnapp.databinding.PersonOverviewFragmentBinding +import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator import de.rki.coronawarnapp.util.lists.diffutil.update @@ -35,6 +38,13 @@ class PersonOverviewFragment : Fragment(R.layout.person_overview_fragment), Auto } viewModel.personCertificates.observe(viewLifecycleOwner) { binding.bindViews(it) } viewModel.events.observe(viewLifecycleOwner) { onNavEvent(it) } + + viewModel.markNewCertsAsSeen.observe(viewLifecycleOwner) { + /** + * This just needs to stay subscribed while the UI is open. + * It causes new certificates to be marked seen automatically. + */ + } } private fun onNavEvent(event: PersonOverviewFragmentEvents) { @@ -54,12 +64,20 @@ class PersonOverviewFragment : Fragment(R.layout.person_overview_fragment), Auto } .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() + is ShowRefreshErrorDialog -> { + event.error.toErrorDialogBuilder(requireContext()).apply { + setTitle(R.string.test_certificate_refresh_dialog_title) + setCancelable(false) + if ( + event.error is TestCertificateServerException && + event.error.errorCode == TestCertificateServerException.ErrorCode.DCC_NOT_SUPPORTED_BY_LAB + ) { + setNeutralButton(R.string.test_certificate_error_invalid_labid_faq) { _, _ -> + openUrl(getString(R.string.test_certificate_error_invalid_labid_faq_link)) + } + } + }.show() + } ScanQrCode -> Toast.makeText( requireContext(), 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 index de79765ae..320305628 100644 --- 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 @@ -1,25 +1,32 @@ package de.rki.coronawarnapp.covidcertificate.person.ui.overview +import android.content.Context import android.graphics.Bitmap import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.contactdiary.util.getLocale 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.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CovidTestCertificatePendingCard 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.covidcertificate.valueset.ValueSetsRepository import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator import de.rki.coronawarnapp.util.coroutine.DispatcherProvider +import de.rki.coronawarnapp.util.di.AppContext 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.catch import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.transform import timber.log.Timber @@ -28,6 +35,8 @@ class PersonOverviewViewModel @AssistedInject constructor( certificatesProvider: PersonCertificatesProvider, private val testCertificateRepository: TestCertificateRepository, private val qrCodeGenerator: QrCodeGenerator, + valueSetsRepository: ValueSetsRepository, + @AppContext context: Context, ) : CWAViewModel(dispatcherProvider) { private val qrCodes = mutableMapOf<String, Bitmap?>() @@ -39,6 +48,22 @@ class PersonOverviewViewModel @AssistedInject constructor( mapPersons(persons, qrCodesMap) }.asLiveData(dispatcherProvider.Default) + val markNewCertsAsSeen = testCertificateRepository.certificates + .onEach { wrappers -> + wrappers + .filter { !it.seenByUser && !it.isCertificateRetrievalPending } + .forEach { + testCertificateRepository.markCertificateAsSeenByUser(it.identifier) + } + } + .map { } + .catch { Timber.w("Failed to mark certificates as seen.") } + .asLiveData2() + + init { + valueSetsRepository.triggerUpdateValueSet(languageCode = context.getLocale()) + } + private fun mapPersons(persons: Set<PersonCertificates>, qrCodesMap: Map<String, Bitmap?>): List<CertificatesItem> = mutableListOf<CertificatesItem>().apply { addPendingCards(persons) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt index 0565eec8d..0ad83cc46 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/items/CovidTestCertificatePendingCard.kt @@ -10,7 +10,6 @@ import de.rki.coronawarnapp.databinding.CovidTestErrorCardBinding import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer -import org.joda.time.DateTime class CovidTestCertificatePendingCard(parent: ViewGroup) : CertificatesAdapter.CertificatesItemVH<CovidTestCertificatePendingCard.Item, CovidTestErrorCardBinding>( @@ -30,8 +29,8 @@ class CovidTestCertificatePendingCard(parent: ViewGroup) : testTime.text = context.getString( R.string.test_certificate_time, - curItem.testDate.toDayFormat(), - curItem.testDate.toShortTimeFormat() + curItem.certificate.registeredAt.toDayFormat(), + curItem.certificate.registeredAt.toShortTimeFormat() ) retryButton.setOnClickListener { @@ -55,7 +54,6 @@ class CovidTestCertificatePendingCard(parent: ViewGroup) : } data class Item( - override val testDate: DateTime, val certificate: TestCertificate, val onRetryAction: (Item) -> Unit, val onDeleteAction: (Item) -> Unit diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt index b632cea27..658d7b433 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt @@ -2,7 +2,7 @@ package de.rki.coronawarnapp.covidcertificate.test.core import de.rki.coronawarnapp.bugreporting.reportProblem import de.rki.coronawarnapp.coronatest.type.CoronaTest -import de.rki.coronawarnapp.covidcertificate.exception.TestCertificateServerException +import de.rki.coronawarnapp.covidcertificate.common.exception.TestCertificateServerException import de.rki.coronawarnapp.covidcertificate.test.core.qrcode.TestCertificateQRCodeExtractor import de.rki.coronawarnapp.covidcertificate.test.core.storage.PCRCertificateData import de.rki.coronawarnapp.covidcertificate.test.core.storage.RACertificateData 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 d287cc625..9e1753a7f 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 @@ -1,12 +1,10 @@ package de.rki.coronawarnapp.covidcertificate.test.ui -import android.content.Context import androidx.lifecycle.LiveData import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject -import de.rki.coronawarnapp.contactdiary.util.getLocale -import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateRepository import de.rki.coronawarnapp.covidcertificate.person.ui.overview.items.CertificatesItem +import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificateRepository 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 @@ -15,30 +13,17 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.HeaderInfoVacc import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.ImmuneVaccinationCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.NoCovidTestCertificatesCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.VaccinationCard -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUserTimeZone -import de.rki.coronawarnapp.covidcertificate.valueset.ValueSetsRepository -import de.rki.coronawarnapp.util.di.AppContext 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.catch import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onEach -import timber.log.Timber class CertificatesViewModel @AssistedInject constructor( vaccinationRepository: VaccinationRepository, - valueSetsRepository: ValueSetsRepository, - @AppContext context: Context, private val vaccinationSettings: VaccinationSettings, private val testCertificateRepository: TestCertificateRepository ) : CWAViewModel() { - init { - valueSetsRepository.triggerUpdateValueSet(languageCode = context.getLocale()) - } - val events = SingleLiveEvent<CertificatesFragmentEvents>() val screenItems: LiveData<List<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 671bcc486..670da564f 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 @@ -5,7 +5,6 @@ import android.os.Bundle import android.view.View import android.widget.LinearLayout import androidx.coordinatorlayout.widget.CoordinatorLayout -import androidx.core.view.isGone import androidx.fragment.app.Fragment import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController @@ -44,8 +43,6 @@ class CovidCertificateDetailsFragment : Fragment(R.layout.fragment_covid_certifi ) override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) { - qrCodeCard.title.isGone = true - qrCodeCard.subtitle.isGone = true appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha -> title.alpha = titleAlpha subtitle.alpha = subtitleAlpha 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 cf227d6ca..1b93880e5 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 @@ -107,7 +107,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { } vm.newCertificates.observe(this) { count -> - binding.mainBottomNavigation.updateCountBadge(R.id.green_certificate_graph, count) + binding.mainBottomNavigation.updateCountBadge(R.id.certificate_graph, count) } if (savedInstanceState == null) { -- GitLab