Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Dropdown Behavior in Questionnaire Items #2393

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open
Changes from 6 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
24404bb
- Make the dropdown non-editable after an option is selected.
qaziabubakar-vd Dec 29, 2023
730cd1b
Show the dropdown once the text is deleted
qaziabubakar-vd Jan 3, 2024
5094e49
Merge branch 'master' into issue-2228-dropdown-non-editable
qaziabubakar-vd Jan 8, 2024
caeae47
Spotless Apply
qaziabubakar-vd Jan 8, 2024
9e30f45
Merge remote-tracking branch 'origin/issue-2228-dropdown-non-editable…
qaziabubakar-vd Jan 8, 2024
3bead63
Merge branch 'master' into issue-2228-dropdown-non-editable
f-odhiambo Jan 15, 2024
a6959c6
Merge branch 'master' into issue-2228-dropdown-non-editable
jingtang10 Feb 6, 2024
dd3ead3
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
qaziabubakar-vd Feb 26, 2024
d5d7355
Update header_view.xml according to the new design
qaziabubakar-vd Feb 26, 2024
916829e
Merge remote-tracking branch 'origin/issue-2228-dropdown-non-editable…
qaziabubakar-vd Feb 26, 2024
6fbdf2e
Merge branch 'master' into issue-2228-dropdown-non-editable
qaziabubakar-vd Feb 26, 2024
d6bf618
Update DropDownViewHolderFactory
qaziabubakar-vd Feb 26, 2024
ebdfb28
Merge branch 'master' into issue-2228-dropdown-non-editable
qaziabubakar-vd Feb 26, 2024
d6a4545
Update DropDownViewHolderFactory to have a clear icon once the option…
qaziabubakar-vd Feb 26, 2024
c1daa30
Update when the clearIcon is enabled
qaziabubakar-vd Mar 15, 2024
7bb2776
Update clearIcon visibility based on the readOnly property
qaziabubakar-vd Mar 15, 2024
32cb079
clear answer from the questionnaireViewItem when the user taps on the…
qaziabubakar-vd Mar 15, 2024
c9baa38
Add new tests
qaziabubakar-vd Mar 18, 2024
36d16fc
Add new code comments
qaziabubakar-vd Mar 18, 2024
a35e0a7
Merge remote-tracking branch 'Android-FHIR/master' into issue-2228-dr…
qaziabubakar-vd Mar 18, 2024
36a1806
Resolve conflicts
qaziabubakar-vd Mar 18, 2024
b305bb0
Merge branch 'master' into issue-2228-dropdown-non-editable
qaziabubakar-vd Mar 19, 2024
7e68464
Merge branch 'master' into issue-2228-dropdown-non-editable
dubdabasoduba Oct 23, 2024
dd187c3
Merge branch 'master' of github.com:google/android-fhir into issue-22…
FikriMilano Jan 28, 2025
a994dc3
Refactor implementation
FikriMilano Jan 28, 2025
fcf841e
Move clearInputIcon click listener to init function
FikriMilano Jan 28, 2025
12fb10b
Show dropdown once answer is cleared
FikriMilano Jan 28, 2025
d840f61
Remove ripple effect on clear icon
FikriMilano Jan 29, 2025
041d121
Add tests
FikriMilano Jan 29, 2025
c811179
spotless
FikriMilano Jan 29, 2025
3d1149b
Merge branch 'master' of github.com:google/android-fhir into issue-22…
FikriMilano Jan 29, 2025
00d235c
Rename test components
FikriMilano Jan 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2022-2023 Google LLC
* Copyright 2022-2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -18,6 +18,10 @@ package com.google.android.fhir.datacapture.views.factories

import android.content.Context
import android.graphics.drawable.Drawable
import android.os.Handler
import android.os.Looper
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -48,6 +52,7 @@ internal object DropDownViewHolderFactory :
private lateinit var autoCompleteTextView: MaterialAutoCompleteTextView
override lateinit var questionnaireViewItem: QuestionnaireViewItem
private lateinit var context: Context
private var isDropdownEditable = true
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved

override fun init(itemView: View) {
header = itemView.findViewById(R.id.header)
Expand Down Expand Up @@ -97,32 +102,69 @@ internal object DropDownViewHolderFactory :
null,
)
}

autoCompleteTextView.setAdapter(adapter)
autoCompleteTextView.onItemClickListener =
AdapterView.OnItemClickListener { _, _, position, _ ->
val selectedItem = adapter.getItem(position)
autoCompleteTextView.setText(selectedItem?.answerOptionString, false)
autoCompleteTextView.setCompoundDrawablesRelative(
adapter.getItem(position)?.answerOptionImage,
null,
null,
null,
)
val selectedAnswer =
questionnaireViewItem.enabledAnswerOptions
.firstOrNull { it.value.identifierString(context) == selectedItem?.answerId }
?.value

if (selectedAnswer == null) {
questionnaireViewItem.clearAnswer()
} else {
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent()
.setValue(selectedAnswer),
if (isDropdownEditable) {
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved
val selectedItem = adapter.getItem(position)
autoCompleteTextView.setText(selectedItem?.answerOptionString, false)
autoCompleteTextView.setCompoundDrawablesRelative(
adapter.getItem(position)?.answerOptionImage,
null,
null,
null,
)

isDropdownEditable = false
val selectedAnswer =
questionnaireViewItem.enabledAnswerOptions
.firstOrNull { it.value.identifierString(context) == selectedItem?.answerId }
?.value

if (selectedAnswer == null) {
questionnaireViewItem.clearAnswer()
} else {
questionnaireViewItem.setAnswer(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent()
.setValue(selectedAnswer),
)
}
}
}

autoCompleteTextView.addTextChangedListener(
object : TextWatcher {
override fun beforeTextChanged(
charSequence: CharSequence?,
start: Int,
count: Int,
after: Int,
) {}

override fun onTextChanged(
charSequence: CharSequence?,
start: Int,
before: Int,
count: Int,
) {}

override fun afterTextChanged(editable: Editable?) {
if (editable.isNullOrBlank()) {
Handler(Looper.getMainLooper())
.postDelayed(
{
if (autoCompleteTextView.isPopupShowing.not()) {
autoCompleteTextView.showDropDown()
}
},
100,
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved
)
}
}
},
)
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved

displayValidationResult(questionnaireViewItem.validationResult)
}

Expand All @@ -137,6 +179,7 @@ internal object DropDownViewHolderFactory :

override fun setReadOnly(isReadOnly: Boolean) {
textInputLayout.isEnabled = !isReadOnly
autoCompleteTextView.isEnabled = isDropdownEditable
qaziabubakar-vd marked this conversation as resolved.
Show resolved Hide resolved
}

private fun cleanupOldState() {
Expand Down
Loading