diff options
| author | 2023-04-27 11:27:07 +0900 | |
|---|---|---|
| committer | 2023-04-28 01:08:52 +0000 | |
| commit | 8edcadc04ce04b216cdd1a280217412b7a47b29b (patch) | |
| tree | 0638a4ba9731fef833b8a0f2c5d7f0b9b94d64e2 | |
| parent | 41d88dd57b49cfe08ef55317a5b72ec24d183e71 (diff) | |
Update ALT+DEL/FORWARD_DEL behavior
Old behavior
ALT+DEL: delete entire line
ALT+FORWARD_DEL: delete entire line
New behavior
ALT+DEL: delete characters after the cursor until line end offset.
ALT_FORWARD_DEL: delete characters before the cursor until line start offset.
Bug: 279723106
Test: atest android.text.method.cts.BaseKeyListenerTest
Change-Id: I725a929a224a2087b8809e5862d433ec113d67c0
| -rw-r--r-- | core/java/android/text/method/BaseKeyListener.java | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java index 9a120d57c2c3..e427908541e5 100644 --- a/core/java/android/text/method/BaseKeyListener.java +++ b/core/java/android/text/method/BaseKeyListener.java @@ -345,7 +345,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener } // Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible. - if (isAltActive && deleteLine(view, content)) { + if (isAltActive && deleteLineFromCursor(view, content, isForwardDelete)) { return true; } @@ -438,18 +438,34 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener return false; } - private boolean deleteLine(View view, Editable content) { + private boolean deleteLineFromCursor(View view, Editable content, boolean forward) { if (view instanceof TextView) { + final int selectionStart = Selection.getSelectionStart(content); + final int selectionEnd = Selection.getSelectionEnd(content); + final int selectionMin; + final int selectionMax; + if (selectionStart < selectionEnd) { + selectionMin = selectionStart; + selectionMax = selectionEnd; + } else { + selectionMin = selectionEnd; + selectionMax = selectionStart; + } + final TextView textView = (TextView) view; final Layout layout = textView.getLayout(); if (layout != null && !textView.isOffsetMappingAvailable()) { final int line = layout.getLineForOffset(Selection.getSelectionStart(content)); final int start = layout.getLineStart(line); final int end = layout.getLineEnd(line); - if (end != start) { - content.delete(start, end); - return true; + + if (forward) { + content.delete(selectionMin, end); + } else { + content.delete(start, selectionMax); } + + return true; } } return false; |