aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2011-08-22 02:49:33 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-08-22 02:49:33 -0700
commit70a92a33f87cba5ca84d603eb765d95bafab7789 (patch)
treefd38a012132030bf5e50f8576c25ba7e4a4ffc2f /java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
parentb39f612d9791877bf0136fa7af9ae054092b9eab (diff)
parent6b166a193398554694cb680f704c2ffc23d03a0e (diff)
downloadlatinime-70a92a33f87cba5ca84d603eb765d95bafab7789.tar.gz
latinime-70a92a33f87cba5ca84d603eb765d95bafab7789.tar.xz
latinime-70a92a33f87cba5ca84d603eb765d95bafab7789.zip
Merge "Remove duplicates from the spell checker suggestions."
Diffstat (limited to 'java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java')
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java32
1 files changed, 21 insertions, 11 deletions
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 21176240f..502ebb52a 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -37,6 +37,7 @@ import com.android.inputmethod.latin.UserDictionary;
import com.android.inputmethod.latin.Utils;
import com.android.inputmethod.latin.WordComposer;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
@@ -51,8 +52,9 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
private static final boolean DBG = false;
private static final int POOL_SIZE = 2;
+ private final static String[] EMPTY_STRING_ARRAY = new String[0];
private final static SuggestionsInfo EMPTY_SUGGESTIONS_INFO =
- new SuggestionsInfo(0, new String[0]);
+ new SuggestionsInfo(0, EMPTY_STRING_ARRAY);
private Map<String, DictionaryPool> mDictionaryPools =
Collections.synchronizedMap(new TreeMap<String, DictionaryPool>());
private Map<String, Dictionary> mUserDictionaries =
@@ -65,14 +67,15 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
private static class SuggestionsGatherer implements WordCallback {
private final int DEFAULT_SUGGESTION_LENGTH = 16;
- private final String[] mSuggestions;
+ private final ArrayList<CharSequence> mSuggestions;
private final int[] mScores;
private final int mMaxLength;
private int mLength = 0;
+ private boolean mSeenSuggestions = false;
SuggestionsGatherer(final int maxLength) {
mMaxLength = maxLength;
- mSuggestions = new String[mMaxLength];
+ mSuggestions = new ArrayList<CharSequence>(maxLength + 1);
mScores = new int[mMaxLength];
}
@@ -84,30 +87,37 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
// if it doesn't. See documentation for binarySearch.
final int insertIndex = positionIndex >= 0 ? positionIndex : -positionIndex - 1;
+ mSeenSuggestions = true;
if (mLength < mMaxLength) {
final int copyLen = mLength - insertIndex;
++mLength;
System.arraycopy(mScores, insertIndex, mScores, insertIndex + 1, copyLen);
- System.arraycopy(mSuggestions, insertIndex, mSuggestions, insertIndex + 1, copyLen);
+ mSuggestions.add(insertIndex, new String(word, wordOffset, wordLength));
} else {
if (insertIndex == 0) return true;
System.arraycopy(mScores, 1, mScores, 0, insertIndex);
- System.arraycopy(mSuggestions, 1, mSuggestions, 0, insertIndex);
+ mSuggestions.add(insertIndex, new String(word, wordOffset, wordLength));
+ mSuggestions.remove(0);
}
mScores[insertIndex] = score;
- mSuggestions[insertIndex] = new String(word, wordOffset, wordLength);
return true;
}
public String[] getGatheredSuggestions() {
- if (0 == mLength) return null;
+ if (!mSeenSuggestions) return null;
+ if (0 == mLength) return EMPTY_STRING_ARRAY;
- final String[] results = new String[mLength];
- for (int i = mLength - 1; i >= 0; --i) {
- results[mLength - i - 1] = mSuggestions[i];
+ if (DBG) {
+ if (mLength != mSuggestions.size()) {
+ Log.e(TAG, "Suggestion size is not the same as stored mLength");
+ }
}
- return results;
+ Collections.reverse(mSuggestions);
+ Utils.removeDupes(mSuggestions);
+ // This returns a String[], while toArray() returns an Object[] which cannot be cast
+ // into a String[].
+ return mSuggestions.toArray(EMPTY_STRING_ARRAY);
}
}