diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/MedicalHistoryDiagnosisWithTreatment.kt b/app/src/main/java/org/simple/clinic/medicalhistory/MedicalHistoryDiagnosisWithTreatment.kt deleted file mode 100644 index 5a1a75a3dc7..00000000000 --- a/app/src/main/java/org/simple/clinic/medicalhistory/MedicalHistoryDiagnosisWithTreatment.kt +++ /dev/null @@ -1,123 +0,0 @@ -package org.simple.clinic.medicalhistory - -import android.animation.LayoutTransition -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import com.google.android.material.card.MaterialCardView -import org.simple.clinic.databinding.ListMedicalhistoryDiagnosisWithTreatmentBinding - -class MedicalHistoryDiagnosisWithTreatment( - context: Context, - attrs: AttributeSet? -) : MaterialCardView(context, attrs) { - - private var _binding: ListMedicalhistoryDiagnosisWithTreatmentBinding? = null - private val binding get() = _binding!! - - private val diagnosisTextView - get() = binding.diagnosisTextView - - private val diagnosisChipGroup - get() = binding.diagnosisChipGroup - - private val diagnosisYesChip - get() = binding.diagnosisYesChip - - private val diagnosisNoChip - get() = binding.diagnosisNoChip - - private val treatmentQuestion - get() = binding.treatmentQuestion - - private val treatmentTextView - get() = binding.treatmentTextView - - private val treatmentChipGroup - get() = binding.treatmentChipGroup - - private val treatmentYesChip - get() = binding.treatmentYesChip - - private val treatmentNoChip - get() = binding.treatmentNoChip - - init { - val layoutInflater = LayoutInflater.from(context) - _binding = ListMedicalhistoryDiagnosisWithTreatmentBinding.inflate(layoutInflater, this) - layoutTransition = LayoutTransition().apply { - enableTransitionType(LayoutTransition.CHANGING) - setDuration(LayoutTransition.CHANGING, 150) - } - } - - fun showTreatmentQuestion() { - treatmentQuestion.visibility = VISIBLE - } - - fun hideTreatmentQuestion() { - treatmentQuestion.visibility = GONE - } - - fun clearTreatmentChipGroup() { - treatmentChipGroup.clearCheck() - } - - fun renderDiagnosis( - label: Int, - question: MedicalHistoryQuestion, - answer: Answer, - answerChangeListener: (MedicalHistoryQuestion, Answer) -> Unit - ) { - diagnosisChipGroup.setOnCheckedChangeListener(null) - - diagnosisTextView.setText(label) - - updateDiagnosisChipsFromAnswer(answer) - - diagnosisChipGroup.setOnCheckedChangeListener { _, checkedId -> - val checkedAnswer = when (checkedId) { - diagnosisYesChip.id -> Answer.Yes - diagnosisNoChip.id -> Answer.No - else -> Answer.Unanswered - } - answerChangeListener(question, checkedAnswer) - } - } - - private fun updateDiagnosisChipsFromAnswer(answer: Answer) { - diagnosisYesChip.isChecked = answer == Answer.Yes - diagnosisNoChip.isChecked = answer == Answer.No - } - - fun renderTreatmentQuestion( - question: MedicalHistoryQuestion, - answer: Answer, - answerChangeListener: (MedicalHistoryQuestion, Answer) -> Unit - ) { - treatmentChipGroup.setOnCheckedChangeListener(null) - - treatmentTextView.setText(question.questionRes) - - updateTreatmentChipsFromAnswer(answer) - - treatmentChipGroup.setOnCheckedChangeListener { _, checkedId -> - val checkedAnswer = when (checkedId) { - treatmentYesChip.id -> Answer.Yes - treatmentNoChip.id -> Answer.No - else -> Answer.Unanswered - } - answerChangeListener(question, checkedAnswer) - } - } - - private fun updateTreatmentChipsFromAnswer(answer: Answer) { - treatmentYesChip.isChecked = answer == Answer.Yes - treatmentNoChip.isChecked = answer == Answer.No - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - _binding = null - } -} diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryScreen.kt b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryScreen.kt index b320c4306d3..c95abe59eb3 100644 --- a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryScreen.kt +++ b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryScreen.kt @@ -4,8 +4,6 @@ import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View -import android.view.View.GONE -import android.view.View.VISIBLE import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.Arrangement @@ -18,6 +16,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.stringResource import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.jakewharton.rxbinding3.view.clicks import com.spotify.mobius.functions.Consumer @@ -35,7 +34,6 @@ import org.simple.clinic.di.injector import org.simple.clinic.feature.Feature import org.simple.clinic.feature.Features import org.simple.clinic.medicalhistory.Answer -import org.simple.clinic.medicalhistory.MedicalHistoryQuestion import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithDiabetes import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithHypertension import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnDiabetesTreatment @@ -45,6 +43,7 @@ import org.simple.clinic.medicalhistory.SelectDiagnosisErrorDialog import org.simple.clinic.medicalhistory.SelectOngoingDiabetesTreatmentErrorDialog import org.simple.clinic.medicalhistory.SelectOngoingHypertensionTreatmentErrorDialog import org.simple.clinic.medicalhistory.ui.HistoryContainer +import org.simple.clinic.medicalhistory.ui.MedicalHistoryDiagnosisWithTreatment import org.simple.clinic.medicalhistory.ui.TobaccoQuestion import org.simple.clinic.navigation.v2.Router import org.simple.clinic.navigation.v2.ScreenKey @@ -98,15 +97,12 @@ class NewMedicalHistoryScreen : BaseScreen< private val nextButton get() = binding.nextButton - private val hypertensionDiagnosis - get() = binding.hypertensionDiagnosis - - private val diabetesDiagnosis - get() = binding.diabetesDiagnosis - private var showSmokerQuestion by mutableStateOf(false) private var showSmokelessTobaccoQuestion by mutableStateOf(false) private var showDiabetesQuestion by mutableStateOf(false) + private var showHypertensionTreatmentQuestion by mutableStateOf(false) + private var showDiabetesTreatmentQuestion by mutableStateOf(false) + private var showDiabetesDiagnosis by mutableStateOf(false) private var ongoingMedicalHistoryEntry by mutableStateOf(null) private val composeView @@ -175,6 +171,28 @@ class NewMedicalHistoryScreen : BaseScreen< .padding(dimensionResource(R.dimen.spacing_8)), verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_8)) ) { + MedicalHistoryDiagnosisWithTreatment( + diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_hypertension_required), + diagnosisQuestion = DiagnosedWithHypertension, + diagnosisAnswer = ongoingMedicalHistoryEntry?.diagnosedWithHypertension, + treatmentQuestion = IsOnHypertensionTreatment(country.isoCountryCode), + treatmentAnswer = ongoingMedicalHistoryEntry?.isOnHypertensionTreatment, + showTreatmentQuestion = showHypertensionTreatmentQuestion + ) { question, answer -> + hotEvents.onNext(NewMedicalHistoryAnswerToggled(question, answer)) + } + if (showDiabetesDiagnosis) { + MedicalHistoryDiagnosisWithTreatment( + diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_diabetes_required), + diagnosisQuestion = DiagnosedWithDiabetes, + diagnosisAnswer = ongoingMedicalHistoryEntry?.hasDiabetes, + treatmentQuestion = IsOnDiabetesTreatment, + treatmentAnswer = ongoingMedicalHistoryEntry?.isOnDiabetesTreatment, + showTreatmentQuestion = showDiabetesTreatmentQuestion + ) { question, answer -> + hotEvents.onNext(NewMedicalHistoryAnswerToggled(question, answer)) + } + } HistoryContainer( heartAttackAnswer = ongoingMedicalHistoryEntry?.hasHadHeartAttack, strokeAnswer = ongoingMedicalHistoryEntry?.hasHadStroke, @@ -216,11 +234,11 @@ class NewMedicalHistoryScreen : BaseScreen< } override fun showDiabetesDiagnosisView() { - diabetesDiagnosis.visibility = VISIBLE + showDiabetesDiagnosis = true } override fun hideDiabetesDiagnosisView() { - diabetesDiagnosis.visibility = GONE + showDiabetesDiagnosis = false } override fun hideDiabetesHistorySection() { @@ -231,24 +249,6 @@ class NewMedicalHistoryScreen : BaseScreen< showDiabetesQuestion = true } - override fun renderDiagnosisAnswer(question: MedicalHistoryQuestion, answer: Answer) { - val view = when (question) { - DiagnosedWithHypertension -> hypertensionDiagnosis - DiagnosedWithDiabetes -> diabetesDiagnosis - else -> null - } - - val label = when (question) { - DiagnosedWithHypertension -> R.string.medicalhistory_diagnosis_hypertension_required - DiagnosedWithDiabetes -> R.string.medicalhistory_diagnosis_diabetes_required - else -> question.questionRes - } - - view?.renderDiagnosis(label, question, answer) { questionForView, newAnswer -> - hotEvents.onNext(NewMedicalHistoryAnswerToggled(questionForView, newAnswer)) - } - } - override fun showNextButtonProgress() { nextButton.setButtonState(InProgress) } @@ -258,32 +258,19 @@ class NewMedicalHistoryScreen : BaseScreen< } override fun showHypertensionTreatmentQuestion(answer: Answer) { - hypertensionDiagnosis.renderTreatmentQuestion( - question = IsOnHypertensionTreatment(country.isoCountryCode), - answer = answer - ) { questionForView, newAnswer -> - hotEvents.onNext(NewMedicalHistoryAnswerToggled(questionForView, newAnswer)) - } - - hypertensionDiagnosis.showTreatmentQuestion() + showHypertensionTreatmentQuestion = true } override fun hideHypertensionTreatmentQuestion() { - hypertensionDiagnosis.hideTreatmentQuestion() - hypertensionDiagnosis.clearTreatmentChipGroup() + showHypertensionTreatmentQuestion = false } override fun showDiabetesTreatmentQuestion(answer: Answer) { - diabetesDiagnosis.renderTreatmentQuestion(IsOnDiabetesTreatment, answer) { questionForView, newAnswer -> - hotEvents.onNext(NewMedicalHistoryAnswerToggled(questionForView, newAnswer)) - } - - diabetesDiagnosis.showTreatmentQuestion() + showDiabetesTreatmentQuestion = true } override fun hideDiabetesTreatmentQuestion() { - diabetesDiagnosis.hideTreatmentQuestion() - diabetesDiagnosis.clearTreatmentChipGroup() + showDiabetesTreatmentQuestion = false } override fun showCurrentSmokerQuestion() { diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUi.kt b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUi.kt index 968ca680ce6..b1e1e9ca559 100644 --- a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUi.kt +++ b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUi.kt @@ -7,7 +7,6 @@ import org.simple.clinic.medicalhistory.OngoingMedicalHistoryEntry interface NewMedicalHistoryUi { fun setPatientName(patientName: String) fun populateOngoingMedicalHistoryEntry(ongoingMedicalHistoryEntry: OngoingMedicalHistoryEntry) - fun renderDiagnosisAnswer(question: MedicalHistoryQuestion, answer: Answer) fun showDiabetesDiagnosisView() fun hideDiabetesDiagnosisView() fun showDiabetesHistorySection() diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRenderer.kt b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRenderer.kt index b27453fce6f..bf4b78d68e0 100644 --- a/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRenderer.kt +++ b/app/src/main/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRenderer.kt @@ -1,7 +1,5 @@ package org.simple.clinic.medicalhistory.newentry -import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithDiabetes -import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithHypertension import org.simple.clinic.mobius.ViewRenderer class NewMedicalHistoryUiRenderer( @@ -33,7 +31,6 @@ class NewMedicalHistoryUiRenderer( private fun renderMedicalHistoryQuestions(model: NewMedicalHistoryModel) { with(model.ongoingMedicalHistoryEntry) { - ui.renderDiagnosisAnswer(DiagnosedWithHypertension, diagnosedWithHypertension) renderHypertensionTreatmentQuestion(model) } ui.populateOngoingMedicalHistoryEntry(model.ongoingMedicalHistoryEntry) @@ -50,7 +47,6 @@ class NewMedicalHistoryUiRenderer( private fun renderDiabetesManagementEnabled(model: NewMedicalHistoryModel) { ui.showDiabetesDiagnosisView() ui.hideDiabetesHistorySection() - ui.renderDiagnosisAnswer(DiagnosedWithDiabetes, model.ongoingMedicalHistoryEntry.hasDiabetes) renderDiabetesTreatmentQuestion(model) } diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryAnswerChip.kt b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryAnswerChip.kt new file mode 100644 index 00000000000..b1407cabffb --- /dev/null +++ b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryAnswerChip.kt @@ -0,0 +1,80 @@ +package org.simple.clinic.medicalhistory.ui + +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material.ChipDefaults +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.FilterChip +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import org.simple.clinic.R +import org.simple.clinic.medicalhistory.Answer + +@Composable +fun AnswerChipsGroup( + modifier: Modifier = Modifier, + selectedAnswer: Answer?, + onSelectionChange: (Answer) -> Unit +) { + Row( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_8)), + verticalAlignment = Alignment.CenterVertically, + ) { + MedicalHistoryAnswerChip( + label = stringResource(R.string.newmedicalhistory_yes), + selected = selectedAnswer == Answer.Yes, + onSelectionChange = { + onSelectionChange(Answer.Yes) + } + ) + + MedicalHistoryAnswerChip( + label = stringResource(R.string.newmedicalhistory_no), + selected = selectedAnswer == Answer.No, + onSelectionChange = { + onSelectionChange(Answer.No) + } + ) + } +} + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun MedicalHistoryAnswerChip( + label: String, + selected: Boolean, + onSelectionChange: () -> Unit +) { + val backgroundColor by animateColorAsState( + if (selected) MaterialTheme.colors.primary else MaterialTheme.colors.primaryVariant + ) + val textColor by animateColorAsState( + if (selected) MaterialTheme.colors.onPrimary else MaterialTheme.colors.primary + ) + + FilterChip( + selected = selected, + colors = ChipDefaults.filterChipColors( + backgroundColor = backgroundColor, + ), + onClick = onSelectionChange, + ) { + Text( + modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.spacing_12)), + text = label, + style = MaterialTheme.typography.body2, + color = textColor, + textAlign = TextAlign.Center, + ) + } +} diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryDiagnosisWithTreatment.kt b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryDiagnosisWithTreatment.kt new file mode 100644 index 00000000000..5ab6b48670d --- /dev/null +++ b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryDiagnosisWithTreatment.kt @@ -0,0 +1,122 @@ +package org.simple.clinic.medicalhistory.ui + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Card +import androidx.compose.material.Divider +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import org.simple.clinic.R +import org.simple.clinic.appconfig.Country +import org.simple.clinic.common.ui.theme.SimpleTheme +import org.simple.clinic.medicalhistory.Answer +import org.simple.clinic.medicalhistory.MedicalHistoryQuestion +import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnHypertensionTreatment + +@Composable +fun MedicalHistoryDiagnosisWithTreatment( + diagnosisQuestion: MedicalHistoryQuestion, + diagnosisLabel: String, + diagnosisAnswer: Answer?, + treatmentQuestion: MedicalHistoryQuestion, + treatmentAnswer: Answer?, + showTreatmentQuestion: Boolean, + modifier: Modifier = Modifier, + onSelectionChange: (MedicalHistoryQuestion, Answer) -> Unit, +) { + LaunchedEffect(showTreatmentQuestion) { + if (!showTreatmentQuestion) { + onSelectionChange(treatmentQuestion, Answer.Unanswered) + } + } + + Card(modifier = modifier.fillMaxWidth()) { + Column( + modifier = Modifier + .padding(horizontal = dimensionResource(R.dimen.spacing_16)) + .padding( + top = dimensionResource(R.dimen.spacing_16), + bottom = dimensionResource(R.dimen.spacing_4) + ) + ) { + Text( + modifier = Modifier + .padding(bottom = dimensionResource(R.dimen.spacing_4)), + text = diagnosisLabel, + style = SimpleTheme.typography.subtitle1Medium, + color = MaterialTheme.colors.onSurface, + ) + + AnswerChipsGroup( + modifier = Modifier.align(Alignment.End), + selectedAnswer = diagnosisAnswer, + onSelectionChange = { newAnswer -> + if (newAnswer == diagnosisAnswer) { + onSelectionChange(diagnosisQuestion, Answer.Unanswered) + } else { + onSelectionChange(diagnosisQuestion, newAnswer) + } + } + ) + + AnimatedVisibility( + visible = showTreatmentQuestion + ) { + Column { + Divider( + modifier = Modifier.padding( + top = dimensionResource(R.dimen.spacing_4), + bottom = dimensionResource(R.dimen.spacing_8) + ), + color = SimpleTheme.colors.onSurface11 + ) + + Text( + modifier = Modifier + .padding(bottom = dimensionResource(R.dimen.spacing_4)), + text = stringResource(treatmentQuestion.questionRes), + style = MaterialTheme.typography.body1, + color = MaterialTheme.colors.onSurface, + ) + + AnswerChipsGroup( + modifier = Modifier.align(Alignment.End), + selectedAnswer = treatmentAnswer, + onSelectionChange = { newAnswer -> + if (newAnswer == treatmentAnswer) { + onSelectionChange(treatmentQuestion, Answer.Unanswered) + } else { + onSelectionChange(treatmentQuestion, newAnswer) + } + } + ) + } + } + } + } +} + +@Preview +@Composable +private fun MedicalHistoryDiagnosisWithTreatmentPreview() { + SimpleTheme { + MedicalHistoryDiagnosisWithTreatment( + diagnosisQuestion = MedicalHistoryQuestion.DiagnosedWithHypertension, + diagnosisLabel = stringResource(R.string.medicalhistory_diagnosis_hypertension_required), + diagnosisAnswer = Answer.Yes, + treatmentQuestion = IsOnHypertensionTreatment(Country.INDIA), + treatmentAnswer = Answer.Unanswered, + showTreatmentQuestion = true, + onSelectionChange = { _, _ -> } + ) + } +} diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryQuestionItem.kt b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryQuestionItem.kt index c83a1d300ee..96b6b88e61b 100644 --- a/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryQuestionItem.kt +++ b/app/src/main/java/org/simple/clinic/medicalhistory/ui/MedicalHistoryQuestionItem.kt @@ -1,24 +1,17 @@ package org.simple.clinic.medicalhistory.ui -import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.padding -import androidx.compose.material.ChipDefaults import androidx.compose.material.Divider -import androidx.compose.material.ExperimentalMaterialApi -import androidx.compose.material.FilterChip import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import org.simple.clinic.R @@ -28,39 +21,39 @@ import org.simple.clinic.medicalhistory.MedicalHistoryQuestion @Composable fun MedicalHistoryQuestionItem( - question: MedicalHistoryQuestion, - selectedAnswer: Answer?, - modifier: Modifier = Modifier, - showDivider: Boolean = true, - onSelectionChange: (Answer) -> Unit, + question: MedicalHistoryQuestion, + selectedAnswer: Answer?, + modifier: Modifier = Modifier, + showDivider: Boolean = true, + onSelectionChange: (Answer) -> Unit, ) { Column( - modifier = modifier - .background(MaterialTheme.colors.surface) + modifier = modifier + .background(MaterialTheme.colors.surface) ) { Row( - modifier = Modifier, - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_16)) + modifier = Modifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_16)) ) { Text( - modifier = Modifier.weight(1f), - text = stringResource(question.questionRes), - style = MaterialTheme.typography.body1, - color = MaterialTheme.colors.onSurface, - maxLines = 1, - overflow = TextOverflow.Ellipsis, + modifier = Modifier.weight(1f), + text = stringResource(question.questionRes), + style = MaterialTheme.typography.body1, + color = MaterialTheme.colors.onSurface, + maxLines = 1, + overflow = TextOverflow.Ellipsis, ) AnswerChipsGroup( - selectedAnswer = selectedAnswer, - onSelectionChange = { newAnswer -> - if (newAnswer == selectedAnswer) { - onSelectionChange(Answer.Unanswered) - } else { - onSelectionChange(newAnswer) + selectedAnswer = selectedAnswer, + onSelectionChange = { newAnswer -> + if (newAnswer == selectedAnswer) { + onSelectionChange(Answer.Unanswered) + } else { + onSelectionChange(newAnswer) + } } - } ) } @@ -70,75 +63,18 @@ fun MedicalHistoryQuestionItem( } } -@Composable -private fun AnswerChipsGroup( - selectedAnswer: Answer?, - onSelectionChange: (Answer) -> Unit -) { - Row( - horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.spacing_8)), - verticalAlignment = Alignment.CenterVertically, - ) { - MedicalHistoryAnswerChip( - label = stringResource(R.string.newmedicalhistory_yes), - selected = selectedAnswer == Answer.Yes, - onSelectionChange = { - onSelectionChange(Answer.Yes) - } - ) - - MedicalHistoryAnswerChip( - label = stringResource(R.string.newmedicalhistory_no), - selected = selectedAnswer == Answer.No, - onSelectionChange = { - onSelectionChange(Answer.No) - } - ) - } -} - -@OptIn(ExperimentalMaterialApi::class) -@Composable -private fun MedicalHistoryAnswerChip( - label: String, - selected: Boolean, - onSelectionChange: () -> Unit -) { - val backgroundColor by animateColorAsState( - if (selected) MaterialTheme.colors.primary else MaterialTheme.colors.primaryVariant - ) - val textColor by animateColorAsState( - if (selected) MaterialTheme.colors.onPrimary else MaterialTheme.colors.primary - ) - - FilterChip( - selected = selected, - colors = ChipDefaults.filterChipColors( - backgroundColor = backgroundColor, - ), - onClick = onSelectionChange, - ) { - Text( - modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.spacing_12)), - text = label, - style = MaterialTheme.typography.body2, - color = textColor, - textAlign = TextAlign.Center, - ) - } -} @Preview @Composable private fun MedicalHistoryQuestionItemPreview() { SimpleTheme { MedicalHistoryQuestionItem( - question = MedicalHistoryQuestion.DiagnosedWithHypertension, - selectedAnswer = null, - showDivider = true, - onSelectionChange = { - // no-op - } + question = MedicalHistoryQuestion.DiagnosedWithHypertension, + selectedAnswer = null, + showDivider = true, + onSelectionChange = { + // no-op + } ) } } @@ -148,12 +84,12 @@ private fun MedicalHistoryQuestionItemPreview() { private fun MedicalHistoryQuestionItemYesPreview() { SimpleTheme { MedicalHistoryQuestionItem( - question = MedicalHistoryQuestion.DiagnosedWithDiabetes, - selectedAnswer = Answer.Yes, - showDivider = true, - onSelectionChange = { - // no-op - } + question = MedicalHistoryQuestion.DiagnosedWithDiabetes, + selectedAnswer = Answer.Yes, + showDivider = true, + onSelectionChange = { + // no-op + } ) } } diff --git a/app/src/main/res/layout/list_medicalhistory_diagnosis_with_treatment.xml b/app/src/main/res/layout/list_medicalhistory_diagnosis_with_treatment.xml deleted file mode 100644 index 1af6308a54d..00000000000 --- a/app/src/main/res/layout/list_medicalhistory_diagnosis_with_treatment.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/screen_new_medical_history.xml b/app/src/main/res/layout/screen_new_medical_history.xml index 94dfb036bee..bc7dba3721f 100644 --- a/app/src/main/res/layout/screen_new_medical_history.xml +++ b/app/src/main/res/layout/screen_new_medical_history.xml @@ -1,7 +1,6 @@ @@ -26,36 +25,10 @@ android:layout_above="@id/nextButtonFrame" android:layout_below="@+id/appbar"> - - - - - - - - - + android:layout_height="wrap_content" /> diff --git a/app/src/test/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRendererTest.kt b/app/src/test/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRendererTest.kt index e0d0e930c81..fca91d984d0 100644 --- a/app/src/test/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRendererTest.kt +++ b/app/src/test/java/org/simple/clinic/medicalhistory/newentry/NewMedicalHistoryUiRendererTest.kt @@ -66,7 +66,6 @@ class NewMedicalHistoryUiRendererTest { uiRenderer.render(model) // then - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verify(ui).populateOngoingMedicalHistoryEntry(model.ongoingMedicalHistoryEntry) verify(ui).hideNextButtonProgress() @@ -92,8 +91,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Yes) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, No) verify(ui).hideNextButtonProgress() verify(ui).showHypertensionTreatmentQuestion(Unanswered) verify(ui).hideDiabetesTreatmentQuestion() @@ -115,7 +112,6 @@ class NewMedicalHistoryUiRendererTest { verify(ui).hideDiabetesDiagnosisView() verify(ui).showDiabetesHistorySection() verify(ui).hideNextButtonProgress() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verifyNoMoreInteractions(ui) } @@ -131,7 +127,6 @@ class NewMedicalHistoryUiRendererTest { // then verifyImplicitRenders(model) - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verify(ui).showNextButtonProgress() verify(ui).hideDiabetesDiagnosisView() @@ -153,8 +148,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Yes) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, Unanswered) verify(ui).hideNextButtonProgress() verify(ui).showHypertensionTreatmentQuestion(Unanswered) verify(ui).hideDiabetesTreatmentQuestion() @@ -180,8 +173,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Yes) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, Unanswered) verify(ui).hideNextButtonProgress() verify(ui).hideHypertensionTreatmentQuestion() verify(ui).hideDiabetesTreatmentQuestion() @@ -200,9 +191,7 @@ class NewMedicalHistoryUiRendererTest { // then verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, Unanswered) verify(ui).hideNextButtonProgress() verify(ui).hideHypertensionTreatmentQuestion() verify(ui).hideDiabetesTreatmentQuestion() @@ -223,8 +212,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, Yes) verify(ui).hideNextButtonProgress() verify(ui).hideHypertensionTreatmentQuestion() verify(ui).showDiabetesTreatmentQuestion(Unanswered) @@ -250,8 +237,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, Yes) verify(ui).hideNextButtonProgress() verify(ui).hideHypertensionTreatmentQuestion() verify(ui).hideDiabetesTreatmentQuestion() @@ -272,8 +257,6 @@ class NewMedicalHistoryUiRendererTest { verifyImplicitRenders(model) verify(ui).showDiabetesDiagnosisView() verify(ui).hideDiabetesHistorySection() - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) - verify(ui).renderDiagnosisAnswer(DiagnosedWithDiabetes, No) verify(ui).hideNextButtonProgress() verify(ui).hideHypertensionTreatmentQuestion() verify(ui).hideDiabetesTreatmentQuestion() @@ -299,7 +282,6 @@ class NewMedicalHistoryUiRendererTest { uiRenderer.render(model) // then - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verify(ui).populateOngoingMedicalHistoryEntry(model.ongoingMedicalHistoryEntry) verify(ui).hideNextButtonProgress() @@ -327,7 +309,6 @@ class NewMedicalHistoryUiRendererTest { uiRenderer.render(model) // then - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verify(ui).populateOngoingMedicalHistoryEntry(model.ongoingMedicalHistoryEntry) verify(ui).hideNextButtonProgress() @@ -357,7 +338,6 @@ class NewMedicalHistoryUiRendererTest { uiRenderer.render(model) // then - verify(ui).renderDiagnosisAnswer(DiagnosedWithHypertension, Unanswered) verify(ui).hideHypertensionTreatmentQuestion() verify(ui).populateOngoingMedicalHistoryEntry(model.ongoingMedicalHistoryEntry) verify(ui).hideNextButtonProgress()