diff options
Diffstat (limited to '')
-rw-r--r-- | tests/src/com/android/inputmethod/latin/SuggestHelper.java (renamed from tests/src/com/android/inputmethod/latin/tests/SuggestHelper.java) | 97 |
1 files changed, 86 insertions, 11 deletions
diff --git a/tests/src/com/android/inputmethod/latin/tests/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java index 107f04c7c..759bfa18a 100644 --- a/tests/src/com/android/inputmethod/latin/tests/SuggestHelper.java +++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java @@ -14,13 +14,13 @@ * the License. */ -package com.android.inputmethod.latin.tests; +package com.android.inputmethod.latin; import android.content.Context; -import android.test.AndroidTestCase; import android.text.TextUtils; import android.util.Log; import com.android.inputmethod.latin.Suggest; +import com.android.inputmethod.latin.UserBigramDictionary; import com.android.inputmethod.latin.WordComposer; import java.io.IOException; @@ -29,28 +29,32 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.Channels; import java.util.List; +import java.util.Locale; +import java.util.StringTokenizer; public class SuggestHelper { private Suggest mSuggest; + private UserBigramDictionary mUserBigram; private final String TAG; + /** Uses main dictionary only **/ public SuggestHelper(String tag, Context context, int[] resId) { TAG = tag; - InputStream[] res = null; + InputStream[] is = null; try { // merging separated dictionary into one if dictionary is separated int total = 0; - res = new InputStream[resId.length]; + is = new InputStream[resId.length]; for (int i = 0; i < resId.length; i++) { - res[i] = context.getResources().openRawResource(resId[i]); - total += res[i].available(); + is[i] = context.getResources().openRawResource(resId[i]); + total += is[i].available(); } ByteBuffer byteBuffer = ByteBuffer.allocateDirect(total).order(ByteOrder.nativeOrder()); int got = 0; for (int i = 0; i < resId.length; i++) { - got += Channels.newChannel(res[i]).read(byteBuffer); + got += Channels.newChannel(is[i]).read(byteBuffer); } if (got != total) { Log.w(TAG, "Read " + got + " bytes, expected " + total); @@ -62,8 +66,10 @@ public class SuggestHelper { Log.w(TAG, "No available memory for binary dictionary"); } finally { try { - for (int i = 0;i < res.length; i++) { - res[i].close(); + if (is != null) { + for (int i = 0; i < is.length; i++) { + is[i].close(); + } } } catch (IOException e) { Log.w(TAG, "Failed to close input stream"); @@ -73,6 +79,27 @@ public class SuggestHelper { mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM); } + /** Uses both main dictionary and user-bigram dictionary **/ + public SuggestHelper(String tag, Context context, int[] resId, int userBigramMax, + int userBigramDelete) { + this(tag, context, resId); + mUserBigram = new UserBigramDictionary(context, null, Locale.US.toString(), + Suggest.DIC_USER); + mUserBigram.setDatabaseMax(userBigramMax); + mUserBigram.setDatabaseDelete(userBigramDelete); + mSuggest.setUserBigramDictionary(mUserBigram); + } + + void changeUserBigramLocale(Context context, Locale locale) { + if (mUserBigram != null) { + flushUserBigrams(); + mUserBigram.close(); + mUserBigram = new UserBigramDictionary(context, null, locale.toString(), + Suggest.DIC_USER); + mSuggest.setUserBigramDictionary(mUserBigram); + } + } + private WordComposer createWordComposer(CharSequence s) { WordComposer word = new WordComposer(); for (int i = 0; i < s.length(); i++) { @@ -125,8 +152,8 @@ public class SuggestHelper { } private void getBigramSuggestions(CharSequence previous, CharSequence typed) { - if(!TextUtils.isEmpty(previous) && (typed.length() > 1)) { - WordComposer firstChar = createWordComposer(typed.charAt(0) + ""); + if (!TextUtils.isEmpty(previous) && (typed.length() > 1)) { + WordComposer firstChar = createWordComposer(Character.toString(typed.charAt(0))); mSuggest.getSuggestions(null, firstChar, false, previous); } } @@ -162,6 +189,54 @@ public class SuggestHelper { return mSuggest.isValidWord(typed); } + boolean isUserBigramSuggestion(CharSequence previous, char typed, + CharSequence expected) { + WordComposer word = createWordComposer(Character.toString(typed)); + + if (mUserBigram == null) return false; + + flushUserBigrams(); + if (!TextUtils.isEmpty(previous) && !TextUtils.isEmpty(Character.toString(typed))) { + WordComposer firstChar = createWordComposer(Character.toString(typed)); + mSuggest.getSuggestions(null, firstChar, false, previous); + boolean reloading = mUserBigram.reloadDictionaryIfRequired(); + if (reloading) mUserBigram.waitForDictionaryLoading(); + mUserBigram.getBigrams(firstChar, previous, mSuggest, null); + } + + List<CharSequence> suggestions = mSuggest.mBigramSuggestions; + for (int i = 0; i < suggestions.size(); i++) { + if (TextUtils.equals(suggestions.get(i), expected)) return true; + } + + return false; + } + + void addToUserBigram(String sentence) { + StringTokenizer st = new StringTokenizer(sentence); + String previous = null; + while (st.hasMoreTokens()) { + String current = st.nextToken(); + if (previous != null) { + addToUserBigram(new String[] {previous, current}); + } + previous = current; + } + } + + void addToUserBigram(String[] pair) { + if (mUserBigram != null && pair.length == 2) { + mUserBigram.addBigrams(pair[0], pair[1]); + } + } + + void flushUserBigrams() { + if (mUserBigram != null) { + mUserBigram.flushPendingWrites(); + mUserBigram.waitUntilUpdateDBDone(); + } + } + final int[][] adjacents = { {'a','s','w','q',-1}, {'b','h','v','n','g','j',-1}, |