summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Seigo Nonaka <nona@google.com> 2023-04-27 11:27:07 +0900
committer Seigo Nonaka <nona@google.com> 2023-04-28 01:08:52 +0000
commit8edcadc04ce04b216cdd1a280217412b7a47b29b (patch)
tree0638a4ba9731fef833b8a0f2c5d7f0b9b94d64e2
parent41d88dd57b49cfe08ef55317a5b72ec24d183e71 (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.java26
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;