From bbf889730e2e1b5490e28669b3d9cab073a19598 Mon Sep 17 00:00:00 2001 From: Sanjay P Date: Fri, 15 Sep 2023 13:41:13 +0530 Subject: [PATCH] TP-40997 | Clear focus of cursor of CustomTextFieldRenderer on update data action (#178) --- .../uitron/render/CustomTextFieldRenderer.kt | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt index 4c873c2..e02a96d 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt @@ -15,9 +15,9 @@ import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.layout.layoutId +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.text.* -import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -79,11 +79,10 @@ class CustomTextFieldRenderer( val isTextTransformedValueEdited = remember { mutableStateOf(false) } - var cursorSelection by remember { mutableStateOf(TextRange.Zero) } - + val focusManager = LocalFocusManager.current var inputValue by remember(customTextFieldData?.inputText) { if (isTextTransformedValueEdited.value.not()) { - cursorSelection = TextRange(customTextFieldData?.inputText.orEmpty().length) + focusManager.clearFocus() } val input = onInputValueChange( input = customTextFieldData?.inputText.orEmpty(), @@ -92,7 +91,7 @@ class CustomTextFieldRenderer( uiTronViewModel = uiTronViewModel, isTextTransformedValueUpdated = isTextTransformedValueEdited ) - mutableStateOf(TextFieldValue(text = input, selection = cursorSelection)) + mutableStateOf(input) } var isFocused by remember { mutableStateOf(false) @@ -206,17 +205,14 @@ class CustomTextFieldRenderer( value = inputValue, onValueChange = { input -> val editedInput = onInputValueChange( - input = input.text, + input = input, property = property, customTextFieldData = customTextFieldData, uiTronViewModel = uiTronViewModel, isTextTransformedValueUpdated = mutableStateOf(false) ) - if (input.text != inputValue.text) { - isTextTransformedValueEdited.value = true - } - cursorSelection = TextRange(input.selection.start) - inputValue = TextFieldValue(text = editedInput, selection = cursorSelection) + isTextTransformedValueEdited.value = true + inputValue = editedInput }, singleLine = property.singleLine ?: false, visualTransformation = property.visualTransformation?.getVisualTransformation() @@ -226,7 +222,7 @@ class CustomTextFieldRenderer( property.cursorColor?.hexToComposeColor ?: Color.Gray ) ) - if (inputValue.text.isEmpty()) { + if (inputValue.isEmpty()) { property.hintStyle?.let { TextRenderer().Render( property = it, @@ -254,7 +250,7 @@ class CustomTextFieldRenderer( } uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] = TextData(customTextFieldData.errorMessage) - } else if (inputValue.text.isNotNullAndNotEmpty()) { + } else if (inputValue.isNotNullAndNotEmpty()) { if (isFocused) { borderColor = property.colors?.focusedBorderColor } else { @@ -262,7 +258,7 @@ class CustomTextFieldRenderer( } val successText = getTransformedText( property.successTextTransformation, - inputValue.text + inputValue ) if (successText.isNotNullAndNotEmpty()) { property.successView?.let {