Skip to content

Commit 8c7c3ac

Browse files
committed
fix(ui): text field input filters duplicating on repeated dialog open
On some ROMs (GrapheneOS, /e/ OS), the setOnBindEditTextListener callback is invoked multiple times. The previous code appended filters to editText.filters each call, causing LengthFilter/SpecificCharsInputFilter to accumulate and produce erratic typing behaviour. Fixes #2205
1 parent 291632e commit 8c7c3ac

1 file changed

Lines changed: 4 additions & 12 deletions

File tree

project/app/src/main/java/androidx/preference/ValidatingEditTextPreference.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,16 @@ open class ValidatingEditTextPreference : EditTextPreference {
8080
}
8181
}
8282
super.setOnBindEditTextListener { editText ->
83+
val newFilters = mutableListOf<InputFilter>()
8384
attributes.forEach { attribute, value ->
8485
when (attribute) {
8586
android.R.attr.inputType -> editText.inputType = value.data
8687
android.R.attr.lines -> editText.setLines(value.data)
87-
android.R.attr.maxLength ->
88-
editText.filters =
89-
editText.filters
90-
.toMutableList()
91-
.apply { add(LengthFilter(value.data)) }
92-
.toTypedArray()
93-
android.R.attr.digits ->
94-
editText.filters =
95-
editText.filters
96-
.toMutableList()
97-
.apply { add(SpecificCharsInputFilter(value.string.toList())) }
98-
.toTypedArray()
88+
android.R.attr.maxLength -> newFilters.add(LengthFilter(value.data))
89+
android.R.attr.digits -> newFilters.add(SpecificCharsInputFilter(value.string.toList()))
9990
}
10091
}
92+
editText.filters = newFilters.toTypedArray()
10193
onBindEditTextListener?.onBindEditText(editText)
10294
}
10395
}

0 commit comments

Comments
 (0)