diff options
author | 2012-06-26 18:58:52 +0900 | |
---|---|---|
committer | 2012-06-26 19:12:07 +0900 | |
commit | 9433ce86b702bf33ff6d1bd020266ffcb7b133ea (patch) | |
tree | 374cf88a4221d9b8fe8d1f926d417f2cc69ccc50 /java/src | |
parent | 8e17f6d93a3b079eab41450539b9890763fb6e3f (diff) | |
download | latinime-9433ce86b702bf33ff6d1bd020266ffcb7b133ea.tar.gz latinime-9433ce86b702bf33ff6d1bd020266ffcb7b133ea.tar.xz latinime-9433ce86b702bf33ff6d1bd020266ffcb7b133ea.zip |
Refactor and squash long-standing bugs (A2)
This is awesome.
- Improve performance by stopping useless string/array conversions.
- Simplify method interface.
- Fix localization bugs - we now know our locale
- Fix bugs with surrogate code points
Bug: 4769095
Change-Id: I8a8ee224b713429ee0a4ce5bd52f1b63378cf56f
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/inputmethod/latin/Suggest.java | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index a4332936d..0861a616c 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -252,7 +252,7 @@ public class Suggest { } for (final SuggestedWordInfo suggestion : localSuggestions) { final String suggestionStr = suggestion.mWord.toString(); - addWord(suggestionStr.toCharArray(), null, 0, suggestionStr.length(), + addWord(suggestionStr, null, suggestion.mScore, dicTypeId, Dictionary.BIGRAM, suggestions, consideredWord); } @@ -279,7 +279,7 @@ public class Suggest { wordComposerForLookup, prevWordForBigram, proximityInfo); for (final SuggestedWordInfo suggestion : localSuggestions) { final String suggestionStr = suggestion.mWord.toString(); - addWord(suggestionStr.toCharArray(), null, 0, suggestionStr.length(), + addWord(suggestionStr, null, suggestion.mScore, dicTypeId, Dictionary.UNIGRAM, suggestions, consideredWord); } @@ -388,17 +388,17 @@ public class Suggest { return suggestionsList; } - // TODO: Use codepoint instead of char - public boolean addWord(final char[] word, int[] indices, final int offset, final int length, + public boolean addWord(final String word, int[] indices, int score, final int dicTypeId, final int dataType, final ArrayList<SuggestedWordInfo> suggestions, final String consideredWord) { int dataTypeForLog = dataType; final int prefMaxSuggestions = MAX_SUGGESTIONS; + final int length = word.codePointCount(0, word.length()); int pos = 0; // Check if it's the same word, only caps are different - if (StringUtils.equalsIgnoreCase(consideredWord, word, offset, length)) { + if (StringUtils.equalsIgnoreCase(consideredWord, word)) { // TODO: remove this surrounding if clause and move this logic to // getSuggestedWordBuilder. if (suggestions.size() > 0) { @@ -407,7 +407,7 @@ public class Suggest { // frequency to determine the insertion position. This does not ensure strictly // correct ordering, but ensures the top score is on top which is enough for // removing duplicates correctly. - if (StringUtils.equalsIgnoreCase(currentHighestWord.mWord, word, offset, length) + if (StringUtils.equalsIgnoreCase(currentHighestWord.mWord, word) && score <= currentHighestWord.mScore) { pos = 1; } @@ -430,16 +430,12 @@ public class Suggest { } final StringBuilder sb = new StringBuilder(getApproxMaxWordLength()); - // TODO: Must pay attention to locale when changing case. if (mIsAllUpperCase) { - sb.append(new String(word, offset, length).toUpperCase()); + sb.append(word.toUpperCase(mLocale)); } else if (mIsFirstCharCapitalized) { - sb.append(Character.toUpperCase(word[offset])); - if (length > 1) { - sb.append(word, offset + 1, length - 1); - } + sb.append(StringUtils.toTitleCase(word, mLocale)); } else { - sb.append(word, offset, length); + sb.append(word); } for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) { sb.appendCodePoint(Keyboard.CODE_SINGLE_QUOTE); |