diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/DropDownViewHolderFactory.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/DropDownViewHolderFactory.kt
index 8bcfc54e31..e3f6b0fbae 100644
--- a/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/DropDownViewHolderFactory.kt
+++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/factories/DropDownViewHolderFactory.kt
@@ -19,11 +19,14 @@ package com.google.android.fhir.datacapture.views.factories
import android.content.Context
import android.graphics.drawable.Drawable
import android.text.Spanned
+import android.text.method.TextKeyListener
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
import android.widget.AdapterView
import android.widget.ArrayAdapter
+import android.widget.FrameLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
@@ -41,6 +44,7 @@ import com.google.android.fhir.datacapture.views.HeaderView
import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
import com.google.android.material.textfield.MaterialAutoCompleteTextView
import com.google.android.material.textfield.TextInputLayout
+import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.hl7.fhir.r4.model.QuestionnaireResponse
import timber.log.Timber
@@ -52,6 +56,7 @@ internal object DropDownViewHolderFactory :
private lateinit var header: HeaderView
private lateinit var textInputLayout: TextInputLayout
private lateinit var autoCompleteTextView: MaterialAutoCompleteTextView
+ private lateinit var clearInputIcon: FrameLayout
override lateinit var questionnaireViewItem: QuestionnaireViewItem
private lateinit var context: AppCompatActivity
@@ -59,7 +64,13 @@ internal object DropDownViewHolderFactory :
header = itemView.findViewById(R.id.header)
textInputLayout = itemView.findViewById(R.id.text_input_layout)
autoCompleteTextView = itemView.findViewById(R.id.auto_complete)
+ clearInputIcon = itemView.findViewById(R.id.clear_input_icon)
context = itemView.context.tryUnwrapContext()!!
+ autoCompleteTextView.setOnFocusChangeListener { view, hasFocus ->
+ if (!hasFocus) {
+ (view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(view.windowToken, 0)
+ }
+ }
}
override fun bind(questionnaireViewItem: QuestionnaireViewItem) {
@@ -130,6 +141,16 @@ internal object DropDownViewHolderFactory :
}
}
}
+ val isEditable = questionnaireViewItem.answers.isEmpty()
+ if (!isEditable) autoCompleteTextView.clearFocus()
+ autoCompleteTextView.keyListener = if (isEditable) TextKeyListener.getInstance() else null
+ clearInputIcon.visibility = if (isEditable) View.GONE else View.VISIBLE
+ clearInputIcon.setOnClickListener {
+ context.lifecycleScope.launch {
+ delay(200) // to show ripple effect on the icon before clearing the answer
+ questionnaireViewItem.clearAnswer()
+ }
+ }
displayValidationResult(questionnaireViewItem.validationResult)
}
diff --git a/datacapture/src/main/res/drawable/ic_clear.xml b/datacapture/src/main/res/drawable/ic_clear.xml
index 625ec29530..584a2d08cd 100644
--- a/datacapture/src/main/res/drawable/ic_clear.xml
+++ b/datacapture/src/main/res/drawable/ic_clear.xml
@@ -1,12 +1,13 @@
diff --git a/datacapture/src/main/res/layout/drop_down_view.xml b/datacapture/src/main/res/layout/drop_down_view.xml
index 318a75ce12..60422cf6be 100644
--- a/datacapture/src/main/res/layout/drop_down_view.xml
+++ b/datacapture/src/main/res/layout/drop_down_view.xml
@@ -13,7 +13,7 @@
-->
+ android:layout_height="wrap_content">
+ android:layout_height="wrap_content">
+ android:drawablePadding="@dimen/icon_drawable_padding" />
-
+ android:padding="@dimen/drop_down_clear_input_icon_ripple_padding"
+ android:layout_marginTop="@dimen/drop_down_clear_icon_margin_top"
+ android:layout_marginEnd="@dimen/drop_down_clear_icon_margin_end">
+
+
+
+
diff --git a/datacapture/src/main/res/values/dimens.xml b/datacapture/src/main/res/values/dimens.xml
index 04e01f3162..f44604a271 100644
--- a/datacapture/src/main/res/values/dimens.xml
+++ b/datacapture/src/main/res/values/dimens.xml
@@ -95,7 +95,9 @@
16dp
- 28dp
+ 38dp
+ 4dp
+ 4dp
48dp