Backward compatibility hack : send delete when empty.

Some apps depend on the keyboard sending something to them
when the text is empty. This is BROKEN. Your app must not lie
to the keyboard about what is before the cursor. If there is something
to delete, you must not pretend there is not and try to catch some
delete event. This will result in a bad user experience. This will not
work with all IMEs. If your app needs this broken behavior, you're
doing it wrong. Seriously guys, we're not in the era of typewriters
any more, there are touch screens, there are gestures, there is
accessibility, there are many innovative IMEs that don't have
keys. Do *NOT* rely on key events.

This change implements an ugly hack so that these broken apps
may continue half-working with LatinIME. We are very unhappy
about this.

Bug: 12998568
Change-Id: Ia62ae2fbee4fee65b463acf3a79aafcfd0defa1d
This commit is contained in:
Jean Chalard 2014-02-13 18:15:22 +09:00
parent e0a425681c
commit 2c48846903

View File

@ -973,7 +973,13 @@ public final class InputLogic {
} else { } else {
final int codePointBeforeCursor = mConnection.getCodePointBeforeCursor(); final int codePointBeforeCursor = mConnection.getCodePointBeforeCursor();
if (codePointBeforeCursor == Constants.NOT_A_CODE) { if (codePointBeforeCursor == Constants.NOT_A_CODE) {
// Nothing to delete before the cursor. // HACK for backward compatibility with broken apps that haven't realized
// yet that hardware keyboards are not the only way of inputting text.
// Nothing to delete before the cursor. We should not do anything, but many
// broken apps expect something to happen in this case so that they can
// catch it and have their broken interface react. If you need the keyboard
// to do this, you're doing it wrong -- please fix your app.
mConnection.deleteSurroundingText(1, 0);
return; return;
} }
final int lengthToDelete = final int lengthToDelete =