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

Commit c8383eda authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Fix wrong commitText parameter in sendKeyCodePoint()

Small optimization on generating a String instance from a single code
point too.

bug: 11181913

Change-Id: I0f905e4dc6ec7841092bb4d3d940daf3b2303f5b
parent cdc4c1dc
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ import com.android.inputmethod.latin.utils.JniUtils;
import com.android.inputmethod.latin.utils.LatinImeLoggerUtils;
import com.android.inputmethod.latin.utils.RecapitalizeStatus;
import com.android.inputmethod.latin.utils.StaticInnerHandlerWrapper;
import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.TargetPackageInfoGetterTask;
import com.android.inputmethod.latin.utils.TextRange;
import com.android.inputmethod.latin.utils.UserHistoryForgettingCurveUtils;
@@ -1586,8 +1587,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
            // relying on this behavior so we continue to support it for older apps.
            sendDownUpKeyEvent(KeyEvent.KEYCODE_ENTER);
        } else {
            final String text = new String(new int[] { code }, 0, 1);
            mConnection.commitText(text, text.length());
            mConnection.commitText(StringUtils.newSingleCodePointString(code), 1);
        }
    }

@@ -2335,11 +2335,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (mWordComposer.isComposingWord()) { // May have changed since we stored wasComposing
            if (currentSettings.mCorrectionEnabled) {
                final String separator = shouldAvoidSendingCode ? LastComposedWord.NOT_A_SEPARATOR
                        : new String(new int[] { primaryCode }, 0, 1);
                        : StringUtils.newSingleCodePointString(primaryCode);
                commitCurrentAutoCorrection(separator);
                didAutoCorrect = true;
            } else {
                commitTyped(new String(new int[]{primaryCode}, 0, 1));
                commitTyped(StringUtils.newSingleCodePointString(primaryCode));
            }
        }

+10 −0
Original line number Diff line number Diff line
@@ -48,6 +48,16 @@ public final class StringUtils {
        return text.codePointCount(0, text.length());
    }

    public static String newSingleCodePointString(int codePoint) {
        if (Character.charCount(codePoint) == 1) {
            // Optimization: avoid creating an temporary array for characters that are
            // represented by a single char value
            return String.valueOf((char) codePoint);
        }
        // For surrogate pair
        return new String(Character.toChars(codePoint));
    }

    public static boolean containsInArray(final String text, final String[] array) {
        for (final String element : array) {
            if (text.equals(element)) return true;