From abd7062357fbe5821e487821cdf375cdbd70100f Mon Sep 17 00:00:00 2001 From: AbdulWahabMemon Date: Wed, 7 Feb 2024 16:54:35 +0500 Subject: [PATCH 1/7] cherry pick location-widget-0-2-5 sample --- android/build.gradle.kts | 10 +++++++++ android/engine/build.gradle.kts | 7 +++++++ android/gradle/libs.versions.toml | 4 +++- .../ui/questionnaire/QuestionnaireActivity.kt | 15 ++++++------- ...olderFactoryMatchersProviderFactoryImpl.kt | 21 +++++++++++++++++-- .../questionnaire/QuestionnaireViewModel.kt | 7 ++++--- 6 files changed, 51 insertions(+), 13 deletions(-) diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 12f6f49436..cfc70a89ab 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -92,6 +92,16 @@ subprojects { "org.jacoco" -> useVersion("0.8.7") } } + + // Maximum Jackson libraries (excluding core) version that supports Android API Level 24: + // https://github.com/FasterXML/jackson-databind/issues/3658 + force("com.fasterxml.jackson.core:jackson-annotations:2.13.4") + force("com.fasterxml.jackson:jackson-bom:2.13.4") + force("com.fasterxml.jackson.core:jackson-core:2.13.4") + force("com.fasterxml.jackson.core:jackson-databind:2.13.4") + force("com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.13.4") + force("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") + force("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4") } } diff --git a/android/engine/build.gradle.kts b/android/engine/build.gradle.kts index f3d9659fb7..641b23460d 100644 --- a/android/engine/build.gradle.kts +++ b/android/engine/build.gradle.kts @@ -210,6 +210,13 @@ dependencies { exclude(group = "com.google.android.fhir", module = "common") exclude(group = "com.google.android.fhir", module = "engine") } + api(libs.contrib.locationwidget) { + isTransitive = true + exclude(group = "org.smartregister", module = "data-capture") + exclude(group = "ca.uhn.hapi.fhir") + exclude(group = "com.google.android.fhir", module = "common") + exclude(group = "com.google.android.fhir", module = "engine") + } api(libs.fhir.engine) { isTransitive = true exclude(group = "com.google.android.fhir", module = "common") diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 79949fc6c0..3772a4ccdd 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -12,6 +12,7 @@ compressor = "3.0.1" constraintlayout = "2.1.4" constraintlayout-compose = "1.0.1" contrib-barcode = "0.1.0-beta3-preview5-SNAPSHOT" +contrib-locationwidget = "0.1.0-alpha01-lw-SNAPSHOT" converter-gson = "2.9.0" core-ktx = "1.10.1" core-ktx-test= "1.5.0" @@ -20,9 +21,9 @@ cql-engine = "2.4.0" cql-evaluator = "2.4.0" cql-to-elm = "2.4.0" dagger-hilt-compiler = "2.45" -data-capture = "1.0.0-preview19-SNAPSHOT" datastore = "1.0.0" datastore-preferences = "1.0.0" +data-capture = "1.0.0-lw-SNAPSHOT" desugar-jdk-libs = "1.1.5" easy-rules-jexl = "4.1.0" espresso-core = "3.5.1" @@ -127,6 +128,7 @@ compressor = { group = "id.zelory", name = "compressor", version.ref = "compress constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } constraintlayout-compose = { group = "androidx.constraintlayout", name = "constraintlayout-compose", version.ref = "constraintlayout-compose" } contrib-barcode = { group = "org.smartregister", name = "contrib-barcode", version.ref = "contrib-barcode" } +contrib-locationwidget = { group = "org.smartregister", name = "contrib-locationwidget", version.ref = "contrib-locationwidget" } converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "converter-gson" } core-desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar-jdk-libs" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" } diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt index 98b7cfda4a..c92ac571e8 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt @@ -30,8 +30,6 @@ import androidx.lifecycle.lifecycleScope import com.google.android.fhir.datacapture.QuestionnaireFragment import com.google.android.fhir.logicalId import dagger.hilt.android.AndroidEntryPoint -import java.io.Serializable -import java.util.LinkedList import kotlinx.coroutines.launch import org.hl7.fhir.r4.model.Questionnaire import org.hl7.fhir.r4.model.QuestionnaireResponse @@ -52,6 +50,8 @@ import org.smartregister.fhircore.engine.util.extension.showToast import org.smartregister.fhircore.quest.R import org.smartregister.fhircore.quest.databinding.QuestionnaireActivityBinding import timber.log.Timber +import java.io.Serializable +import java.util.LinkedList @AndroidEntryPoint class QuestionnaireActivity : BaseMultiLanguageActivity() { @@ -163,6 +163,7 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() { val questionnaireFragmentBuilder = QuestionnaireFragment.builder() .setQuestionnaire(questionnaire.json()) + .setCustomQuestionnaireItemViewHolderFactoryMatchersProvider(OPENSRP_ITEM_VIEWHOLDER_FACTORY_MATCHERS_PROVIDER) .showAsterisk(questionnaireConfig.showRequiredTextAsterisk) .showRequiredText(questionnaireConfig.showRequiredText) @@ -188,11 +189,11 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() { ) } - if (launchContextResources.isNotEmpty()) { - questionnaireFragmentBuilder.setQuestionnaireLaunchContexts( - launchContextResources.map { it.json() }, - ) - } +// if (launchContextResources.isNotEmpty()) { +// questionnaireFragmentBuilder.setQuestionnaireLaunchContexts( +// launchContextResources.map { it.json() }, +// ) +// } // Populate questionnaire with latest QuestionnaireResponse if (questionnaireConfig.isEditable()) { diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt index f0822da4da..15ae27da74 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt @@ -19,18 +19,27 @@ package org.smartregister.fhircore.quest.ui.questionnaire import com.google.android.fhir.datacapture.QuestionnaireFragment import com.google.android.fhir.datacapture.QuestionnaireItemViewHolderFactoryMatchersProviderFactory import com.google.android.fhir.datacapture.contrib.views.barcode.BarCodeReaderViewHolderFactory +import com.google.android.fhir.datacapture.contrib.views.locationwidget.LocationGpsCoordinateViewHolderFactory +import com.google.android.fhir.datacapture.contrib.views.locationwidget.LocationWidgetViewHolderFactory import com.google.android.fhir.datacapture.extensions.asStringValue +const val OPENSRP_ITEM_VIEWHOLDER_FACTORY_MATCHERS_PROVIDER = + "org.smartregister.fhircore.quest.QuestionnaireItemViewHolderFactoryMatchersProvider" + object QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl : QuestionnaireItemViewHolderFactoryMatchersProviderFactory { override fun get( provider: String, ): QuestionnaireFragment.QuestionnaireItemViewHolderFactoryMatchersProvider { - return QuestionnaireItemViewHolderFactoryMatchersProviderImpl + return when (provider) { + OPENSRP_ITEM_VIEWHOLDER_FACTORY_MATCHERS_PROVIDER -> + OpenSRPQuestionnaireItemViewHolderFactoryMatchersProviderImpl + else -> throw NotImplementedError() + } } - object QuestionnaireItemViewHolderFactoryMatchersProviderImpl : + object OpenSRPQuestionnaireItemViewHolderFactoryMatchersProviderImpl : QuestionnaireFragment.QuestionnaireItemViewHolderFactoryMatchersProvider() { const val BARCODE_URL = "https://fhir.labs.smartregister.org/barcode-type-widget-extension" @@ -45,6 +54,14 @@ object QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl : if (it == null) false else it.value.asStringValue() == BARCODE_NAME } }, + QuestionnaireFragment.QuestionnaireItemViewHolderFactoryMatcher( + factory = LocationGpsCoordinateViewHolderFactory, + matches = LocationGpsCoordinateViewHolderFactory::matcher, + ), + QuestionnaireFragment.QuestionnaireItemViewHolderFactoryMatcher( + factory = LocationWidgetViewHolderFactory, + matches = LocationWidgetViewHolderFactory::matcher, + ), ) } } diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt index 026aaabe3f..a1c8db1f25 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt @@ -32,9 +32,6 @@ import com.google.android.fhir.logicalId import com.google.android.fhir.search.Search import com.google.android.fhir.workflow.FhirOperator import dagger.hilt.android.lifecycle.HiltViewModel -import java.util.Date -import java.util.UUID -import javax.inject.Inject import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -82,6 +79,9 @@ import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import org.smartregister.fhircore.engine.util.helper.TransformSupportServices import org.smartregister.fhircore.quest.R import timber.log.Timber +import java.util.Date +import java.util.UUID +import javax.inject.Inject @HiltViewModel class QuestionnaireViewModel @@ -798,6 +798,7 @@ constructor( return questionnaireResponses.maxByOrNull { it.meta.lastUpdated } } + /** * Return [Resource]s to be used in the launch context of the questionnaire. Launch context allows * information to be passed into questionnaire based on the context in which the questionnaire is From 339ee927195aa918a49c488c6059cac1e74fb4c1 Mon Sep 17 00:00:00 2001 From: AbdulWahabMemon Date: Fri, 9 Feb 2024 12:57:10 +0500 Subject: [PATCH 2/7] spotlessApply --- .../quest/ui/questionnaire/QuestionnaireActivity.kt | 10 +++------- .../quest/ui/questionnaire/QuestionnaireViewModel.kt | 7 +++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt index c92ac571e8..51300d0716 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt @@ -163,7 +163,9 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() { val questionnaireFragmentBuilder = QuestionnaireFragment.builder() .setQuestionnaire(questionnaire.json()) - .setCustomQuestionnaireItemViewHolderFactoryMatchersProvider(OPENSRP_ITEM_VIEWHOLDER_FACTORY_MATCHERS_PROVIDER) + .setCustomQuestionnaireItemViewHolderFactoryMatchersProvider( + OPENSRP_ITEM_VIEWHOLDER_FACTORY_MATCHERS_PROVIDER, + ) .showAsterisk(questionnaireConfig.showRequiredTextAsterisk) .showRequiredText(questionnaireConfig.showRequiredText) @@ -189,12 +191,6 @@ class QuestionnaireActivity : BaseMultiLanguageActivity() { ) } -// if (launchContextResources.isNotEmpty()) { -// questionnaireFragmentBuilder.setQuestionnaireLaunchContexts( -// launchContextResources.map { it.json() }, -// ) -// } - // Populate questionnaire with latest QuestionnaireResponse if (questionnaireConfig.isEditable()) { val latestQuestionnaireResponse = diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt index a1c8db1f25..026aaabe3f 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireViewModel.kt @@ -32,6 +32,9 @@ import com.google.android.fhir.logicalId import com.google.android.fhir.search.Search import com.google.android.fhir.workflow.FhirOperator import dagger.hilt.android.lifecycle.HiltViewModel +import java.util.Date +import java.util.UUID +import javax.inject.Inject import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -79,9 +82,6 @@ import org.smartregister.fhircore.engine.util.fhirpath.FhirPathDataExtractor import org.smartregister.fhircore.engine.util.helper.TransformSupportServices import org.smartregister.fhircore.quest.R import timber.log.Timber -import java.util.Date -import java.util.UUID -import javax.inject.Inject @HiltViewModel class QuestionnaireViewModel @@ -798,7 +798,6 @@ constructor( return questionnaireResponses.maxByOrNull { it.meta.lastUpdated } } - /** * Return [Resource]s to be used in the launch context of the questionnaire. Launch context allows * information to be passed into questionnaire based on the context in which the questionnaire is From 8b13d92930d0c000d2abd9a39803af757b250b09 Mon Sep 17 00:00:00 2001 From: AbdulWahabMemon Date: Tue, 27 Feb 2024 02:32:40 +0500 Subject: [PATCH 3/7] remove force dependencies as per reviewer comment --- android/build.gradle.kts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 7f40039dca..ea86e50a19 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -94,16 +94,6 @@ subprojects { "org.jacoco" -> useVersion("0.8.11") } } - - // Maximum Jackson libraries (excluding core) version that supports Android API Level 24: - // https://github.com/FasterXML/jackson-databind/issues/3658 - force("com.fasterxml.jackson.core:jackson-annotations:2.13.4") - force("com.fasterxml.jackson:jackson-bom:2.13.4") - force("com.fasterxml.jackson.core:jackson-core:2.13.4") - force("com.fasterxml.jackson.core:jackson-databind:2.13.4") - force("com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.13.4") - force("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") - force("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4") } } From 2816aebdffa4c27f522745ec6a4f3304407ed8ce Mon Sep 17 00:00:00 2001 From: AbdulWahabMemon Date: Tue, 27 Feb 2024 02:36:52 +0500 Subject: [PATCH 4/7] fix as per reviewer comment --- ...tionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt index 15ae27da74..fe4d1bd25f 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl.kt @@ -42,7 +42,7 @@ object QuestionnaireItemViewHolderFactoryMatchersProviderFactoryImpl : object OpenSRPQuestionnaireItemViewHolderFactoryMatchersProviderImpl : QuestionnaireFragment.QuestionnaireItemViewHolderFactoryMatchersProvider() { - const val BARCODE_URL = "https://fhir.labs.smartregister.org/barcode-type-widget-extension" + const val BARCODE_URL = "https://smartregister.org/barcode-type-widget-extension" const val BARCODE_NAME = "barcode" override fun get(): List { From c969e2f3eb354e15d4c61ed3a47a93c0788cc9da Mon Sep 17 00:00:00 2001 From: Hamza Ahmed Khan Date: Tue, 27 Feb 2024 13:37:37 +0500 Subject: [PATCH 5/7] Update contrib-locationwidget dependency --- android/gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 5cb17b769d..0681acd4f1 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -9,7 +9,7 @@ compressor = "3.0.1" constraintlayout = "2.1.4" constraintlayout-compose = "1.0.1" contrib-barcode = "0.1.0-beta3-preview5-SNAPSHOT" -contrib-locationwidget = "0.1.0-alpha01-lw-SNAPSHOT" +contrib-locationwidget = "0.1.0-alpha01-preview-SNAPSHOT" converter-gson = "2.9.0" core-ktx = "1.12.0" android-x-test= "1.5.2" From 1e7c478974708a33bc13bdfd6a66736e8c08f71a Mon Sep 17 00:00:00 2001 From: pld Date: Tue, 27 Feb 2024 19:13:53 -0500 Subject: [PATCH 6/7] reorder imports --- .../fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt index f6f4068687..ce6abb06ad 100644 --- a/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt +++ b/android/quest/src/main/java/org/smartregister/fhircore/quest/ui/questionnaire/QuestionnaireActivity.kt @@ -30,6 +30,8 @@ import androidx.lifecycle.lifecycleScope import com.google.android.fhir.datacapture.QuestionnaireFragment import com.google.android.fhir.logicalId import dagger.hilt.android.AndroidEntryPoint +import java.io.Serializable +import java.util.LinkedList import kotlinx.coroutines.launch import org.hl7.fhir.r4.model.Questionnaire import org.hl7.fhir.r4.model.QuestionnaireResponse @@ -50,8 +52,6 @@ import org.smartregister.fhircore.engine.util.extension.showToast import org.smartregister.fhircore.quest.R import org.smartregister.fhircore.quest.databinding.QuestionnaireActivityBinding import timber.log.Timber -import java.io.Serializable -import java.util.LinkedList @AndroidEntryPoint class QuestionnaireActivity : BaseMultiLanguageActivity() { From faf19f86247098bd7e60309dda33285b671603a8 Mon Sep 17 00:00:00 2001 From: Hamza Ahmed Khan Date: Fri, 1 Mar 2024 15:18:55 +0500 Subject: [PATCH 7/7] Fix Unknown Resource 'Location_Position' Exception --- .../fhircore/engine/util/helper/TransformSupportServices.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/helper/TransformSupportServices.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/helper/TransformSupportServices.kt index 0d0b4e4c0a..40f7a9d566 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/util/helper/TransformSupportServices.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/util/helper/TransformSupportServices.kt @@ -28,6 +28,7 @@ import org.hl7.fhir.r4.model.Encounter import org.hl7.fhir.r4.model.EpisodeOfCare import org.hl7.fhir.r4.model.Group import org.hl7.fhir.r4.model.Immunization +import org.hl7.fhir.r4.model.Location import org.hl7.fhir.r4.model.Observation import org.hl7.fhir.r4.model.Patient import org.hl7.fhir.r4.model.PlanDefinition @@ -79,6 +80,7 @@ class TransformSupportServices @Inject constructor(val simpleWorkerContext: Simp "Task_Output" -> Task.TaskOutputComponent() "Task_Restriction" -> Task.TaskRestrictionComponent() "AdverseEvent_SuspectEntity" -> AdverseEvent.AdverseEventSuspectEntityComponent() + "Location_Position" -> Location.LocationPositionComponent() else -> ResourceFactory.createResourceOrType(name) } }