Merge "Contacts binary dictionary updates with change in keyboard locale."

This commit is contained in:
Tom Ouyang 2012-06-07 01:19:44 -07:00 committed by Android (Google) Code Review
commit 11dc22d964
2 changed files with 33 additions and 16 deletions

View file

@ -52,6 +52,9 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
/** The number of contacts in the most recent dictionary rebuild. */ /** The number of contacts in the most recent dictionary rebuild. */
static private int sContactCountAtLastRebuild = 0; static private int sContactCountAtLastRebuild = 0;
/** The locale for this contacts dictionary. Controls name bigram predictions. */
public final Locale mLocale;
private ContentObserver mObserver; private ContentObserver mObserver;
/** /**
@ -61,6 +64,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
public ContactsBinaryDictionary(final Context context, final int dicTypeId, Locale locale) { public ContactsBinaryDictionary(final Context context, final int dicTypeId, Locale locale) {
super(context, getFilenameWithLocale(NAME, locale.toString()), dicTypeId); super(context, getFilenameWithLocale(NAME, locale.toString()), dicTypeId);
mLocale = locale;
mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale); mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale);
registerObserver(context); registerObserver(context);

View file

@ -505,9 +505,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
/** /**
* Resets the contacts dictionary in mSuggest according to the user settings. * Resets the contacts dictionary in mSuggest according to the user settings.
* *
* This method takes an optional contacts dictionary to use. Since the contacts dictionary * This method takes an optional contacts dictionary to use when the locale hasn't changed
* does not depend on the locale, it can be reused across different instances of Suggest. * since the contacts dictionary can be opened or closed as necessary depending on the settings.
* The dictionary will also be opened or closed as necessary depending on the settings.
* *
* @param oldContactsDictionary an optional dictionary to use, or null * @param oldContactsDictionary an optional dictionary to use, or null
*/ */
@ -520,23 +519,37 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// so it's safe to call it anyways. // so it's safe to call it anyways.
if (null != oldContactsDictionary) oldContactsDictionary.close(); if (null != oldContactsDictionary) oldContactsDictionary.close();
dictionaryToUse = null; dictionaryToUse = null;
} else if (null != oldContactsDictionary) { } else {
// Make sure the old contacts dictionary is opened. If it is already open, this is a final Locale locale = mSubtypeSwitcher.getCurrentSubtypeLocale();
// no-op, so it's safe to call it anyways. if (null != oldContactsDictionary) {
if (USE_BINARY_CONTACTS_DICTIONARY) { if (USE_BINARY_CONTACTS_DICTIONARY) {
((ContactsBinaryDictionary)oldContactsDictionary).reopen(this); ContactsBinaryDictionary oldContactsBinaryDictionary =
(ContactsBinaryDictionary)oldContactsDictionary;
if (!oldContactsBinaryDictionary.mLocale.equals(locale)) {
// If the locale has changed then recreate the contacts dictionary. This
// allows locale dependent rules for handling bigram name predictions.
oldContactsDictionary.close();
dictionaryToUse = new ContactsBinaryDictionary(
this, Suggest.DIC_CONTACTS, locale);
} else {
// Make sure the old contacts dictionary is opened. If it is already open,
// this is a no-op, so it's safe to call it anyways.
oldContactsBinaryDictionary.reopen(this);
dictionaryToUse = oldContactsDictionary;
}
} else { } else {
((ContactsDictionary)oldContactsDictionary).reopen(this); ((ContactsDictionary)oldContactsDictionary).reopen(this);
}
dictionaryToUse = oldContactsDictionary; dictionaryToUse = oldContactsDictionary;
}
} else { } else {
if (USE_BINARY_CONTACTS_DICTIONARY) { if (USE_BINARY_CONTACTS_DICTIONARY) {
dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS, dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS,
mSubtypeSwitcher.getCurrentSubtypeLocale()); locale);
} else { } else {
dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS); dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
} }
} }
}
if (null != mSuggest) { if (null != mSuggest) {
mSuggest.setContactsDictionary(dictionaryToUse); mSuggest.setContactsDictionary(dictionaryToUse);