Skip to content

Commit

Permalink
Hides error textview in the header for textInputLayout views. (#1728)
Browse files Browse the repository at this point in the history
* hides error textview in the header for textinputlayout views.

* Address review comment.

* Update datacapture/src/androidTest/java/com/google/android/fhir/datacapture/views/QuestionnaireItemDialogMultiSelectViewHolderFactoryEspressoTest.kt

Co-authored-by: Santosh Pingle <[email protected]>
Co-authored-by: Jing Tang <[email protected]>
  • Loading branch information
3 people committed Dec 5, 2022
1 parent 5095aba commit c55276d
Show file tree
Hide file tree
Showing 15 changed files with 216 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
Expand All @@ -43,6 +45,7 @@ import com.google.android.fhir.datacapture.validation.NotValidated
import com.google.android.material.textfield.TextInputLayout
import com.google.common.truth.StringSubject
import com.google.common.truth.Truth.assertThat
import org.hamcrest.Matchers.not
import org.hl7.fhir.r4.model.CodeableConcept
import org.hl7.fhir.r4.model.Coding
import org.hl7.fhir.r4.model.Extension
Expand Down Expand Up @@ -348,6 +351,23 @@ class QuestionnaireItemDialogMultiSelectViewHolderFactoryEspressoTest {
onView(withId(R.id.add_another)).check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
}

@Test
fun `shouldHideErrorTextviewInHeader`() {
val questionnaireItem = answerOptions(true, "Coding 1")
questionnaireItem.addExtension(openChoiceType)
val questionnaireItemViewItem =
QuestionnaireItemViewItem(
questionnaireItem,
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)

runOnUI { viewHolder.bind(questionnaireItemViewItem) }

onView(withId(R.id.error_text_at_header)).check(matches(not(isDisplayed())))
}

/** Method to run code snippet on UI/main thread */
private fun runOnUI(action: () -> Unit) {
activityScenarioRule.scenario.onActivity { activity -> action() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,6 @@ internal class QuestionnaireItemHeaderView(context: Context, attrs: AttributeSet
private var hint: TextView = findViewById(R.id.hint)
private var errorTextView: TextView = findViewById(R.id.error_text_at_header)

/**
* Shows error in the header,and widgets could either use this, or use another view (i.e.
* TextInputLayout's error field) to display error.
*/
fun bind(questionnaireItem: Questionnaire.QuestionnaireItemComponent) {
prefix.updateTextAndVisibility(questionnaireItem.localizedPrefixSpanned)
updateQuestionText(question, questionnaireItem)
Expand All @@ -68,6 +64,10 @@ internal class QuestionnaireItemHeaderView(context: Context, attrs: AttributeSet
visibility = getViewGroupVisibility(prefix, question, hint)
}

/**
* Shows an error in the header,and widgets could either use this or use another view (i.e.
* TextInputLayout's error field) to display error.
*/
fun showErrorText(errorText: String? = null, isErrorTextVisible: Boolean = true) {
errorTextView.visibility =
when (isErrorTextVisible) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
app:layout_constraintTop_toBottomOf="@id/helpContainer"
app:layout_constraintStart_toStartOf="parent"
tools:text="Sample error text"
android:visibility="gone"
/>

<com.google.android.material.card.MaterialCardView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,21 @@ class QuestionnaireItemAutoCompleteViewHolderFactoryTest {
.isNull()
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
val questionnaireItem =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -264,6 +265,21 @@ class QuestionnaireItemDatePickerViewHolderFactoryTest {
.isNull()
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -246,6 +247,21 @@ class QuestionnaireItemDateTimePickerViewHolderFactoryTest {
.isNull()
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -50,4 +51,19 @@ class QuestionnaireItemDisplayViewHolderFactoryTest {
assertThat(viewHolder.itemView.findViewById<TextView>(R.id.question).text.toString())
.isEqualTo("Display")
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.AutoCompleteTextView
import android.widget.FrameLayout
import android.widget.TextView
Expand Down Expand Up @@ -268,6 +269,21 @@ class QuestionnaireItemDropDownViewHolderFactoryTest {
.isNull()
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -213,6 +214,21 @@ class QuestionnaireItemEditTextDecimalViewHolderFactoryTest {
.isEqualTo("Minimum value allowed is:2.1")
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -209,6 +210,21 @@ class QuestionnaireItemEditTextIntegerViewHolderFactoryTest {
.isEqualTo("Minimum value allowed is:2")
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -207,6 +208,21 @@ class QuestionnaireItemEditTextMultiLineViewHolderFactoryTest {
.isEqualTo("The minimum number of characters that are permitted in the answer is: 10")
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -208,6 +209,21 @@ class QuestionnaireItemEditTextQuantityViewHolderFactoryTest {
.isNull()
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.android.fhir.datacapture.views

import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import com.google.android.fhir.datacapture.R
Expand Down Expand Up @@ -205,6 +206,21 @@ class QuestionnaireItemEditTextSingleLineViewHolderFactoryTest {
.isEqualTo("The minimum number of characters that are permitted in the answer is: 10")
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}

@Test
fun bind_readOnly_shouldDisableView() {
viewHolder.bind(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.google.android.fhir.datacapture.DisplayItemControlType
import com.google.android.fhir.datacapture.EXTENSION_ITEM_CONTROL_SYSTEM
import com.google.android.fhir.datacapture.EXTENSION_ITEM_CONTROL_URL
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.validation.NotValidated
import com.google.android.fhir.datacapture.validation.Valid
import com.google.android.material.divider.MaterialDivider
import com.google.common.truth.Truth.assertThat
Expand Down Expand Up @@ -288,4 +289,19 @@ class QuestionnaireItemSimpleQuestionAnswerDisplayViewHolderFactoryTest {
assertThat(viewHolder.itemView.findViewById<MaterialDivider>(R.id.text_divider).visibility)
.isEqualTo(View.VISIBLE)
}

@Test
fun `hides error textview in the header`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<TextView>(R.id.error_text_at_header).visibility)
.isEqualTo(View.GONE)
}
}
Loading

0 comments on commit c55276d

Please sign in to comment.