From 73eac11643d02068b9a136c34b3192f538a23c1a Mon Sep 17 00:00:00 2001 From: BMItter <Berndus@gmx.de> Date: Wed, 2 Jun 2021 08:10:12 +0200 Subject: [PATCH] DGC related Testresult-UI dynamics (EXPOSUREAPP-7427) (#3340) * preparation * integrated StepEntry - wip * icon and vertical line for result screen * Set test cert peding info * fix null pointer * Better code * detekt clean * added night icon * adjusted dark icons Co-authored-by: Juraj Kusnier <jurajkusnier@users.noreply.github.com> --- .../SubmissionTestResultPendingFragment.kt | 6 +++ .../SubmissionTestResultPendingViewModel.kt | 16 +++++++ .../coronawarnapp/ui/view/SimpleStepEntry.kt | 19 +++++--- .../ic_result_pending_certificate_info.xml | 43 +++++++++++++++++++ .../ic_result_pending_certificate_info.xml | 42 ++++++++++++++++++ ...ragment_submission_test_result_pending.xml | 18 +++++++- .../src/main/res/values-de/strings.xml | 9 ++++ .../src/main/res/values/strings.xml | 9 ++++ 8 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 Corona-Warn-App/src/main/res/drawable-night/ic_result_pending_certificate_info.xml create mode 100644 Corona-Warn-App/src/main/res/drawable/ic_result_pending_certificate_info.xml diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingFragment.kt index c855fe1ad..709851dc7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingFragment.kt @@ -92,6 +92,12 @@ class SubmissionTestResultPendingFragment : Fragment(R.layout.fragment_submissio DialogHelper.showDialog(dialog) } + viewModel.testCertResultInfo.observe2(this) { + binding.testResultPendingStepsCertificateInfo.apply { + setEntryText(it.get(context)) + } + } + viewModel.routeToScreen.observe2(this) { it?.let { doNavigate(it) } ?: navigateToMainScreen() } viewModel.errorEvent.observe2(this) { it.toErrorDialogBuilder(requireContext()).show() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt index 0dca61447..ada54dddd 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/pending/SubmissionTestResultPendingViewModel.kt @@ -6,6 +6,7 @@ import androidx.navigation.NavDirections import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import de.rki.coronawarnapp.R import de.rki.coronawarnapp.coronatest.server.CoronaTestResult import de.rki.coronawarnapp.coronatest.type.CoronaTest import de.rki.coronawarnapp.submission.SubmissionRepository @@ -13,7 +14,9 @@ import de.rki.coronawarnapp.submission.toDeviceUIState import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState import de.rki.coronawarnapp.util.DeviceUIState import de.rki.coronawarnapp.util.coroutine.DispatcherProvider +import de.rki.coronawarnapp.util.ui.LazyString import de.rki.coronawarnapp.util.ui.SingleLiveEvent +import de.rki.coronawarnapp.util.ui.toResolvingString import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.flow.filter @@ -96,6 +99,19 @@ class SubmissionTestResultPendingViewModel @AssistedInject constructor( } .asLiveData(context = dispatcherProvider.Default) + val testCertResultInfo: LiveData<LazyString> = testResultFlow + .map { + when (it.coronaTest.type) { + CoronaTest.Type.RAPID_ANTIGEN -> + R.string.submission_test_result_pending_steps_test_certificate_not_supported_body + CoronaTest.Type.PCR -> when (it.coronaTest.isAdvancedConsentGiven) { + true -> R.string.submission_test_result_pending_steps_test_certificate_not_available_yet_body + false -> R.string.submission_test_result_pending_steps_test_certificate_not_desired_by_user_body + } + }.toResolvingString() + } + .asLiveData(context = dispatcherProvider.Default) + val cwaWebExceptionLiveData = submissionRepository.testForType(type = testType) .filterNotNull() .filter { it.lastError != null } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt index eb168f41a..25f2b9fad 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt @@ -16,16 +16,25 @@ class SimpleStepEntry @JvmOverloads constructor( defStyleAttr: Int = 0 ) : StepEntry(context, attrs, defStyleAttr) { + private lateinit var entryTitle: TextView + private lateinit var entryText: TextView + init { inflate(context, R.layout.include_step_entry_simple_body, this) context.withStyledAttributes(attrs, R.styleable.SimpleStepEntry) { - findViewById<TextView>(R.id.simple_step_entry_title).text = - getText(R.styleable.SimpleStepEntry_simple_step_entry_title) + entryTitle = findViewById(R.id.simple_step_entry_title) + setEntryTitle(getText(R.styleable.SimpleStepEntry_simple_step_entry_title)) - val body = findViewById<TextView>(R.id.simple_step_entry_body) - body.text = getText(R.styleable.SimpleStepEntry_simple_step_entry_text) - if (body.text.isEmpty()) body.visibility = View.GONE + entryText = findViewById(R.id.simple_step_entry_body) + setEntryText(getText(R.styleable.SimpleStepEntry_simple_step_entry_text)) } } + + fun setEntryTitle(newText: CharSequence?) = entryTitle.apply { text = newText } + + fun setEntryText(newText: CharSequence?) = entryText.apply { + text = newText + visibility = if (text.isEmpty()) View.GONE else View.VISIBLE + } } diff --git a/Corona-Warn-App/src/main/res/drawable-night/ic_result_pending_certificate_info.xml b/Corona-Warn-App/src/main/res/drawable-night/ic_result_pending_certificate_info.xml new file mode 100644 index 000000000..0832a15b2 --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable-night/ic_result_pending_certificate_info.xml @@ -0,0 +1,43 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="40dp" + android:height="40dp" + android:autoMirrored="true" + android:viewportWidth="32" + android:viewportHeight="32"> + <path + android:fillColor="#434445" + android:pathData="M0,15.6341a16,15.6341 0,1 0,32 0a16,15.6341 0,1 0,-32 0z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M8.5,15.3459H15.1667V8.6792H8.5V15.3459ZM10.1667,10.3459H13.5V13.6792H10.1667V10.3459Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M8.5,23.6791H15.1667V17.0125H8.5V23.6791ZM10.1667,18.6791H13.5V22.0125H10.1667V18.6791Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M16.8335,8.6792V15.3459H23.5002V8.6792H16.8335ZM21.8335,13.6792H18.5002V10.3459H21.8335V13.6792Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M23.5002,22.0125H21.8335V23.6791H23.5002V22.0125Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M18.5002,17.0125H16.8335V18.6791H18.5002V17.0125Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M20.1667,18.6792H18.5V20.3459H20.1667V18.6792Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M18.5002,20.3459H16.8335V22.0126H18.5002V20.3459Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M20.1667,22.0125H18.5V23.6791H20.1667V22.0125Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M21.8332,20.3459H20.1665V22.0126H21.8332V20.3459Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M21.8332,17.0125H20.1665V18.6791H21.8332V17.0125Z" /> + <path + android:fillColor="#83D2F2" + android:pathData="M23.5002,18.6792H21.8335V20.3459H23.5002V18.6792Z" /> +</vector> diff --git a/Corona-Warn-App/src/main/res/drawable/ic_result_pending_certificate_info.xml b/Corona-Warn-App/src/main/res/drawable/ic_result_pending_certificate_info.xml new file mode 100644 index 000000000..b5412d06e --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/ic_result_pending_certificate_info.xml @@ -0,0 +1,42 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="40dp" + android:height="40dp" + android:viewportWidth="40" + android:viewportHeight="40"> + <path + android:pathData="M20,20m-20,0a20,20 0,1 1,40 0a20,20 0,1 1,-40 0" + android:fillColor="#F5F5F5"/> + <path + android:pathData="M10.0005,18.8901H18.8897V10.0008H10.0005V18.8901ZM12.2228,12.2231H16.6674V16.6678H12.2228V12.2231Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M10,29.9983H18.8892V21.1091H10V29.9983ZM12.2223,23.3314H16.6669V27.776H12.2223V23.3314Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M21.111,10V18.8892H30.0002V10H21.111ZM27.7779,16.6669H23.3333V12.2223H27.7779V16.6669Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M30.0006,27.7773H27.7783V29.9997H30.0006V27.7773Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M23.3333,21.1091H21.111V23.3314H23.3333V21.1091Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M25.5553,23.332H23.333V25.5543H25.5553V23.332Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M23.3333,25.5549H21.111V27.7772H23.3333V25.5549Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M25.5553,27.7773H23.333V29.9997H25.5553V27.7773Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M27.7791,25.5549H25.5568V27.7772H27.7791V25.5549Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M27.7791,21.1091H25.5568V23.3314H27.7791V21.1091Z" + android:fillColor="#B2B3B3"/> + <path + android:pathData="M30.0006,23.332H27.7783V25.5543H30.0006V23.332Z" + android:fillColor="#B2B3B3"/> +</vector> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_pending.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_pending.xml index 5cfaa3a49..a849728af 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_pending.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_pending.xml @@ -139,10 +139,24 @@ app:layout_constraintTop_toBottomOf="@+id/test_result_pending_steps_waiting_antigen_result" app:simple_step_entry_text="@string/submission_test_result_pending_steps_contact_diary_body" app:simple_step_entry_title="@string/submission_test_result_pending_steps_contact_diary_heading" - app:step_entry_final="true" + app:step_entry_final="false" app:step_entry_icon="@drawable/ic_result_pending_contact_diary" tools:visibility="visible"/> + <de.rki.coronawarnapp.ui.view.SimpleStepEntry + android:id="@+id/test_result_pending_steps_certificate_info" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="@id/submission_test_result_subtitle" + app:layout_constraintStart_toStartOf="@id/submission_test_result_subtitle" + app:layout_constraintTop_toBottomOf="@+id/test_result_pending_steps_contact_diary_result" + app:simple_step_entry_text="@string/submission_test_result_pending_steps_test_certificate_not_supported_body" + app:simple_step_entry_title="@string/submission_test_result_pending_steps_test_certificate_heading" + app:step_entry_final="true" + android:visibility="visible" + app:step_entry_icon="@drawable/ic_result_pending_certificate_info" + tools:visibility="visible"/> + <de.rki.coronawarnapp.ui.submission.consentstatus.ConsentStatusView android:id="@+id/consent_status" android:layout_width="0dp" @@ -150,7 +164,7 @@ android:focusable="true" app:layout_constraintEnd_toEndOf="@id/submission_test_result_subtitle" app:layout_constraintStart_toStartOf="@id/submission_test_result_subtitle" - app:layout_constraintTop_toBottomOf="@id/test_result_pending_steps_contact_diary_result" /> + app:layout_constraintTop_toBottomOf="@id/test_result_pending_steps_certificate_info" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml index 6cbc89af5..ac4eada70 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -1092,6 +1092,15 @@ <!-- YTXT: Body text for next steps section of waiting test result page --> <string name="submission_test_result_pending_steps_contact_diary_body">"Sobald Ihr Testergebnis vorliegt, wird es Ihnen in der App angezeigt."</string> + <!-- XHED: Page headline for test result certifcate info title --> + <string name="submission_test_result_pending_steps_test_certificate_heading">"Ihr Testzertifikat"</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not supported, RAT Test --> + <string name="submission_test_result_pending_steps_test_certificate_not_supported_body">"Es liegt kein Testzertifikat vor, da diese Teststelle die Ausstellung von Testzertifikaten nicht unterstützt."</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not available yet, PCR Test consent given --> + <string name="submission_test_result_pending_steps_test_certificate_not_available_yet_body">"Ihr Testzertifikat liegt noch nicht vor. Sobald es vorliegt, wird es Ihnen in der App angezeigt."</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not desired by the user, PCR Test no consent given --> + <string name="submission_test_result_pending_steps_test_certificate_not_desired_by_user_body">"Auf Ihren Wunsch hin wurde kein Testzertifikat ausgestellt."</string> + <!-- XBUT: test result pending : refresh button --> <string name="submission_test_result_pending_refresh_button">"Aktualisieren"</string> <!-- XBUT: test result pending : remove the test button --> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index c473c765b..e82ee117a 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -1092,6 +1092,15 @@ <!-- YTXT: Body text for next steps section of waiting test result page --> <string name="submission_test_result_pending_steps_contact_diary_body">"As soon as your test result becomes available, it will be displayed in the app."</string> + <!-- XHED: Page headline for test result certifcate info title --> + <string name="submission_test_result_pending_steps_test_certificate_heading">"Ihr Testzertifikat"</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not supported, RAT Test --> + <string name="submission_test_result_pending_steps_test_certificate_not_supported_body">"Es liegt kein Testzertifikat vor, da diese Teststelle die Ausstellung von Testzertifikaten nicht unterstützt."</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not available yet, PCR Test consent given --> + <string name="submission_test_result_pending_steps_test_certificate_not_available_yet_body">"Ihr Testzertifikat liegt noch nicht vor. Sobald es vorliegt, wird es Ihnen in der App angezeigt."</string> + <!-- YTXT: Body text for test result certifcate info, if certifcate is not desired by the user, PCR Test no consent given --> + <string name="submission_test_result_pending_steps_test_certificate_not_desired_by_user_body">"Auf Ihren Wunsch hin wurde kein Testzertifikat ausgestellt."</string> + <!-- XBUT: test result pending : refresh button --> <string name="submission_test_result_pending_refresh_button">"Update"</string> <!-- XBUT: test result pending : remove the test button --> -- GitLab