From 621f97d161e8e21031e18a9f11e402edb5ad41aa Mon Sep 17 00:00:00 2001 From: Dev Sharma Date: Wed, 19 Nov 2025 00:21:15 +0530 Subject: [PATCH] [PM-27869] fix/[PM-26241] : draw out keyboard on talkback click (#6129) --- .../tools/feature/generator/GeneratorScreenTest.kt | 3 ++- .../vault/feature/addedit/VaultAddEditScreenTest.kt | 2 +- .../platform/components/field/BitwardenTextField.kt | 13 +++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreenTest.kt index 4bdf469427..ac4a35a39d 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreenTest.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.test.onSiblings import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performScrollTo import androidx.compose.ui.test.performTextInput +import androidx.compose.ui.test.performTextReplacement import androidx.compose.ui.test.performTouchInput import androidx.compose.ui.test.swipeRight import androidx.compose.ui.text.AnnotatedString @@ -973,7 +974,7 @@ class GeneratorScreenTest : BitwardenComposeTest() { composeTestRule .onNodeWithText("Word separator") .performScrollTo() - .performTextInput("a") + .performTextReplacement("a") verify { viewModel.trySendAction( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 28907bd9c9..60c0cf8abf 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -1266,7 +1266,7 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { verify { viewModel.trySendAction( VaultAddEditAction.ItemType.LoginType.UriValueChange( - UriItem(id = "TestId", uri = "TestURI", match = null, checksum = null), + UriItem(id = "TestId", uri = "URITest", match = null, checksum = null), ), ) } diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/BitwardenTextField.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/BitwardenTextField.kt index a7c79f6d49..7abeab85a5 100644 --- a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/BitwardenTextField.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/field/BitwardenTextField.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.platform.TextToolbar import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.TextFieldValue @@ -278,14 +279,16 @@ fun BitwardenTextField( val isDropDownExpanded = filteredAutoCompleteList.isNotEmpty() && hasFocused ExposedDropdownMenuBox( expanded = isDropDownExpanded, - onExpandedChange = { hasFocused = false }, + onExpandedChange = { + hasFocused = !hasFocused + focusRequester.requestFocus() + }, modifier = modifier.defaultMinSize(minHeight = 60.dp), ) { Column( modifier = Modifier .onGloballyPositioned { widthPx = it.size.width } .onFocusEvent { focusState -> hasFocused = focusState.hasFocus } - .focusRequester(focusRequester) .cardStyle( cardStyle = cardStyle, paddingTop = 6.dp, @@ -377,8 +380,14 @@ fun BitwardenTextField( .nullableTestTag(tag = textFieldTestTag) .menuAnchor(type = ExposedDropdownMenuAnchorType.PrimaryEditable) .fillMaxWidth() + .focusRequester(focusRequester) .onFocusChanged { focusState -> focused = focusState.isFocused + if (focused) { + textFieldValueState = textFieldValueState.copy( + selection = TextRange(textFieldValueState.text.length), + ) + } }, ) supportingContent