diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResult.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResult.kt new file mode 100644 index 0000000000000000000000000000000000000000..2e5fddde8240297e34d433432909351b3b477156 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResult.kt @@ -0,0 +1,53 @@ +package de.rki.coronawarnapp.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.view.ViewGroup +import android.widget.ScrollView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.withStyledAttributes +import de.rki.coronawarnapp.R +import kotlinx.android.synthetic.main.view_step_entry.view.step_entry_icon +import kotlinx.android.synthetic.main.view_step_entry.view.step_entry_line + +/** + * The [TestResult] Displays the appropriate test result. + */ +open class TestResult @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ScrollView(context, attrs, defStyleAttr) { + + val body: ConstraintLayout? + + init { + inflate(context, R.layout.view_step_entry, this) + + body = findViewById(R.id.step_entry_wrapper_children) + + context.withStyledAttributes(attrs, R.styleable.StepEntry) { + val icon = getDrawable(R.styleable.StepEntry_step_entry_icon) + step_entry_icon.setImageDrawable(icon) + + val isFinal = getBoolean(R.styleable.StepEntry_step_entry_final, false) + step_entry_line.visibility = if (isFinal) { + View.INVISIBLE + } else { + View.VISIBLE + } + } + } + + override fun addView( + child: View?, + index: Int, + params: ViewGroup.LayoutParams? + ) { + if (body == null) + super.addView(child, index, params) + else + body.addView(child, index, params) + } +} diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml new file mode 100644 index 0000000000000000000000000000000000000000..ee0a184d4625380fd510031f549af97ba29de376 --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" /> + + <variable + name="uiState" + type="de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState" /> + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/submission_test_result_container" + android:contentDescription="@string/submission_test_result_headline" + android:accessibilityLiveRegion="assertive" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <include + android:id="@+id/submission_test_result_consent_given_header" + layout="@layout/include_header" + android:layout_width="@dimen/match_constraint" + android:layout_height="wrap_content" + app:icon="@{@drawable/ic_close}" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:title="@{@string/submission_test_result_headline}" /> + + <ProgressBar + android:id="@+id/submission_test_result_spinner" + style="?android:attr/progressBarStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:visibility="@{FormatterSubmissionHelper.formatTestResultSpinnerVisible(uiState.apiRequestState)}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <include + android:id="@+id/submission_test_result_consent_given_content" + layout="@layout/include_submission_test_result" + android:accessibilityLiveRegion="assertive" + android:importantForAccessibility="yes" + android:layout_width="@dimen/match_constraint" + android:layout_height="@dimen/match_constraint" + android:layout_marginBottom="@dimen/button_padding_top_bottom" + android:visibility="@{FormatterSubmissionHelper.formatTestResultVisible(uiState.apiRequestState)}" + app:layout_constraintBottom_toTopOf="@+id/include_submission_test_result_consent_given_buttons" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/submission_test_result_consent_given_header" + app:uiState="@{uiState}" /> + + <androidx.constraintlayout.widget.Barrier + android:id="@+id/include_submission_test_result_consent_given_buttons" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:barrierAllowsGoneWidgets="false" + app:barrierDirection="top" + app:constraint_referenced_ids="submission_test_result_button_consent_given_continue" /> + + <Button + android:id="@+id/submission_test_result_button_consent_given_continue" + style="@style/buttonPrimary" + android:layout_width="@dimen/match_constraint" + android:layout_height="wrap_content" + android:text="@string/submission_test_result_positive_continue_button_with_symptoms" + android:visibility="@{FormatterSubmissionHelper.formatTestResultPositiveStepsVisible(uiState.deviceUiState)}" + app:layout_constraintBottom_toTopOf="@+id/submission_test_result_button__consent_given_continue_without_symptoms" + app:layout_constraintEnd_toStartOf="@+id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" + app:layout_constraintTop_toBottomOf="@+id/guideline_action_large" /> + + <Button + android:id="@+id/submission_test_result_button_consent_given_continue_without_symptoms" + style="@style/buttonLight" + android:layout_width="@dimen/match_constraint" + android:layout_height="wrap_content" + android:text="@string/submission_test_result_positive_continue_button_wo_symptoms" + android:visibility="@{FormatterSubmissionHelper.formatTestResultPositiveStepsVisible(uiState.deviceUiState)}" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/guideline_end" + app:layout_constraintStart_toStartOf="@id/guideline_start" + app:layout_constraintTop_toBottomOf="@+id/submission_test_result_button_consent_given_continue" /> + + <include layout="@layout/merge_guidelines_side" /> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guideline_action_large" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_end="@dimen/guideline_action_large" /> + + <androidx.constraintlayout.widget.Guideline + android:id="@+id/guideline_action" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_end="@dimen/guideline_action" /> + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file