diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireEditAdapter.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireEditAdapter.kt
index c1df3c0f9f..6e6e610f43 100644
--- a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireEditAdapter.kt
+++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireEditAdapter.kt
@@ -35,6 +35,7 @@ import com.google.android.fhir.datacapture.views.factories.EditTextIntegerViewHo
import com.google.android.fhir.datacapture.views.factories.EditTextMultiLineViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.EditTextSingleLineViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.GroupViewHolderFactory
+import com.google.android.fhir.datacapture.views.factories.LocationWidgetViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.QuantityViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemDialogSelectViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolder
@@ -95,6 +96,7 @@ internal class QuestionnaireEditAdapter(
QuestionnaireViewHolderType.SLIDER -> SliderViewHolderFactory
QuestionnaireViewHolderType.PHONE_NUMBER -> PhoneNumberViewHolderFactory
QuestionnaireViewHolderType.ATTACHMENT -> AttachmentViewHolderFactory
+ QuestionnaireViewHolderType.LOCATION_WIDGET -> LocationWidgetViewHolderFactory
}
return viewHolderFactory.create(parent)
}
diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewHolderType.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewHolderType.kt
index 5a64806841..083c3dd3fa 100644
--- a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewHolderType.kt
+++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewHolderType.kt
@@ -45,6 +45,7 @@ enum class QuestionnaireViewHolderType(val value: Int) {
SLIDER(15),
PHONE_NUMBER(16),
ATTACHMENT(17),
+ LOCATION_WIDGET(18),
;
companion object {
diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireItemComponents.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireItemComponents.kt
index 5ae1cd30b8..cccdae4f75 100644
--- a/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireItemComponents.kt
+++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireItemComponents.kt
@@ -170,6 +170,7 @@ enum class ItemControlTypes(
RADIO_BUTTON("radio-button", QuestionnaireViewHolderType.RADIO_GROUP),
SLIDER("slider", QuestionnaireViewHolderType.SLIDER),
PHONE_NUMBER("phone-number", QuestionnaireViewHolderType.PHONE_NUMBER),
+ LOCATION_WIDGET("location-widget", QuestionnaireViewHolderType.LOCATION_WIDGET),
}
/**
diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/LocationWidgetViewHolderFactory.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/LocationWidgetViewHolderFactory.kt
new file mode 100644
index 0000000000..f907dc9a75
--- /dev/null
+++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/LocationWidgetViewHolderFactory.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2023 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.fhir.datacapture.views.factories
+
+import android.view.View
+import com.google.android.fhir.datacapture.R
+import com.google.android.fhir.datacapture.views.HeaderView
+import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
+import com.google.android.material.textfield.MaterialAutoCompleteTextView
+
+internal object LocationWidgetViewHolderFactory :
+ QuestionnaireItemViewHolderFactory(R.layout.location_widget_view) {
+ override fun getQuestionnaireItemViewHolderDelegate(): QuestionnaireItemViewHolderDelegate =
+ object : QuestionnaireItemViewHolderDelegate {
+ private lateinit var header: HeaderView
+ private lateinit var autoCompleteTextView: MaterialAutoCompleteTextView
+
+ override lateinit var questionnaireViewItem: QuestionnaireViewItem
+
+ override fun init(itemView: View) {
+ header = itemView.findViewById(R.id.header)
+ autoCompleteTextView = itemView.findViewById(R.id.autoCompleteTextView)
+ }
+
+ override fun bind(questionnaireViewItem: QuestionnaireViewItem) {
+ header.bind(questionnaireViewItem)
+ autoCompleteTextView.setText("-83.694710, 42.256500, 0") // todo:
+ autoCompleteTextView.setAdapter(null)
+ }
+
+ override fun setReadOnly(isReadOnly: Boolean) {
+ // TODO("Not yet implemented")
+ }
+ }
+}
diff --git a/datacapture/src/main/res/drawable/gm_location_on_24.xml b/datacapture/src/main/res/drawable/gm_location_on_24.xml
new file mode 100644
index 0000000000..2a6b5d6728
--- /dev/null
+++ b/datacapture/src/main/res/drawable/gm_location_on_24.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/datacapture/src/main/res/layout/display_view.xml b/datacapture/src/main/res/layout/display_view.xml
index 6529da065b..f5defa44ff 100644
--- a/datacapture/src/main/res/layout/display_view.xml
+++ b/datacapture/src/main/res/layout/display_view.xml
@@ -29,10 +29,7 @@
android:layout_height="wrap_content"
/>
-
+
+
diff --git a/datacapture/src/main/res/layout/location_widget_view.xml b/datacapture/src/main/res/layout/location_widget_view.xml
new file mode 100644
index 0000000000..d928e11b62
--- /dev/null
+++ b/datacapture/src/main/res/layout/location_widget_view.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/src/main/assets/test-location-widget.json b/demo/src/main/assets/test-location-widget.json
new file mode 100644
index 0000000000..b181436655
--- /dev/null
+++ b/demo/src/main/assets/test-location-widget.json
@@ -0,0 +1,53 @@
+{
+ "resourceType": "Questionnaire",
+ "language": "en",
+ "status": "active",
+ "date": "2020-11-18T07:24:47.111Z",
+ "extension": [
+ {
+ "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-launchContext",
+ "extension": [
+ {
+ "url": "name",
+ "valueCoding": {
+ "system": "http://hl7.org/fhir/uv/sdc/CodeSystem/launchContext",
+ "code": "client",
+ "display": "Client as a Patient"
+ }
+ },
+ {
+ "url": "type",
+ "valueCode": "Patient"
+ }
+ ]
+ }
+ ],
+ "item": [
+ {
+ "linkId": "PR",
+ "type": "group",
+ "text": "Test Group",
+ "item": [
+ {
+ "linkId": "Location widget",
+ "type": "string",
+ "text": "Record GPS Location",
+ "required": true,
+ "extension": [
+ {
+ "url": "https://github.com/google/android-fhir/StructureDefinition/questionnaire-itemControl",
+ "valueCodeableConcept": {
+ "coding": [
+ {
+ "system": "https://github.com/google/android-fhir/questionnaire-item-control",
+ "code": "location-widget"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/demo/src/main/java/com/google/android/fhir/demo/AddPatientFragment.kt b/demo/src/main/java/com/google/android/fhir/demo/AddPatientFragment.kt
index 8712d12407..c6f42bd910 100644
--- a/demo/src/main/java/com/google/android/fhir/demo/AddPatientFragment.kt
+++ b/demo/src/main/java/com/google/android/fhir/demo/AddPatientFragment.kt
@@ -78,7 +78,8 @@ class AddPatientFragment : Fragment(R.layout.add_patient_fragment) {
private fun updateArguments() {
requireArguments()
- .putString(QUESTIONNAIRE_FILE_PATH_KEY, "new-patient-registration-paginated.json")
+ // .putString(QUESTIONNAIRE_FILE_PATH_KEY, "new-patient-registration-paginated.json")
+ .putString(QUESTIONNAIRE_FILE_PATH_KEY, "test-location-widget.json")
}
private fun addQuestionnaireFragment() {