Skip to content

Commit

Permalink
Attachment widget clear preview if no answer (#1828)
Browse files Browse the repository at this point in the history
* Clear preview if no answer

* Put null check before trying to display initial preview

* Add test

* Add delete button assertation

* Rename to displayOrClearInitialPreview

* Re-write comment about clearing preview if answer is null

* Add test

* CI

* Rename tests
  • Loading branch information
FikriMilano authored Feb 2, 2023
1 parent 8d409c1 commit eae8160
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,105 @@ class QuestionnaireItemAttachmentPickerViewHolderFactoryEspressoTest {
.isEqualTo("Document File")
}

@Test
fun doNotShowPreviewIfAnswerDoesNotHaveAttachment() {
val questionnaireItemView =
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent().apply {
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("image/*"))
}
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("application/pdf"))
}
},
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply { addAnswer(null) },
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)

runOnUI { viewHolder.bind(questionnaireItemView) }

assertThat(viewHolder.itemView.findViewById<ImageView>(R.id.photo_preview).visibility)
.isEqualTo(View.GONE)

assertThat(viewHolder.itemView.findViewById<LinearLayout>(R.id.file_preview).visibility)
.isEqualTo(View.GONE)

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

@Test
fun doNotShowPreviewOfPreviousAnswerAttachmentForCurrentAnswerItem() {
val questionnaireItem =
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent().apply {
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("image/*"))
}
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("application/pdf"))
}
},
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
addAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value =
Attachment().apply {
title = "IMG_1.jpeg"
data =
Base64.decode(
"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
Base64.DEFAULT
)
contentType = "image/jpeg"
}
}
)
},
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)

runOnUI { viewHolder.bind(questionnaireItem) }

assertThat(viewHolder.itemView.findViewById<ImageView>(R.id.photo_preview).visibility)
.isEqualTo(View.VISIBLE)

assertThat(viewHolder.itemView.findViewById<Button>(R.id.delete).visibility)
.isEqualTo(View.VISIBLE)

val questionnaireItemWithNullAnswer =
QuestionnaireItemViewItem(
Questionnaire.QuestionnaireItemComponent().apply {
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("image/*"))
}
addExtension().apply {
url = "https://hl7.org/fhir/StructureDefinition/mimeType"
setValue(CodeType("application/pdf"))
}
},
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply { addAnswer(null) },
validationResult = NotValidated,
answersChangedCallback = { _, _, _ -> },
)

runOnUI { viewHolder.bind(questionnaireItemWithNullAnswer) }

assertThat(viewHolder.itemView.findViewById<ImageView>(R.id.photo_preview).visibility)
.isEqualTo(View.GONE)

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

/** Method to run code snippet on UI/main thread */
private fun runOnUI(action: () -> Unit) {
activityScenarioRule.getScenario().onActivity { activity -> action() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ internal object QuestionnaireItemAttachmentViewHolderFactory :
this.questionnaireItemViewItem = questionnaireItemViewItem
val questionnaireItem = questionnaireItemViewItem.questionnaireItem
header.bind(questionnaireItem)
displayInitialPreview()
displayOrClearInitialPreview()
displayTakePhotoButton(questionnaireItem)
displayUploadButton(questionnaireItem)
takePhotoButton.setOnClickListener { view -> onTakePhotoClicked(view, questionnaireItem) }
Expand Down Expand Up @@ -124,8 +124,19 @@ internal object QuestionnaireItemAttachmentViewHolderFactory :
deleteButton.isEnabled = !isReadOnly
}

private fun displayInitialPreview() {
questionnaireItemViewItem.answers.firstOrNull()?.valueAttachment?.let { attachment ->
private fun displayOrClearInitialPreview() {
val answer = questionnaireItemViewItem.answers.firstOrNull()

// Clear preview if there is no answer to prevent showing old previews in views that have
// been recycled.
if (answer == null) {
clearPhotoPreview()
clearFilePreview()
hideDeleteButton()
return
}

answer.valueAttachment?.let { attachment ->
displayPreview(
attachmentType = attachment.contentType.type,
attachmentTitle = attachment.title,
Expand Down

0 comments on commit eae8160

Please sign in to comment.