From dc230f1c300102ac9ad5ead77d694651228ba4e4 Mon Sep 17 00:00:00 2001 From: ariskotsomitopoulos Date: Thu, 21 Oct 2021 14:31:50 +0300 Subject: [PATCH] Refactor to handle more cases --- .../app/features/form/FormEditTextItem.kt | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt b/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt index 328385049b..e23a076485 100644 --- a/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt +++ b/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt @@ -107,15 +107,9 @@ abstract class FormEditTextItem : VectorEpoxyModel() { } holder.textInputEditText.isEnabled = enabled - inputType?.let { holder.textInputEditText.inputType = it } - imeOptions?.let { holder.textInputEditText.imeOptions = it } - if (singleLine) { - holder.textInputEditText.maxLines = 1 - holder.textInputEditText.minLines = 1 - imeOptions ?: run { holder.textInputEditText.imeOptions = EditorInfo.IME_ACTION_NEXT } - inputType ?: run { holder.textInputEditText.setRawInputType(InputType.TYPE_CLASS_TEXT) } - } + configureInputType(holder) + configureImeOptions(holder) holder.textInputEditText.addTextChangedListenerOnce(onTextChangeListener) holder.textInputEditText.setOnEditorActionListener(editorActionListener) @@ -131,6 +125,32 @@ abstract class FormEditTextItem : VectorEpoxyModel() { } } + /** + * Configure the inputType of the EditText, input type should be always defined + * especially when we want to use a single line, we set the InputType to InputType.TYPE_CLASS_TEXT + * while the default for the EditText is InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE + */ + private fun configureInputType(holder: Holder) = + inputType?.let { + holder.textInputEditText.setRawInputType(it) + } ?: when (singleLine) { + true -> holder.textInputEditText.setRawInputType(InputType.TYPE_CLASS_TEXT) + false -> holder.textInputEditText.setRawInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE) + } + + /** + * Configure the imeOptions of the EditText, when imeOptions are not defined by user + * EditorInfo.IME_ACTION_NEXT will be used for singleLine EditTexts to disable "new line" + * while EditorInfo.IME_ACTION_NONE will be used for all the other cases + */ + private fun configureImeOptions(holder: Holder) = + imeOptions?.let { + holder.textInputEditText.imeOptions = it + } ?: when (singleLine) { + true -> holder.textInputEditText.imeOptions = EditorInfo.IME_ACTION_NEXT + false -> holder.textInputEditText.imeOptions = EditorInfo.IME_ACTION_NONE + } + override fun shouldSaveViewState(): Boolean { return false }