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