Create factory methods for sub dicts.

Bug: 13755213
Change-Id: I046af54b4860d2839328f2089ea785d81d04cf43
diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
index 09d0ea2..30b3433 100644
--- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
@@ -61,9 +61,6 @@
     /** The number of contacts in the most recent dictionary rebuild. */
     static private int sContactCountAtLastRebuild = 0;
 
-    /** The locale for this contacts dictionary. Controls name bigram predictions. */
-    public final Locale mLocale;
-
     private ContentObserver mObserver;
 
     /**
@@ -71,11 +68,7 @@
      */
     private final boolean mUseFirstLastBigrams;
 
-    public ContactsBinaryDictionary(final Context context, final Locale locale) {
-        this(context, locale, null /* dictFile */);
-    }
-
-    public ContactsBinaryDictionary(final Context context, final Locale locale,
+    private ContactsBinaryDictionary(final Context context, final Locale locale,
             final File dictFile) {
         this(context, locale, dictFile, NAME);
     }
@@ -84,12 +77,16 @@
             final File dictFile, final String name) {
         super(context, getDictName(name, locale, dictFile), locale, Dictionary.TYPE_CONTACTS,
                 dictFile);
-        mLocale = locale;
         mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale);
         registerObserver(context);
         reloadDictionaryIfRequired();
     }
 
+    public static ContactsBinaryDictionary getDictionary(final Context context, final Locale locale,
+            final File dictFile) {
+        return new ContactsBinaryDictionary(context, locale, dictFile);
+    }
+
     private synchronized void registerObserver(final Context context) {
         if (mObserver != null) return;
         ContentResolver cres = context.getContentResolver();
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index c6b0d35..0619107 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -23,8 +23,7 @@
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.personalization.DecayingExpandableBinaryDictionaryBase;
-import com.android.inputmethod.latin.personalization.PersonalizationHelper;
+import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
 import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
 import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.ExecutorUtils;
@@ -147,13 +146,13 @@
     private static ExpandableBinaryDictionary getSubDict(final String dictType,
             final Context context, final Locale locale, final File dictFile) {
         if (Dictionary.TYPE_CONTACTS.equals(dictType)) {
-            return new ContactsBinaryDictionary(context, locale, dictFile);
+            return ContactsBinaryDictionary.getDictionary(context, locale, dictFile);
         } else if (Dictionary.TYPE_USER.equals(dictType)) {
-            return new UserBinaryDictionary(context, locale, dictFile);
+            return UserBinaryDictionary.getDictionary(context, locale, dictFile);
         } else if (Dictionary.TYPE_USER_HISTORY.equals(dictType)) {
-            return PersonalizationHelper.getUserHistoryDictionary(context, locale);
+            return UserHistoryDictionary.getDictionary(context, locale, dictFile);
         } else if (Dictionary.TYPE_PERSONALIZATION.equals(dictType)) {
-            return PersonalizationHelper.getPersonalizationDictionary(context, locale);
+            return PersonalizationDictionary.getDictionary(context, locale, dictFile);
         } else {
             return null;
         }
diff --git a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
index b21f300..6a9f3ac 100644
--- a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
@@ -74,17 +74,8 @@
     final private String mLocale;
     final private boolean mAlsoUseMoreRestrictiveLocales;
 
-    public UserBinaryDictionary(final Context context, final Locale locale) {
-        this(context, locale, false /* alsoUseMoreRestrictiveLocales */, null /* dictFile */);
-    }
-
-    public UserBinaryDictionary(final Context context, final Locale locale, final File dictFile) {
-        this(context, locale, false /* alsoUseMoreRestrictiveLocales */, dictFile);
-    }
-
-    public UserBinaryDictionary(final Context context, final Locale locale,
-            final boolean alsoUseMoreRestrictiveLocales, final File dictFile) {
-        this(context, locale, alsoUseMoreRestrictiveLocales, dictFile, NAME);
+    private UserBinaryDictionary(final Context context, final Locale locale, final File dictFile) {
+        this(context, locale, false /* alsoUseMoreRestrictiveLocales */, dictFile, NAME);
     }
 
     protected UserBinaryDictionary(final Context context, final Locale locale,
@@ -121,6 +112,11 @@
         reloadDictionaryIfRequired();
     }
 
+    public static UserBinaryDictionary getDictionary(final Context context, final Locale locale,
+            final File dictFile) {
+        return new UserBinaryDictionary(context, locale, dictFile);
+    }
+
     @Override
     public synchronized void close() {
         if (mObserver != null) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
index 4afd5b4..3f879f0 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
@@ -26,14 +26,15 @@
 public class PersonalizationDictionary extends DecayingExpandableBinaryDictionaryBase {
     /* package */ static final String NAME = PersonalizationDictionary.class.getSimpleName();
 
+    // TODO: Make this constructor private
     /* package */ PersonalizationDictionary(final Context context, final Locale locale) {
-        this(context, locale, null /* dictFile */);
+        super(context, getDictName(NAME, locale, null /* dictFile */), locale,
+                Dictionary.TYPE_PERSONALIZATION, null /* dictFile */);
     }
 
-    public PersonalizationDictionary(final Context context, final Locale locale,
-            final File dictFile) {
-        super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_PERSONALIZATION,
-                dictFile);
+    public static PersonalizationDictionary getDictionary(final Context context,
+            final Locale locale, final File dictFile) {
+        return PersonalizationHelper.getPersonalizationDictionary(context, locale);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index 8a29c35..36e59e9 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -32,14 +32,15 @@
 public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBase {
     /* package */ static final String NAME = UserHistoryDictionary.class.getSimpleName();
 
+    // TODO: Make this constructor private
     /* package */ UserHistoryDictionary(final Context context, final Locale locale) {
-        this(context, locale, null /* dictFile */);
+        super(context, getDictName(NAME, locale, null /* dictFile */), locale,
+                Dictionary.TYPE_USER_HISTORY, null /* dictFile */);
     }
 
-    public UserHistoryDictionary(final Context context, final Locale locale,
+    public static UserHistoryDictionary getDictionary(final Context context, final Locale locale,
             final File dictFile) {
-        super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_USER_HISTORY,
-                dictFile);
+        return PersonalizationHelper.getUserHistoryDictionary(context, locale);
     }
 
     @Override