diff --git a/contrib/locationwidget/src/androidTest/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactoryInstrumentedTest.kt b/contrib/locationwidget/src/androidTest/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactoryInstrumentedTest.kt index b91eec759f..bdf795eac5 100644 --- a/contrib/locationwidget/src/androidTest/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactoryInstrumentedTest.kt +++ b/contrib/locationwidget/src/androidTest/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactoryInstrumentedTest.kt @@ -27,6 +27,7 @@ import androidx.core.view.isVisible import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.google.common.truth.Truth.assertThat +import org.hl7.fhir.r4.model.Questionnaire import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -55,4 +56,30 @@ class LocationGpsCoordinateViewHolderFactoryInstrumentedTest { ) .isEqualTo(InputType.TYPE_NULL) } + + @Test + fun matcherShouldReturnTrueForOriginalGpsCoordinateUrl() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent() + questionnaireItem.addExtension( + LocationGpsCoordinateViewHolderFactory.PRIMARY_GPS_COORDINATE_EXTENSION_URL, + null, + ) + assertThat(LocationGpsCoordinateViewHolderFactory.matcher(questionnaireItem)).isTrue() + } + + @Test + fun matcherShouldReturnTrueForOldGpsCoordinateUrl() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent() + questionnaireItem.addExtension( + LocationGpsCoordinateViewHolderFactory.GPS_COORDINATE_EXTENSION_URL, + null, + ) + assertThat(LocationGpsCoordinateViewHolderFactory.matcher(questionnaireItem)).isTrue() + } + + @Test + fun matcherShouldReturnFalseForNoGpsCoordinateUrl() { + val questionnaireItem = Questionnaire.QuestionnaireItemComponent() + assertThat(LocationGpsCoordinateViewHolderFactory.matcher(questionnaireItem)).isFalse() + } } diff --git a/contrib/locationwidget/src/main/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactory.kt b/contrib/locationwidget/src/main/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactory.kt index 18769f6166..a12b87dc69 100644 --- a/contrib/locationwidget/src/main/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactory.kt +++ b/contrib/locationwidget/src/main/java/com/google/android/fhir/datacapture/contrib/views/locationwidget/LocationGpsCoordinateViewHolderFactory.kt @@ -59,8 +59,11 @@ object LocationGpsCoordinateViewHolderFactory : header.context.tryUnwrapContext()?.apply { val gpsCoordinateExtensionValue = questionnaireViewItem.questionnaireItem - .getExtensionByUrl(GPS_COORDINATE_EXTENSION_URL) - .value as StringType + .getExtensionByUrl(PRIMARY_GPS_COORDINATE_EXTENSION_URL) + ?.value as? StringType + ?: questionnaireViewItem.questionnaireItem + .getExtensionByUrl(GPS_COORDINATE_EXTENSION_URL) + .value as StringType when (gpsCoordinateExtensionValue.valueAsString) { GPS_COORDINATE_EXTENSION_VALUE_LATITUDE -> { supportFragmentManager.setFragmentResultListener( @@ -148,9 +151,12 @@ object LocationGpsCoordinateViewHolderFactory : } fun matcher(questionnaireItem: Questionnaire.QuestionnaireItemComponent): Boolean { - return questionnaireItem.hasExtension(GPS_COORDINATE_EXTENSION_URL) + return questionnaireItem.hasExtension(PRIMARY_GPS_COORDINATE_EXTENSION_URL) || + questionnaireItem.hasExtension(GPS_COORDINATE_EXTENSION_URL) } + const val PRIMARY_GPS_COORDINATE_EXTENSION_URL = + "https://github.com/google/android-fhir/StructureDefinition/gps-coordinate" const val GPS_COORDINATE_EXTENSION_URL = "gps-coordinate" const val GPS_COORDINATE_EXTENSION_VALUE_LATITUDE = "latitude" const val GPS_COORDINATE_EXTENSION_VALUE_LONGITUDE = "longitude" diff --git a/docs/use/extensions.md b/docs/use/extensions.md index 77f89e0937..df009d5d64 100644 --- a/docs/use/extensions.md +++ b/docs/use/extensions.md @@ -5,3 +5,7 @@ This page lists [FHIR Extensions](http://hl7.org/fhir/extensibility.html) define * Dialog extension (https://github.com/google/android-fhir/StructureDefinition/dialog) This extension can only be used if the questionnaire item type is `choice` and has an item-control of type `check-box` or `radio-button`. + +* GPS Coordinate URL extension (https://github.com/google/android-fhir/StructureDefinition/gps-coordinate) + + This URL extension can only be used if the questionnaire item type is `decimal` and has a valueString `latitude` or `longitude` . \ No newline at end of file