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