Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bed613cf authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Simulate hardware enter/delete events if the app targets < 16" into jb-dev

parents 92d7b55a 4e1a558e
Loading
Loading
Loading
Loading
+37 −3
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.PrintWriterPrinter;
import android.util.Printer;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -1224,6 +1226,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        }
    }

    static private void sendUpDownEnterOrBackspace(final int code, final InputConnection ic) {
        final long eventTime = SystemClock.uptimeMillis();
        ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
                KeyEvent.ACTION_DOWN, code, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
        ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
                KeyEvent.ACTION_UP, code, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
    }

    private void sendKeyCodePoint(int code) {
        // TODO: Remove this special handling of digit letters.
        // For backward compatibility. See {@link InputMethodService#sendKeyChar(char)}.
@@ -1234,8 +1246,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

        final InputConnection ic = getCurrentInputConnection();
        if (ic != null) {
            // 16 is android.os.Build.VERSION_CODES.JELLY_BEAN but we can't write it because
            // we want to be able to compile against the Ice Cream Sandwich SDK.
            if (Keyboard.CODE_ENTER == code && mTargetApplicationInfo != null
                    && mTargetApplicationInfo.targetSdkVersion < 16) {
                // Backward compatibility mode. Before Jelly bean, the keyboard would simulate
                // a hardware keyboard event on pressing enter or delete. This is bad for many
                // reasons (there are race conditions with commits) but some applications are
                // relying on this behavior so we continue to support it for older apps.
                sendUpDownEnterOrBackspace(KeyEvent.KEYCODE_ENTER, ic);
            } else {
                final String text = new String(new int[] { code }, 0, 1);
                ic.commitText(text, text.length());
            }
            if (ProductionFlag.IS_EXPERIMENTAL) {
                ResearchLogger.latinIME_sendKeyCodePoint(code);
            }
@@ -1464,7 +1487,18 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                    // This should never happen.
                    Log.e(TAG, "Backspace when we don't know the selection position");
                }
                // 16 is android.os.Build.VERSION_CODES.JELLY_BEAN but we can't write it because
                // we want to be able to compile against the Ice Cream Sandwich SDK.
                if (mTargetApplicationInfo != null
                        && mTargetApplicationInfo.targetSdkVersion < 16) {
                    // Backward compatibility mode. Before Jelly bean, the keyboard would simulate
                    // a hardware keyboard event on pressing enter or delete. This is bad for many
                    // reasons (there are race conditions with commits) but some applications are
                    // relying on this behavior so we continue to support it for older apps.
                    sendUpDownEnterOrBackspace(KeyEvent.KEYCODE_DEL, ic);
                } else {
                    ic.deleteSurroundingText(1, 0);
                }
                if (ProductionFlag.IS_EXPERIMENTAL) {
                    ResearchLogger.latinIME_deleteSurroundingText(1);
                }