Skip to content

Commit 16c5180

Browse files
authored
Localize text for QuestionnaireValidationErrorMessageDialog items (#2888)
* Localize text forQuestionnaireValidationErrorMessageDialog * Add prefix as text that can be used to associate failing item * Replace \n with <br> for html spannable text * Use takeIfNotBlank as a private function in QuestionnaireValidationErrorMessageDialogFragment * Replace \n with <br? locally within QuestionnaireValidationErrorMessageDialogFragment * Revert changes in MoreQuestionnaireItemComponents
1 parent fa8ce8f commit 16c5180

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireValidationErrorMessageDialogFragment.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.google.android.fhir.datacapture
1818

1919
import android.app.Dialog
2020
import android.os.Bundle
21+
import android.text.Spanned
2122
import android.view.LayoutInflater
2223
import android.view.View
2324
import android.widget.TextView
@@ -32,6 +33,8 @@ import androidx.lifecycle.ViewModel
3233
import androidx.lifecycle.ViewModelProvider
3334
import com.google.android.fhir.datacapture.extensions.flattened
3435
import com.google.android.fhir.datacapture.extensions.localizedFlyoverSpanned
36+
import com.google.android.fhir.datacapture.extensions.localizedPrefixSpanned
37+
import com.google.android.fhir.datacapture.extensions.localizedTextSpanned
3538
import com.google.android.fhir.datacapture.extensions.toSpanned
3639
import com.google.android.fhir.datacapture.validation.Invalid
3740
import com.google.android.fhir.datacapture.validation.ValidationResult
@@ -93,7 +96,7 @@ internal class QuestionnaireValidationErrorMessageDialogFragment(
9396
text =
9497
viewModel
9598
.getItemsTextWithValidationErrors()
96-
.joinToString(separator = "\n") {
99+
.joinToString(separator = "<br>") {
97100
context.getString(R.string.questionnaire_validation_error_item_text_with_bullet, it)
98101
}
99102
.toSpanned()
@@ -129,14 +132,22 @@ internal class QuestionnaireValidationErrorViewModel : ViewModel() {
129132
}
130133

131134
/** @return Texts associated with the failing [Questionnaire.QuestionnaireItemComponent]s. */
132-
fun getItemsTextWithValidationErrors(): List<String> {
135+
fun getItemsTextWithValidationErrors(): List<Spanned> {
133136
val invalidFields =
134137
validation?.filterValues { it.filterIsInstance<Invalid>().isNotEmpty() } ?: emptyMap()
135138
return questionnaire
136139
?.item
137140
?.flattened()
138141
?.filter { invalidFields.contains(it.linkId) }
139-
?.map { if (it.text.isNullOrEmpty()) it.localizedFlyoverSpanned.toString() else it.text }
142+
?.mapNotNull {
143+
// Use the question text if available, otherwise fall back to the fly-over and then the
144+
// prefix.
145+
it.localizedTextSpanned?.takeIfNotBlank()
146+
?: it.localizedFlyoverSpanned?.takeIfNotBlank()
147+
?: it.localizedPrefixSpanned?.takeIfNotBlank()
148+
}
140149
?: emptyList()
141150
}
151+
152+
private fun Spanned.takeIfNotBlank(): Spanned? = takeIf { it.isNotBlank() }
142153
}

0 commit comments

Comments
 (0)