Skip to content

Commit 3c23b44

Browse files
authored
Fix questionnaire launch failure after adding a point on the map (#3761)
* Use fragment Activity context to launch questionnaires * Update latitude and longitude extra params with correct coordinates * Run spotlessApply * Revert changes
1 parent 29a6811 commit 3c23b44

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

android/quest/src/main/java/org/smartregister/fhircore/quest/ui/geowidget/GeoWidgetLauncherFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ class GeoWidgetLauncherFragment : Fragment(), OnSyncListener {
198198
decodeImage = geoWidgetLauncherViewModel::getImageBitmap,
199199
onAppMainEvent = appMainViewModel::onEvent,
200200
isSyncing = geoWidgetLauncherViewModel.isSyncing,
201+
fragmentActivityContext = this@GeoWidgetLauncherFragment.requireActivity(),
201202
)
202203
}
203204
}

android/quest/src/main/java/org/smartregister/fhircore/quest/ui/geowidget/GeoWidgetLauncherScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ fun GeoWidgetLauncherScreen(
7575
decodeImage: ((String) -> Bitmap?)?,
7676
onAppMainEvent: (AppMainEvent) -> Unit,
7777
isSyncing: LiveData<Boolean>,
78+
fragmentActivityContext: Context,
7879
) {
7980
val context = LocalContext.current
8081
val syncing by isSyncing.observeAsState()
@@ -143,7 +144,7 @@ fun GeoWidgetLauncherScreen(
143144
launchQuestionnaire(
144145
geoWidgetConfiguration.registrationQuestionnaire,
145146
feature,
146-
context,
147+
fragmentActivityContext,
147148
)
148149
}
149150
.setOnCancelAddingLocationListener {

android/quest/src/main/java/org/smartregister/fhircore/quest/ui/geowidget/GeoWidgetLauncherViewModel.kt

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -256,17 +256,17 @@ constructor(
256256
feature: GeoJsonFeature,
257257
context: Context,
258258
) {
259-
val params =
259+
val updatedQuestionnaireConfig =
260260
addMatchingCoordinatesToActionParameters(
261261
feature.geometry?.coordinates?.get(0),
262262
feature.geometry?.coordinates?.get(1),
263-
questionnaireConfig.extraParams,
263+
questionnaireConfig,
264264
)
265265
if (context is QuestionnaireHandler) {
266266
context.launchQuestionnaire(
267267
context = context,
268-
questionnaireConfig = questionnaireConfig,
269-
actionParams = params,
268+
questionnaireConfig = updatedQuestionnaireConfig,
269+
actionParams = emptyList(),
270270
)
271271
}
272272
}
@@ -278,24 +278,26 @@ constructor(
278278
private fun addMatchingCoordinatesToActionParameters(
279279
latitude: Double?,
280280
longitude: Double?,
281-
params: List<ActionParameter>?,
282-
): List<ActionParameter> {
281+
questionnaireConfig: QuestionnaireConfig,
282+
): QuestionnaireConfig {
283283
if (latitude == null || longitude == null) {
284284
throw IllegalArgumentException("Latitude or Longitude must not be null")
285285
}
286-
params ?: return emptyList()
287-
return params
288-
.filter {
289-
it.paramType == ActionParameterType.PREPOPULATE &&
290-
it.dataType == Enumerations.DataType.STRING
291-
}
292-
.map {
293-
return@map when (it.key) {
294-
KEY_LATITUDE -> it.copy(value = latitude.toString())
295-
KEY_LONGITUDE -> it.copy(value = longitude.toString())
296-
else -> it
297-
}
298-
}
286+
return questionnaireConfig.copy(
287+
extraParams =
288+
questionnaireConfig.extraParams
289+
?.filter {
290+
it.paramType == ActionParameterType.PREPOPULATE &&
291+
it.dataType == Enumerations.DataType.STRING
292+
}
293+
?.map {
294+
when (it.key) {
295+
KEY_LATITUDE -> it.copy(value = latitude.toString())
296+
KEY_LONGITUDE -> it.copy(value = longitude.toString())
297+
else -> it
298+
}
299+
},
300+
)
299301
}
300302

301303
suspend fun emitSnackBarState(snackBarMessageConfig: SnackBarMessageConfig) {

0 commit comments

Comments
 (0)