aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2012-06-26 18:58:52 +0900
committerJean Chalard <jchalard@google.com>2012-06-26 19:12:07 +0900
commit9433ce86b702bf33ff6d1bd020266ffcb7b133ea (patch)
tree374cf88a4221d9b8fe8d1f926d417f2cc69ccc50 /java/src
parent8e17f6d93a3b079eab41450539b9890763fb6e3f (diff)
downloadlatinime-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.java22
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);