Skip to content
Snippets Groups Projects
Commit 3c08e38c authored by Oliver Zimmerman's avatar Oliver Zimmerman
Browse files

Created Custom View, adjusted layout to implement custom view, created required declared stylables.

parent 8eb74d37
No related branches found
No related tags found
No related merge requests found
...@@ -149,7 +149,7 @@ class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_ ...@@ -149,7 +149,7 @@ class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_
private fun setButtonOnClickListener() { private fun setButtonOnClickListener() {
binding.submissionTestResultButtonPendingRefresh.setOnClickListener { binding.submissionTestResultButtonPendingRefresh.setOnClickListener {
SubmissionRepository.refreshDeviceUIState() SubmissionRepository.refreshDeviceUIState()
binding.submissionTestResultContent.submissionTestResultCard.testResultCard binding.submissionTestResultContent.submissionTestResultCard
.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) .sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
} }
......
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)
}
}
package de.rki.coronawarnapp.ui.view
import android.content.Context
import android.text.SpannableString
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.content.res.AppCompatResources.getDrawable
import androidx.constraintlayout.widget.ConstraintLayout
import de.rki.coronawarnapp.R
import kotlinx.android.synthetic.main.view_test_result_card.view.*
/**
* The [TestResultCard] Displays the appropriate test result.
*/
open class TestResultCard @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
init {
init(attrs)
}
private fun init(attrs: AttributeSet?) {
View.inflate(context, R.layout.view_test_result_card, this)
val testResultCard = context.obtainStyledAttributes(attrs, R.styleable.TestResultCard)
try {
val headlineText = testResultCard.getString(R.styleable.TestResultCard_test_result_card_headline)
val contentText= SpannableString(testResultCard.getString(R.styleable.TestResultCard_test_result_card_content))
val registeredAtText = testResultCard.getString(R.styleable.TestResultCard_test_result_card_registered_at_text)
val resultIconId = testResultCard.getResourceId(R.styleable.TestResultCard_test_result_card_status_icon, 0)
if (resultIconId != 0) {
val drawable = getDrawable(context, resultIconId)
test_result_card_status_icon.setImageDrawable(drawable)
}
test_result_card_headline.text = headlineText
test_result_card_content.text = contentText
test_result_card_registered_at_text.text = registeredAtText
} finally {
testResultCard.recycle()
}
}
}
...@@ -3,9 +3,7 @@ ...@@ -3,9 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" /> <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
<variable <variable
name="uiState" name="uiState"
type="de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState" /> type="de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState" />
...@@ -20,19 +18,20 @@ ...@@ -20,19 +18,20 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<include <de.rki.coronawarnapp.ui.view.TestResultCard
android:id="@+id/submission_test_result_card" android:id="@+id/submission_test_result_card"
layout="@layout/include_test_result_card"
android:layout_width="@dimen/match_constraint" android:layout_width="@dimen/match_constraint"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_small" android:layout_marginTop="@dimen/spacing_small"
android:focusable="true" android:focusable="true"
android:importantForAccessibility="yes" android:importantForAccessibility="yes"
app:deviceUIState="@{uiState.deviceUiState}" app:test_result_card_headline="@string/test_result_card_headline"
app:test_result_card_content="@{FormatterSubmissionHelper.formatTestResultCardContent(uiState.deviceUiState)}"
app:test_result_card_status_icon="@{FormatterSubmissionHelper.formatTestStatusIcon(uiState.deviceUiState)}"
app:test_result_card_registered_at_text="@{FormatterSubmissionHelper.formatTestResultRegisteredAtText(uiState.testResultReceivedDate)}"
app:layout_constraintEnd_toEndOf="@+id/guideline_card_end" app:layout_constraintEnd_toEndOf="@+id/guideline_card_end"
app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"/>
app:registerDate="@{uiState.testResultReceivedDate}" />
<TextView <TextView
android:id="@+id/submission_test_result_subtitle" android:id="@+id/submission_test_result_subtitle"
......
...@@ -4,9 +4,7 @@ ...@@ -4,9 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<data> <data>
<import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" /> <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
<variable <variable
name="registerDate" name="registerDate"
type="java.util.Date" /> type="java.util.Date" />
......
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/test_result_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/card_dark"
android:focusable="true"
android:padding="@dimen/card_padding">
<TextView
android:id="@+id/test_result_card_headline"
style="@style/body2"
android:accessibilityHeading="true"
android:layout_width="@dimen/match_constraint"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintEnd_toStartOf="@id/test_result_card_status_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Ihr Befund"/>
<TextView
android:id="@+id/test_result_card_content"
style="@style/headline5"
android:layout_width="@dimen/match_constraint"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_small"
android:layout_marginBottom="@dimen/spacing_normal"
app:layout_constraintBottom_toTopOf="@id/test_result_card_registered_at_text"
app:layout_constraintEnd_toStartOf="@id/test_result_card_status_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/test_result_card_headline"
tools:text="SARS-CoV-2 Negativ" />
<ImageView
android:id="@+id/test_result_card_status_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:importantForAccessibility="no"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_test_result_illustration_negative" />
<TextView
android:id="@+id/test_result_card_registered_at_text"
style="@style/body2"
android:layout_width="@dimen/match_constraint"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_normal"
android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/test_result_card_status_icon"
app:layout_constraintStart_toStartOf="parent"
tools:text="@string/test_result_card_registered_at_text" />
</androidx.constraintlayout.widget.ConstraintLayout>
</merge>
\ No newline at end of file
...@@ -12,13 +12,17 @@ ...@@ -12,13 +12,17 @@
<attr name="step_entry_icon" format="integer" /> <attr name="step_entry_icon" format="integer" />
<attr name="step_entry_final" format="boolean" /> <attr name="step_entry_final" format="boolean" />
</declare-styleable> </declare-styleable>
<declare-styleable name="SimpleStepEntry"> <declare-styleable name="SimpleStepEntry">
<attr name="simple_step_entry_title" format="string" /> <attr name="simple_step_entry_title" format="string" />
<attr name="simple_step_entry_text" format="string" /> <attr name="simple_step_entry_text" format="string" />
</declare-styleable> </declare-styleable>
<declare-styleable name="BulletPointList"> <declare-styleable name="BulletPointList">
<attr name="entries" format="reference" /> <attr name="entries" format="reference" />
</declare-styleable> </declare-styleable>
<declare-styleable name="TestResultCard">
<attr name="test_result_card_headline" format="string" />
<attr name="test_result_card_content" format="string" />
<attr name="test_result_card_status_icon" format="reference" />
<attr name="test_result_card_registered_at_text" format="string" />
</declare-styleable>
</resources> </resources>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment