Merge "Update ALT+DEL/FORWARD_DEL behavior" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f59aed083d
@@ -345,7 +345,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
|
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
|
||||||
if (isAltActive && deleteLine(view, content)) {
|
if (isAltActive && deleteLineFromCursor(view, content, isForwardDelete)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,18 +438,34 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean deleteLine(View view, Editable content) {
|
private boolean deleteLineFromCursor(View view, Editable content, boolean forward) {
|
||||||
if (view instanceof TextView) {
|
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 TextView textView = (TextView) view;
|
||||||
final Layout layout = textView.getLayout();
|
final Layout layout = textView.getLayout();
|
||||||
if (layout != null && !textView.isOffsetMappingAvailable()) {
|
if (layout != null && !textView.isOffsetMappingAvailable()) {
|
||||||
final int line = layout.getLineForOffset(Selection.getSelectionStart(content));
|
final int line = layout.getLineForOffset(Selection.getSelectionStart(content));
|
||||||
final int start = layout.getLineStart(line);
|
final int start = layout.getLineStart(line);
|
||||||
final int end = layout.getLineEnd(line);
|
final int end = layout.getLineEnd(line);
|
||||||
if (end != start) {
|
|
||||||
content.delete(start, end);
|
if (forward) {
|
||||||
return true;
|
content.delete(selectionMin, end);
|
||||||
|
} else {
|
||||||
|
content.delete(start, selectionMax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user