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

Commit f32b2d5c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Add a utility method to StringUtils."

parents aaf864db 53fb86c4
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.util.SparseArray;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.makedict.Word;
import com.android.inputmethod.latin.settings.NativeSuggestOptions;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.JniUtils;
@@ -352,12 +351,7 @@ public final class BinaryDictionary extends Dictionary {
    public GetNextWordPropertyResult getNextWordProperty(final int token) {
        final int[] codePoints = new int[MAX_WORD_LENGTH];
        final int nextToken = getNextWordNative(mNativeDict, token, codePoints);
        int len = 0;
        // codePoints is null-terminated if its length is shorter than the array length.
        while (len < MAX_WORD_LENGTH && codePoints[len] != 0) {
            ++len;
        }
        final String word = new String(codePoints, 0, len);
        final String word = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
        return new GetNextWordPropertyResult(getWordProperty(word), nextToken);
    }

+19 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ public final class StringUtils {

    public static String newSingleCodePointString(int codePoint) {
        if (Character.charCount(codePoint) == 1) {
            // Optimization: avoid creating an temporary array for characters that are
            // Optimization: avoid creating a temporary array for characters that are
            // represented by a single char value
            return String.valueOf((char) codePoint);
        }
@@ -205,6 +205,24 @@ public final class StringUtils {
        return codePoints;
    }

    /**
     * Construct a String from a code point array
     *
     * @param codePoints a code point array that is null terminated when its logical length is
     * shorter than the array length.
     * @return a string constructed from the code point array.
     */
    public static String getStringFromNullTerminatedCodePointArray(final int[] codePoints) {
        int stringLength = codePoints.length;
        for (int i = 0; i < codePoints.length; i++) {
            if (codePoints[i] == 0) {
                stringLength = i;
                break;
            }
        }
        return new String(codePoints, 0 /* offset */, stringLength);
    }

    // This method assumes the text is not null. For the empty string, it returns CAPITALIZE_NONE.
    public static int getCapitalizationType(final String text) {
        // If the first char is not uppercase, then the word is either all lower case or
+5 −16
Original line number Diff line number Diff line
@@ -61,15 +61,6 @@ public class WordProperty {
        }
    }

    private static int getCodePointCount(final int[] codePoints) {
        for (int i = 0; i < codePoints.length; i++) {
            if (codePoints[i] == 0) {
                return i;
            }
        }
        return codePoints.length;
    }

    // This represents invalid word when the probability is BinaryDictionary.NOT_A_PROBABILITY.
    public WordProperty(final int[] codePoints, final boolean isNotAWord,
            final boolean isBlacklisted, final boolean hasBigram,
@@ -77,7 +68,7 @@ public class WordProperty {
            final ArrayList<int[]> bigramTargets, final ArrayList<int[]> bigramProbabilityInfo,
            final ArrayList<int[]> shortcutTargets,
            final ArrayList<Integer> shortcutProbabilities) {
        mCodePoints = new String(codePoints, 0 /* offset */, getCodePointCount(codePoints));
        mCodePoints = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
        mIsNotAWord = isNotAWord;
        mIsBlacklisted = isBlacklisted;
        mHasBigrams = hasBigram;
@@ -86,9 +77,8 @@ public class WordProperty {

        final int bigramTargetCount = bigramTargets.size();
        for (int i = 0; i < bigramTargetCount; i++) {
            final int[] bigramTargetCodePointArray = bigramTargets.get(i);
            final String bigramTargetString = new String(bigramTargetCodePointArray,
                    0 /* offset */, getCodePointCount(bigramTargetCodePointArray));
            final String bigramTargetString =
                    StringUtils.getStringFromNullTerminatedCodePointArray(bigramTargets.get(i));
            final ProbabilityInfo bigramProbability =
                    new ProbabilityInfo(bigramProbabilityInfo.get(i));
            mBigramTargets.add(
@@ -98,9 +88,8 @@ public class WordProperty {

        final int shortcutTargetCount = shortcutTargets.size();
        for (int i = 0; i < shortcutTargetCount; i++) {
            final int[] shortcutTargetCodePointArray = shortcutTargets.get(i);
            final String shortcutTargetString = new String(shortcutTargetCodePointArray,
                    0 /* offset */, getCodePointCount(shortcutTargetCodePointArray));
            final String shortcutTargetString =
                    StringUtils.getStringFromNullTerminatedCodePointArray(shortcutTargets.get(i));
            mShortcutTargets.add(
                    new WeightedString(shortcutTargetString, shortcutProbabilities.get(i)));
        }