From 0a70cb78fdb55c0e4dff3593ac9aac8eb344efde Mon Sep 17 00:00:00 2001 From: oxidiert Date: Thu, 21 Aug 2025 11:08:02 +0200 Subject: [PATCH] added edit mode for radio questions --- app/src/main/assets/questionnaire_order.json | 2 +- .../com/dano/test1/HandlerRadioQuestion.kt | 47 +++++++++++++++++-- .../java/com/dano/test1/QuestionnaireBase.kt | 2 +- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/app/src/main/assets/questionnaire_order.json b/app/src/main/assets/questionnaire_order.json index 2aff286..1df7042 100644 --- a/app/src/main/assets/questionnaire_order.json +++ b/app/src/main/assets/questionnaire_order.json @@ -29,7 +29,7 @@ "questionnaire_2_rhs", "questionnaire_3_integration_index" ], - "questionnaire": "questionnaire_1_demographic_information.json", + "questionnaire": "questionnaire_1_demographic_information", "questionId": "consent_instruction", "operator": "==", "value": "consent_signed" diff --git a/app/src/main/java/com/dano/test1/HandlerRadioQuestion.kt b/app/src/main/java/com/dano/test1/HandlerRadioQuestion.kt index 6a4e501..31be16b 100644 --- a/app/src/main/java/com/dano/test1/HandlerRadioQuestion.kt +++ b/app/src/main/java/com/dano/test1/HandlerRadioQuestion.kt @@ -4,6 +4,7 @@ import android.content.Context import android.view.View import android.text.Html import android.widget.* +import kotlinx.coroutines.* class HandlerRadioQuestion( private val context: Context, @@ -13,7 +14,8 @@ class HandlerRadioQuestion( private val goToNextQuestion: () -> Unit, private val goToPreviousQuestion: () -> Unit, private val goToQuestionById: (String) -> Unit, - private val showToast: (String) -> Unit + private val showToast: (String) -> Unit, + private val questionnaireMeta: String ) : QuestionHandler { private lateinit var layout: View @@ -32,7 +34,6 @@ class HandlerRadioQuestion( Html.fromHtml(LanguageManager.getText(languageID, it), Html.FROM_HTML_MODE_LEGACY) } ?: "" - radioGroup.removeAllViews() question.options.forEach { option -> @@ -53,6 +54,44 @@ class HandlerRadioQuestion( restorePreviousAnswer(radioGroup) + val answerMapKey = question.question ?: (question.id ?: "") + if (answerMapKey.isNotBlank() && !answers.containsKey(answerMapKey)) { + CoroutineScope(Dispatchers.IO).launch { + try { + val clientCode = GlobalValues.LAST_CLIENT_CODE + if (clientCode.isNullOrBlank()) return@launch + + val allAnswersForClient = MyApp.database.answerDao().getAnswersForClient(clientCode) + val myQuestionId = questionnaireMeta + "-" + question.question + val dbAnswer = allAnswersForClient.find { it.questionId == myQuestionId }?.answerValue + + if (!dbAnswer.isNullOrBlank()) { + withContext(Dispatchers.Main) { + val oldAnswerKey = answers[answerMapKey] as? String + val oldPoint = oldAnswerKey?.let { question.pointsMap?.get(it) } ?: 0 + if (oldAnswerKey != null) { + points.remove(oldPoint) + } + + for (i in 0 until radioGroup.childCount) { + val radioButton = radioGroup.getChildAt(i) as RadioButton + if (radioButton.tag == dbAnswer) { + radioButton.isChecked = true + break + } + } + + answers[answerMapKey] = dbAnswer + val newPoint = question.pointsMap?.get(dbAnswer) ?: 0 + points.add(newPoint) + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } + layout.findViewById