Revert "Fix problem with accents caused by race condition."
This reverts commit b9ef84152bce335b4814175204744ea2d5b148b4, which
introduced a new issue with certain software IMEs in fields with
autocomplete="off". The accent issue is a longstanding bug and previous
WebView releases already contained it, so reverting this change does not
introduce a regression.
Bug: 19363073
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 972c082..5b0f213 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
@@ -389,14 +389,6 @@
return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
}
- // Some keys we just want to pass events straight through. This allows
- // proper "repeating key" behavior with physical keyboards.
- int eventKeyCode = event.getKeyCode();
- if (eventKeyCode == KeyEvent.KEYCODE_DEL || eventKeyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
- mPendingAccent = 0;
- return mImeAdapter.translateAndSendNativeEvents(event, NO_ACCENT);
- }
-
int unicodeChar = event.getUnicodeChar();
// If this is a key-up, and backspace/del or if the key has a character representation,
@@ -435,6 +427,7 @@
return true;
}
}
+ mImeAdapter.translateAndSendNativeEvents(event, mPendingAccent);
// Physical keyboards also have their events come through here though not
// by BaseInputConnection. In order to support "accent" key sequences
@@ -445,11 +438,9 @@
// Copy class variable to local because class version may get indirectly
// cleared by the deleteSurroundingText() call below.
int pendingAccent = mPendingAccent;
- int nextAccent = mPendingAccent;
if ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) != 0) {
- pendingAccent = NO_ACCENT;
- nextAccent = unicodeChar & KeyCharacterMap.COMBINING_ACCENT_MASK;
+ pendingAccent = unicodeChar & KeyCharacterMap.COMBINING_ACCENT_MASK;
} else if (pendingAccent != NO_ACCENT) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
int combined = KeyEvent.getDeadChar(pendingAccent, unicodeChar);
@@ -463,18 +454,16 @@
// Previous accent doesn't combine with this character
// so assume both are completely independent.
pendingAccent = NO_ACCENT;
- nextAccent = NO_ACCENT;
}
}
if (event.getAction() == KeyEvent.ACTION_UP) {
// Forget accent after release of key being accented.
- nextAccent = NO_ACCENT;
+ pendingAccent = NO_ACCENT;
}
}
- mImeAdapter.translateAndSendNativeEvents(event, pendingAccent);
- mPendingAccent = nextAccent;
+ mPendingAccent = pendingAccent;
return true;
}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
index a43001b..398ba03 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
@@ -623,6 +623,7 @@
// O (accented key)
dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_O));
+ assertUpdateStateCall(mConnection, 1000);
assertEquals("hi", mConnection.getTextBeforeCursor(9, 0));
dispatchKeyEvent(mConnection, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_O));
assertEquals("hiô", mConnection.getTextBeforeCursor(9, 0));