From fdc92712c4baa803fcb673128f4fbff54e95c34c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bispo?= Date: Tue, 11 Feb 2025 23:02:08 +0000 Subject: [PATCH] [PM-17368] After cut, update text and clear selection. (#4714) --- .../components/field/BitwardenPasswordField.kt | 2 ++ .../platform/components/field/BitwardenTextField.kt | 2 ++ .../field/toolbar/BitwardenCutCopyTextToolbar.kt | 13 ++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt index be66937d7f8..822263e0051 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenPasswordField.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalTextToolbar import androidx.compose.ui.platform.TextToolbar import androidx.compose.ui.res.stringResource @@ -123,6 +124,7 @@ fun BitwardenPasswordField( onValueChange = onValueChange, defaultTextToolbar = LocalTextToolbar.current, clipboardManager = LocalClipboardManager.current.nativeClipboard, + focusManager = LocalFocusManager.current, ) TextToolbarType.NONE -> BitwardenEmptyTextToolbar diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt index 3202f820459..33e405f6fb4 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/BitwardenTextField.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.focus.onFocusEvent import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalTextToolbar import androidx.compose.ui.platform.TextToolbar import androidx.compose.ui.semantics.CustomAccessibilityAction @@ -250,6 +251,7 @@ fun BitwardenTextField( onValueChange = onValueChange, defaultTextToolbar = LocalTextToolbar.current, clipboardManager = LocalClipboardManager.current.nativeClipboard, + focusManager = LocalFocusManager.current, ) TextToolbarType.NONE -> BitwardenEmptyTextToolbar diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/toolbar/BitwardenCutCopyTextToolbar.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/toolbar/BitwardenCutCopyTextToolbar.kt index 58a02c7407e..9204f804396 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/toolbar/BitwardenCutCopyTextToolbar.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/field/toolbar/BitwardenCutCopyTextToolbar.kt @@ -2,6 +2,7 @@ package com.x8bit.bitwarden.ui.platform.components.field.toolbar import android.content.ClipData import android.content.ClipboardManager +import androidx.compose.ui.focus.FocusManager import androidx.compose.ui.geometry.Rect import androidx.compose.ui.platform.TextToolbar import androidx.compose.ui.platform.TextToolbarStatus @@ -19,6 +20,7 @@ class BitwardenCutCopyTextToolbar( private val onValueChange: (String) -> Unit, private val defaultTextToolbar: TextToolbar, private val clipboardManager: ClipboardManager, + private val focusManager: FocusManager, ) : TextToolbar { override val status: TextToolbarStatus get() = defaultTextToolbar.status @@ -58,7 +60,16 @@ class BitwardenCutCopyTextToolbar( ) }, ) - onValueChange("") + // Clear selection + focusManager.clearFocus(force = true) + // Add correct text without selection + onValueChange( + value.text.replaceRange( + minOf(value.selection.start, value.selection.end), + maxOf(value.selection.start, value.selection.end), + "", + ), + ) } }, onSelectAllRequested = onSelectAllRequested,