From 150bad6fd4b401177c480acf5640b4db0f821886 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Thu, 18 Aug 2011 19:29:29 +0900 Subject: Have the spell checker use the User dictionary. Bug: 5175868 Change-Id: I165eee4c865caa5ee1daf3e0b1acde8788b996ef --- .../android/inputmethod/latin/DictionaryFactory.java | 4 ++-- .../inputmethod/latin/ExpandableDictionary.java | 7 +++---- .../latin/spellcheck/AndroidSpellCheckerService.java | 20 ++++++++++++++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) (limited to 'java/src') diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java index 39b4f63a5..ffd204dac 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java @@ -42,9 +42,9 @@ public class DictionaryFactory { * @param context application context for reading resources * @param locale the locale for which to create the dictionary * @param fallbackResId the id of the resource to use as a fallback if no pack is found - * @return an initialized instance of Dictionary + * @return an initialized instance of DictionaryCollection */ - public static Dictionary createDictionaryFromManager(Context context, Locale locale, + public static DictionaryCollection createDictionaryFromManager(Context context, Locale locale, int fallbackResId) { if (null == locale) { Log.e(TAG, "No locale defined for dictionary"); diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java index 35d1541ff..9f4777f5a 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java @@ -127,7 +127,7 @@ public class ExpandableDictionary extends Dictionary { if (!mUpdatingDictionary) { mUpdatingDictionary = true; mRequiresReload = false; - new LoadDictionaryTask().execute(); + new LoadDictionaryTask().start(); } } @@ -541,14 +541,13 @@ public class ExpandableDictionary extends Dictionary { mRoots = new NodeArray(); } - private class LoadDictionaryTask extends AsyncTask { + private class LoadDictionaryTask extends Thread { @Override - protected Void doInBackground(Void... v) { + public void run() { loadDictionaryAsync(); synchronized (mUpdatingLock) { mUpdatingDictionary = false; } - return null; } } diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index 649774d78..ec82f9e80 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -30,7 +30,9 @@ import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.Dictionary.DataType; import com.android.inputmethod.latin.Dictionary.WordCallback; +import com.android.inputmethod.latin.DictionaryCollection; import com.android.inputmethod.latin.DictionaryFactory; +import com.android.inputmethod.latin.UserDictionary; import com.android.inputmethod.latin.Utils; import com.android.inputmethod.latin.WordComposer; @@ -51,6 +53,8 @@ public class AndroidSpellCheckerService extends SpellCheckerService { private final static String[] emptyArray = new String[0]; private Map mDictionaryPools = Collections.synchronizedMap(new TreeMap()); + private Map mUserDictionaries = + Collections.synchronizedMap(new TreeMap()); @Override public Session createSession() { @@ -109,9 +113,14 @@ public class AndroidSpellCheckerService extends SpellCheckerService { public boolean onUnbind(final Intent intent) { final Map oldPools = mDictionaryPools; mDictionaryPools = Collections.synchronizedMap(new TreeMap()); + final Map oldUserDictionaries = mUserDictionaries; + mUserDictionaries = Collections.synchronizedMap(new TreeMap()); for (DictionaryPool pool : oldPools.values()) { pool.close(); } + for (Dictionary dict : oldUserDictionaries.values()) { + dict.close(); + } return false; } @@ -129,9 +138,16 @@ public class AndroidSpellCheckerService extends SpellCheckerService { final ProximityInfo proximityInfo = ProximityInfo.createSpellCheckerProximityInfo(); final Resources resources = getResources(); final int fallbackResourceId = Utils.getMainDictionaryResourceId(resources); - final Dictionary dictionary = + final DictionaryCollection dictionaryCollection = DictionaryFactory.createDictionaryFromManager(this, locale, fallbackResourceId); - return new DictAndProximity(dictionary, proximityInfo); + final String localeStr = locale.toString(); + Dictionary userDict = mUserDictionaries.get(localeStr); + if (null == userDict) { + userDict = new UserDictionary(this, localeStr); + mUserDictionaries.put(localeStr, userDict); + } + dictionaryCollection.addDictionary(userDict); + return new DictAndProximity(dictionaryCollection, proximityInfo); } private class AndroidSpellCheckerSession extends Session { -- cgit v1.2.3-83-g751a