Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1094)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java

Issue 393933004: Send the real key code in deleteSurroundingText (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added tests Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
/**
« no previous file with comments | « no previous file | content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698