Merge "Refactor correction.cpp"
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
index 39b4f63..ffd204d 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
@@ -42,9 +42,9 @@
* @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 35d1541..9f4777f 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -127,7 +127,7 @@
if (!mUpdatingDictionary) {
mUpdatingDictionary = true;
mRequiresReload = false;
- new LoadDictionaryTask().execute();
+ new LoadDictionaryTask().start();
}
}
@@ -541,14 +541,13 @@
mRoots = new NodeArray();
}
- private class LoadDictionaryTask extends AsyncTask<Void, Void, Void> {
+ 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 649774d..ec82f9e 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.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 @@
private final static String[] emptyArray = new String[0];
private Map<String, DictionaryPool> mDictionaryPools =
Collections.synchronizedMap(new TreeMap<String, DictionaryPool>());
+ private Map<String, Dictionary> mUserDictionaries =
+ Collections.synchronizedMap(new TreeMap<String, Dictionary>());
@Override
public Session createSession() {
@@ -109,9 +113,14 @@
public boolean onUnbind(final Intent intent) {
final Map<String, DictionaryPool> oldPools = mDictionaryPools;
mDictionaryPools = Collections.synchronizedMap(new TreeMap<String, DictionaryPool>());
+ final Map<String, Dictionary> oldUserDictionaries = mUserDictionaries;
+ mUserDictionaries = Collections.synchronizedMap(new TreeMap<String, Dictionary>());
for (DictionaryPool pool : oldPools.values()) {
pool.close();
}
+ for (Dictionary dict : oldUserDictionaries.values()) {
+ dict.close();
+ }
return false;
}
@@ -129,9 +138,16 @@
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 {