Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Move TimedGridSummaryAnswerCreator to the new module
  • Loading branch information
grzesiek2010 committed Feb 25, 2026
commit fa67f68b2c13780e18b46bb6b613bf5923271019
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.javarosa.core.model.FormIndex
import org.javarosa.core.model.IFormElement
import org.javarosa.core.model.data.IAnswerData
import org.javarosa.core.model.data.MultipleItemsData
import org.javarosa.core.model.data.helper.Selection
Expand All @@ -16,13 +18,17 @@ import org.odk.collect.android.activities.FormFillingActivity
import org.odk.collect.android.formentry.FormEntryViewModel
import org.odk.collect.android.formentry.questions.QuestionDetails
import org.odk.collect.android.widgets.QuestionWidget
import org.odk.collect.android.widgets.StringWidget
import org.odk.collect.android.widgets.items.ItemsWidgetUtils.loadItemsAndHandleErrors
import org.odk.collect.experimental.timedgrid.FinishType
import org.odk.collect.experimental.timedgrid.FormAnswerRefresher
import org.odk.collect.experimental.timedgrid.FormControllerFacade
import org.odk.collect.experimental.timedgrid.GridItem
import org.odk.collect.experimental.timedgrid.NavigationAwareWidget
import org.odk.collect.experimental.timedgrid.OngoingAssessmentWarningDialogFragment
import org.odk.collect.experimental.timedgrid.TimedGridState
import org.odk.collect.experimental.timedgrid.TimedGridSummary
import org.odk.collect.experimental.timedgrid.TimedGridSummaryAnswerCreator
import org.odk.collect.experimental.timedgrid.TimedGridViewModel
import org.odk.collect.experimental.timedgrid.TimedGridWidgetConfiguration
import org.odk.collect.experimental.timedgrid.Timer
Expand Down Expand Up @@ -50,8 +56,32 @@ class TimedGridWidget(
private val summaryAnswerCreator =
TimedGridSummaryAnswerCreator(
formEntryPrompt,
formEntryViewModel,
context.takeIf { it is FormFillingActivity } as FormFillingActivity?
object : FormControllerFacade {
override fun getFormElements(): List<IFormElement>? {
return formEntryViewModel.formController.getFormDef()?.children
}

override fun saveAnswer(index: FormIndex, answer: IAnswerData) {
formEntryViewModel.formController.saveOneScreenAnswer(index, answer, false)
}
},
object : FormAnswerRefresher {
override fun refreshAnswer(index: FormIndex) {
val activity = context as? FormFillingActivity ?: return
val odkView = activity.currentViewIfODKView ?: return

val widget = odkView.widgets
.filterIsInstance<StringWidget>()
.firstOrNull { it.formEntryPrompt.index == index }
?: return

widget.apply {
setDisplayValueFromModel()
widgetValueChanged()
showAnswerContainer()
}
}
}
)

private val items = loadItemsAndHandleErrors(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.odk.collect.android.experimental.timedgrid
package org.odk.collect.experimental.timedgrid

import org.javarosa.core.model.FormIndex
import org.javarosa.core.model.GroupDef
Expand All @@ -10,15 +10,11 @@ import org.javarosa.core.model.data.IntegerData
import org.javarosa.core.model.data.StringData
import org.javarosa.core.model.instance.TreeReference
import org.javarosa.form.api.FormEntryPrompt
import org.odk.collect.android.activities.FormFillingActivity
import org.odk.collect.android.formentry.FormEntryViewModel
import org.odk.collect.android.widgets.StringWidget
import org.odk.collect.experimental.timedgrid.TimedGridSummary

class TimedGridSummaryAnswerCreator(
val formEntryPrompt: FormEntryPrompt,
val formEntryViewModel: FormEntryViewModel,
val formFillingActivity: FormFillingActivity?
val formControllerFacade: FormControllerFacade,
val formAnswerRefresher: FormAnswerRefresher
) {
companion object {
val SUMMARY_QUESTION_APPEARANCE_REGEX = Regex("""timed-grid-answer\((.+),(.+)\)""")
Expand All @@ -27,7 +23,7 @@ class TimedGridSummaryAnswerCreator(
fun answerSummaryQuestions(summary: TimedGridSummary) {
val timedGridQuestionId = formEntryPrompt.index.reference.toString(false)

forEachFormQuestionDef(formEntryViewModel.formController.getFormDef()?.children) { questionIndex, questionDef ->
forEachFormQuestionDef(formControllerFacade.getFormElements()) { questionIndex, questionDef ->
val summaryQuestionMatch =
SUMMARY_QUESTION_APPEARANCE_REGEX.find(questionDef.appearanceAttr ?: "")

Expand All @@ -37,21 +33,8 @@ class TimedGridSummaryAnswerCreator(

if (referencedQuestion == timedGridQuestionId) {
val answer = getSummaryAnswer(metadataName, summary)

formEntryViewModel.formController.saveOneScreenAnswer(
questionIndex,
answer,
false
)

formFillingActivity?.currentViewIfODKView?.widgets
?.filterIsInstance<StringWidget>()
?.find { widget -> widget.formEntryPrompt.index == questionIndex }
?.apply {
setDisplayValueFromModel()
widgetValueChanged()
showAnswerContainer()
}
formControllerFacade.saveAnswer(questionIndex, answer)
formAnswerRefresher.refreshAnswer(questionIndex)
}
}
}
Expand Down Expand Up @@ -87,3 +70,12 @@ class TimedGridSummaryAnswerCreator(
}
}
}

interface FormControllerFacade {
fun getFormElements(): List<IFormElement>?
fun saveAnswer(index: FormIndex, answer: IAnswerData)
}

interface FormAnswerRefresher {
fun refreshAnswer(index: FormIndex)
}