From 8a0423393cd6ef86958678ca4234c105aa28a9e2 Mon Sep 17 00:00:00 2001
From: Oliver Zimmerman <oezimmerman@gmail.com>
Date: Fri, 27 Nov 2020 10:35:49 +0000
Subject: [PATCH] Added Setter for TestResultSection to set details - included
 formatting functions.

---
 .../SubmissionTestResultFragment.kt           |  3 +
 .../ui/view/TestResultSection.kt              | 56 ++++++++++++++++++-
 .../layout/include_submission_test_result.xml |  5 +-
 3 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
index 278344809..598db909a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
@@ -23,6 +23,8 @@ import de.rki.coronawarnapp.util.ui.viewBindingLazy
 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
 import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
 import kotlinx.coroutines.launch
+import org.joda.time.DateTime
+import java.util.Date
 import javax.inject.Inject
 
 class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_result),
@@ -79,6 +81,7 @@ class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_
 
         viewModel.uiState.observe2(this) {
             binding.uiState = it
+            binding.submissionTestResultContent.submissionTestResultSection.setTestResultSection(binding.uiState)
         }
 
         // registers callback when the os level back is pressed
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSection.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSection.kt
index c3cd07ace..e77919669 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSection.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSection.kt
@@ -1,13 +1,21 @@
 package de.rki.coronawarnapp.ui.view
 
 import android.content.Context
+import android.graphics.drawable.Drawable
+import android.text.Spannable
 import android.text.SpannableString
 import android.util.AttributeSet
 import androidx.appcompat.content.res.AppCompatResources.getDrawable
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.content.withStyledAttributes
+import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState
+import de.rki.coronawarnapp.util.DeviceUIState
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUIFormat
+import de.rki.coronawarnapp.util.formatter.formatTestResult
 import kotlinx.android.synthetic.main.view_test_result_section.view.*
+import java.util.Date
 
 /**
  * The [TestResultSection] Displays the appropriate test result.
@@ -25,7 +33,7 @@ constructor(
             test_result_section_headline.text =
                 getText(R.styleable.TestResultSection_test_result_section_headline)
             test_result_section_content.text =
-                SpannableString(getText(R.styleable.TestResultSection_test_result_section_content))
+                getText(R.styleable.TestResultSection_test_result_section_content)
             test_result_section_registered_at_text.text =
                 getText(R.styleable.TestResultSection_test_result_section_registered_at_text)
             val resultIconId = getResourceId(R.styleable.TestResultSection_test_result_section_status_icon, 0)
@@ -35,4 +43,50 @@ constructor(
             }
         }
     }
+
+    fun setTestResultSection(uiState: TestResultUIState?){
+        val deviceUIState = uiState?.deviceUiState
+        val registeredAt = uiState?.testResultReceivedDate
+
+        test_result_section_registered_at_text.text = formatTestResultRegisteredAtText(registeredAt)
+        val testResultIcon = formatTestStatusIcon(deviceUIState)
+        test_result_section_status_icon.setImageDrawable(testResultIcon)
+        test_result_section_content.text = formatTestResultSectionContent(deviceUIState)
+    }
+
+    private fun formatTestStatusIcon(uiState: DeviceUIState?): Drawable? {
+        return when (uiState) {
+            DeviceUIState.PAIRED_NO_RESULT ->
+                context.getDrawable(R.drawable.ic_test_result_illustration_pending)
+            DeviceUIState.PAIRED_POSITIVE_TELETAN,
+            DeviceUIState.PAIRED_POSITIVE ->
+                context.getDrawable(R.drawable.ic_test_result_illustration_positive)
+            DeviceUIState.PAIRED_NEGATIVE ->
+                context.getDrawable(R.drawable.ic_test_result_illustration_negative)
+            DeviceUIState.PAIRED_ERROR,
+            DeviceUIState.PAIRED_REDEEMED ->
+                context.getDrawable(R.drawable.ic_test_result_illustration_invalid)
+            else -> context.getDrawable(R.drawable.ic_test_result_illustration_invalid)
+        }
+    }
+
+    private fun formatTestResultRegisteredAtText(registeredAt: Date?): String {
+        return context.getString(R.string.test_result_card_registered_at_text)
+            .format(registeredAt?.toUIFormat(context))
+    }
+
+    private fun formatTestResultSectionContent(uiState: DeviceUIState?): Spannable {
+        return when (uiState) {
+            DeviceUIState.PAIRED_NO_RESULT ->
+                SpannableString(context.getString(R.string.test_result_card_status_pending))
+            DeviceUIState.PAIRED_ERROR,
+            DeviceUIState.PAIRED_REDEEMED ->
+                SpannableString(context.getString(R.string.test_result_card_status_invalid))
+
+            DeviceUIState.PAIRED_POSITIVE,
+            DeviceUIState.PAIRED_POSITIVE_TELETAN,
+            DeviceUIState.PAIRED_NEGATIVE -> formatTestResult(uiState)
+            else -> SpannableString("")
+        }
+    }
 }
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
index 3ec9c5349..56e1778ab 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
@@ -26,9 +26,6 @@
                 android:focusable="true"
                 android:importantForAccessibility="yes"
                 app:test_result_section_headline="@string/test_result_card_headline"
-                app:test_result_section_content="@{FormatterSubmissionHelper.formatTestResultCardContent(uiState.deviceUiState)}"
-                app:test_result_section_status_icon="@{FormatterSubmissionHelper.formatTestStatusIcon(uiState.deviceUiState)}"
-                app:test_result_section_registered_at_text="@{FormatterSubmissionHelper.formatTestResultRegisteredAtText(uiState.testResultReceivedDate)}"
                 app:layout_constraintEnd_toEndOf="@+id/guideline_card_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
                 app:layout_constraintTop_toTopOf="parent"/>
@@ -43,7 +40,7 @@
                 android:text="@string/submission_test_result_subtitle"
                 app:layout_constraintEnd_toEndOf="@+id/guideline_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/submission_test_result_card" />
+                app:layout_constraintTop_toBottomOf="@+id/submission_test_result_section" />
 
             <include
                 android:id="@+id/submission_test_result_pending_steps"
-- 
GitLab