Index: content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
index 9352f378f2e0156cebce58fbaf2cdd9686576d5f..de9f9cce77fdea84ce6f403d65421ea9443a6b78 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
@@ -318,13 +318,36 @@ public class AdapterInputConnection extends BaseInputConnection { |
if (DEBUG) { |
Log.w(TAG, "deleteSurroundingText [" + beforeLength + " " + afterLength + "]"); |
} |
+ int originalBeforeLength = beforeLength; |
+ int originalAfterLength = afterLength; |
int availableBefore = Selection.getSelectionStart(mEditable); |
int availableAfter = mEditable.length() - Selection.getSelectionEnd(mEditable); |
beforeLength = Math.min(beforeLength, availableBefore); |
afterLength = Math.min(afterLength, availableAfter); |
super.deleteSurroundingText(beforeLength, afterLength); |
updateSelectionIfRequired(); |
- return mImeAdapter.deleteSurroundingText(beforeLength, afterLength); |
+ |
+ // For single-char deletion calls |ImeAdapter.sendKeyEventWithKeyCode| with the real key |
+ // code. For multi-character deletion, executes deletion by calling |
+ // |ImeAdapter.deleteSurroundingText| and sends synthetic key events with a dummy key code. |
+ int keyCode = KeyEvent.KEYCODE_UNKNOWN; |
+ if (originalBeforeLength == 1 && originalAfterLength == 0) |
+ keyCode = KeyEvent.KEYCODE_DEL; |
+ else if (originalBeforeLength == 0 && originalAfterLength == 1) |
+ keyCode = KeyEvent.KEYCODE_FORWARD_DEL; |
+ |
+ boolean result = true; |
+ if (keyCode == KeyEvent.KEYCODE_UNKNOWN) { |
+ result = mImeAdapter.sendSyntheticKeyEvent( |
+ ImeAdapter.sEventTypeRawKeyDown, SystemClock.uptimeMillis(), keyCode, 0); |
+ result &= mImeAdapter.deleteSurroundingText(beforeLength, afterLength); |
+ result &= mImeAdapter.sendSyntheticKeyEvent( |
+ ImeAdapter.sEventTypeKeyUp, SystemClock.uptimeMillis(), keyCode, 0); |
+ } else { |
+ mImeAdapter.sendKeyEventWithKeyCode( |
+ keyCode, KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE); |
+ } |
+ return result; |
} |
/** |