From 3a97d2aa8fee5a47121815f6f664f2a825af7a7a Mon Sep 17 00:00:00 2001 From: Mohamed Metwalli <mohamed.metwalli@sap.com> Date: Wed, 23 Jun 2021 11:04:15 +0200 Subject: [PATCH] Fix Qr Code flickering (#3526) Co-authored-by: I502720 <axel.herbstreith@sap.com> Co-authored-by: BMItter <Berndus@gmx.de> --- .../person/core/PersonCertificatesProvider.kt | 2 +- .../person/ui/details/PersonDetailsViewModel.kt | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) 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 6487c5303..c07e9fc33 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 @@ -56,7 +56,7 @@ class PersonCertificatesProvider @Inject constructor( * After calling this [personCertificates] will emit new values. * Setting it to null deletes it. */ - suspend fun setCurrentCwaUser(personIdentifier: CertificatePersonIdentifier?) { + fun setCurrentCwaUser(personIdentifier: CertificatePersonIdentifier?) { Timber.d("setCurrentCwaUser(personIdentifier=%s)", personIdentifier) personCertificatesSettings.currentCwaUser.update { personIdentifier } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt index 26157fe83..484a22e52 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt @@ -55,9 +55,15 @@ class PersonDetailsViewModel @AssistedInject constructor( events.postValue(Back) } + private val qrcodeCache = mutableMapOf<String, Bitmap?>() + private val qrCodeFlow: Flow<Bitmap?> = personCertificatesFlow.transform { - emit(null) - emit(qrCodeGenerator.createQrCode(it.highestPriorityCertificate.qrCode, margin = 0)) + val input = it.highestPriorityCertificate.qrCode + emit(qrcodeCache[input]) // Initial state + + val qrcode = qrcodeCache[input] ?: qrCodeGenerator.createQrCode(input, margin = 0) + qrcodeCache[input] = qrcode + emit(qrcode) } val uiState: LiveData<List<CertificateItem>> = combine( -- GitLab