am 8dd47029: Merge "Refactor dictionary constructor"

* commit '8dd47029f129cf7077c091170a8f7eeb88dd0ccf':
  Refactor dictionary constructor
main
Tadashi G. Takaoka 2014-02-12 20:58:18 -08:00 committed by Android Git Automerger
commit d360816f43
7 changed files with 34 additions and 59 deletions

View File

@ -29,7 +29,6 @@ import android.provider.ContactsContract.Contacts;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.personalization.AccountUtils; import com.android.inputmethod.latin.personalization.AccountUtils;
import com.android.inputmethod.latin.utils.StringUtils; import com.android.inputmethod.latin.utils.StringUtils;
@ -73,8 +72,13 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
private final boolean mUseFirstLastBigrams; private final boolean mUseFirstLastBigrams;
public ContactsBinaryDictionary(final Context context, final Locale locale) { public ContactsBinaryDictionary(final Context context, final Locale locale) {
super(context, getDictNameWithLocale(NAME, locale), locale, this(context, locale, null /* dictFile */);
Dictionary.TYPE_CONTACTS, false /* isUpdatable */); }
public ContactsBinaryDictionary(final Context context, final Locale locale,
final File dictFile) {
super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_CONTACTS,
false /* isUpdatable */, dictFile);
mLocale = locale; mLocale = locale;
mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale); mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale);
registerObserver(context); registerObserver(context);
@ -84,12 +88,6 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
loadDictionary(); loadDictionary();
} }
// Dummy constructor for tests.
@UsedForTesting
public ContactsBinaryDictionary(final Context context, final Locale locale, final File file) {
this(context, locale);
}
private synchronized void registerObserver(final Context context) { private synchronized void registerObserver(final Context context) {
// Perform a managed query. The Activity will handle closing and requerying the cursor // Perform a managed query. The Activity will handle closing and requerying the cursor
// when needed. // when needed.

View File

@ -213,14 +213,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
* @param dictType the dictionary type, as a human-readable string * @param dictType the dictionary type, as a human-readable string
* @param isUpdatable whether to support dynamically updating the dictionary. Please note that * @param isUpdatable whether to support dynamically updating the dictionary. Please note that
* dynamic dictionary has negative effects on memory space and computation time. * dynamic dictionary has negative effects on memory space and computation time.
* @param dictFile dictionary file path. if null, use default dictionary path based on
* dictionary type.
*/ */
public ExpandableBinaryDictionary(final Context context, final String dictName,
final Locale locale, final String dictType, final boolean isUpdatable) {
this(context, dictName, locale, dictType, isUpdatable,
new File(context.getFilesDir(), dictName + DICT_FILE_EXTENSION));
}
// Creates an instance that uses a given dictionary file.
public ExpandableBinaryDictionary(final Context context, final String dictName, public ExpandableBinaryDictionary(final Context context, final String dictName,
final Locale locale, final String dictType, final boolean isUpdatable, final Locale locale, final String dictType, final boolean isUpdatable,
final File dictFile) { final File dictFile) {
@ -229,15 +224,17 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
mContext = context; mContext = context;
mLocale = locale; mLocale = locale;
mIsUpdatable = isUpdatable; mIsUpdatable = isUpdatable;
mDictFile = dictFile; mDictFile = (dictFile != null) ? dictFile
: new File(context.getFilesDir(), dictName + DICT_FILE_EXTENSION);
mBinaryDictionary = null; mBinaryDictionary = null;
mDictNameDictionaryUpdateController = getDictionaryUpdateController(dictName); mDictNameDictionaryUpdateController = getDictionaryUpdateController(dictName);
// Currently, only dynamic personalization dictionary is updatable. // Currently, only dynamic personalization dictionary is updatable.
mDictionaryWriter = getDictionaryWriter(isUpdatable); mDictionaryWriter = getDictionaryWriter(isUpdatable);
} }
protected static String getDictNameWithLocale(final String name, final Locale locale) { protected static String getDictName(final String name, final Locale locale,
return name + "." + locale.toString(); final File dictFile) {
return dictFile != null ? dictFile.getName() : name + "." + locale.toString();
} }
/** /**

View File

@ -28,12 +28,12 @@ public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDic
private final Object mLock = new Object(); private final Object mLock = new Object();
public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale) { public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale) {
this(context, locale, false); this(context, locale, false /* alsoUseMoreRestrictiveLocales */);
} }
public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale, public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale,
final boolean alsoUseMoreRestrictiveLocales) { final boolean alsoUseMoreRestrictiveLocales) {
super(context, locale, alsoUseMoreRestrictiveLocales); super(context, locale, alsoUseMoreRestrictiveLocales, null /* dictFile */);
} }
@Override @Override

View File

@ -28,7 +28,6 @@ import android.provider.UserDictionary.Words;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.UserDictionaryCompatUtils; import com.android.inputmethod.compat.UserDictionaryCompatUtils;
import com.android.inputmethod.latin.utils.LocaleUtils; import com.android.inputmethod.latin.utils.LocaleUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@ -78,19 +77,17 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
final public boolean mEnabled; final public boolean mEnabled;
public UserBinaryDictionary(final Context context, final Locale locale) { public UserBinaryDictionary(final Context context, final Locale locale) {
this(context, locale, false); this(context, locale, false /* alsoUseMoreRestrictiveLocales */, null /* dictFile */);
} }
// Dummy constructor for tests. public UserBinaryDictionary(final Context context, final Locale locale, final File dictFile) {
@UsedForTesting this(context, locale, false /* alsoUseMoreRestrictiveLocales */, dictFile);
public UserBinaryDictionary(final Context context, final Locale locale, final File file) {
this(context, locale);
} }
public UserBinaryDictionary(final Context context, final Locale locale, public UserBinaryDictionary(final Context context, final Locale locale,
final boolean alsoUseMoreRestrictiveLocales) { final boolean alsoUseMoreRestrictiveLocales, final File dictFile) {
super(context, getDictNameWithLocale(NAME, locale), locale, Dictionary.TYPE_USER, super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_USER,
false /* isUpdatable */); false /* isUpdatable */, dictFile);
if (null == locale) throw new NullPointerException(); // Catch the error earlier if (null == locale) throw new NullPointerException(); // Catch the error earlier
final String localeStr = locale.toString(); final String localeStr = locale.toString();
if (SubtypeLocaleUtils.NO_LANGUAGE.equals(localeStr)) { if (SubtypeLocaleUtils.NO_LANGUAGE.equals(localeStr)) {

View File

@ -52,21 +52,10 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB
private final String mDictName; private final String mDictName;
/* package */ DecayingExpandableBinaryDictionaryBase(final Context context, /* package */ DecayingExpandableBinaryDictionaryBase(final Context context,
final Locale locale, final String dictionaryType, final String dictName) { final String dictName, final Locale locale, final String dictionaryType,
super(context, dictName, locale, dictionaryType, true);
mLocale = locale;
mDictName = dictName;
if (mLocale != null && mLocale.toString().length() > 1) {
reloadDictionaryIfRequired();
}
}
// Creates an instance that uses a given dictionary file for testing.
@UsedForTesting
/* package */ DecayingExpandableBinaryDictionaryBase(final Context context,
final Locale locale, final String dictionaryType, final String dictName,
final File dictFile) { final File dictFile) {
super(context, dictName, locale, dictionaryType, true, dictFile); super(context, getDictName(dictName, locale, dictFile), locale, dictionaryType,
true /* isUpdatable */, dictFile);
mLocale = locale; mLocale = locale;
mDictName = dictName; mDictName = dictName;
if (mLocale != null && mLocale.toString().length() > 1) { if (mLocale != null && mLocale.toString().length() > 1) {

View File

@ -16,27 +16,23 @@
package com.android.inputmethod.latin.personalization; package com.android.inputmethod.latin.personalization;
import com.android.inputmethod.annotations.UsedForTesting; import android.content.Context;
import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.Dictionary;
import java.io.File; import java.io.File;
import java.util.Locale; import java.util.Locale;
import android.content.Context;
public class PersonalizationDictionary extends DecayingExpandableBinaryDictionaryBase { public class PersonalizationDictionary extends DecayingExpandableBinaryDictionaryBase {
/* package */ static final String NAME = PersonalizationDictionary.class.getSimpleName(); /* package */ static final String NAME = PersonalizationDictionary.class.getSimpleName();
/* package */ PersonalizationDictionary(final Context context, final Locale locale) { /* package */ PersonalizationDictionary(final Context context, final Locale locale) {
super(context, locale, Dictionary.TYPE_PERSONALIZATION, this(context, locale, null /* dictFile */);
getDictNameWithLocale(NAME, locale));
} }
// Creates an instance that uses a given dictionary file for testing.
@UsedForTesting
public PersonalizationDictionary(final Context context, final Locale locale, public PersonalizationDictionary(final Context context, final Locale locale,
final File dictFile) { final File dictFile) {
super(context, locale, Dictionary.TYPE_PERSONALIZATION, getDictNameWithLocale(NAME, locale), super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_PERSONALIZATION,
dictFile); dictFile);
} }

View File

@ -16,29 +16,27 @@
package com.android.inputmethod.latin.personalization; package com.android.inputmethod.latin.personalization;
import com.android.inputmethod.annotations.UsedForTesting; import android.content.Context;
import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.Dictionary;
import java.io.File; import java.io.File;
import java.util.Locale; import java.util.Locale;
import android.content.Context;
/** /**
* Locally gathers stats about the words user types and various other signals like auto-correction * Locally gathers stats about the words user types and various other signals like auto-correction
* cancellation or manual picks. This allows the keyboard to adapt to the typist over time. * cancellation or manual picks. This allows the keyboard to adapt to the typist over time.
*/ */
public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBase { public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBase {
/* package */ static final String NAME = UserHistoryDictionary.class.getSimpleName(); /* package */ static final String NAME = UserHistoryDictionary.class.getSimpleName();
/* package */ UserHistoryDictionary(final Context context, final Locale locale) { /* package */ UserHistoryDictionary(final Context context, final Locale locale) {
super(context, locale, Dictionary.TYPE_USER_HISTORY, getDictNameWithLocale(NAME, locale)); this(context, locale, null /* dictFile */);
} }
// Creates an instance that uses a given dictionary file for testing.
@UsedForTesting
public UserHistoryDictionary(final Context context, final Locale locale, public UserHistoryDictionary(final Context context, final Locale locale,
final File dictFile) { final File dictFile) {
super(context, locale, Dictionary.TYPE_USER_HISTORY, getDictNameWithLocale(NAME, locale), super(context, getDictName(NAME, locale, dictFile), locale, Dictionary.TYPE_USER_HISTORY,
dictFile); dictFile);
} }