Skip to content

Commit

Permalink
Fixed the state when view holder is recycled (#1819)
Browse files Browse the repository at this point in the history
  • Loading branch information
aditya-07 committed Jan 23, 2023
1 parent 6dbb614 commit 66290ca
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,14 @@ internal object QuestionnaireItemSliderViewHolderFactory :
}

with(slider) {
clearOnChangeListeners()
valueFrom = minValue
valueTo = maxValue
stepSize =
(questionnaireItemViewItem.questionnaireItem?.sliderStepValue
(questionnaireItemViewItem.questionnaireItem.sliderStepValue
?: SLIDER_DEFAULT_STEP_SIZE)
.toFloat()
value = answer?.valueIntegerType?.value?.toFloat() ?: slider.valueFrom
value = answer?.valueIntegerType?.value?.toFloat() ?: valueFrom

addOnChangeListener { _, newValue, _ ->
// Responds to when slider's value is changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,4 +327,57 @@ class QuestionnaireItemSliderViewHolderFactoryTest {

assertThat(viewHolder.itemView.findViewById<Slider>(R.id.slider).isEnabled).isFalse()
}

@Test
fun `bind multiple times with different QuestionnaireItemViewItem should show proper slider value`() {
viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
addAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = IntegerType(10)
}
)
},
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<Slider>(R.id.slider).value).isEqualTo(10)

viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent(),
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
addAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = IntegerType(12)
}
)
},
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<Slider>(R.id.slider).value).isEqualTo(12)

viewHolder.bind(
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent().apply {
addExtension().apply {
url = "http:https://hl7.org/fhir/StructureDefinition/minValue"
setValue(IntegerType("50"))
}
},
QuestionnaireResponse.QuestionnaireResponseItemComponent(),
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)
)

assertThat(viewHolder.itemView.findViewById<Slider>(R.id.slider).value).isEqualTo(50)
}
}

0 comments on commit 66290ca

Please sign in to comment.