Contacts binary dictionary updates with change in keyboard locale.

Bug: 6616436
Change-Id: I8d66a37f295134c5b9875b2a305a9be7442bd75d
This commit is contained in:
Tom Ouyang 2012-06-05 21:29:14 -07:00
parent 6b3b37da97
commit 2e8aa06002
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. */
static private int sContactCountAtLastRebuild = 0;
/** The locale for this contacts dictionary. Controls name bigram predictions. */
public final Locale mLocale;
private ContentObserver mObserver;
/**
@ -61,6 +64,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
public ContactsBinaryDictionary(final Context context, final int dicTypeId, Locale locale) {
super(context, getFilenameWithLocale(NAME, locale.toString()), dicTypeId);
mLocale = locale;
mUseFirstLastBigrams = useFirstLastBigramsForLocale(locale);
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.
*
* This method takes an optional contacts dictionary to use. Since the contacts dictionary
* does not depend on the locale, it can be reused across different instances of Suggest.
* The dictionary will also be opened or closed as necessary depending on the settings.
* This method takes an optional contacts dictionary to use when the locale hasn't changed
* since the contacts dictionary can be opened or closed as necessary depending on the settings.
*
* @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.
if (null != oldContactsDictionary) oldContactsDictionary.close();
dictionaryToUse = null;
} else if (null != oldContactsDictionary) {
// 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.
} else {
final Locale locale = mSubtypeSwitcher.getCurrentSubtypeLocale();
if (null != oldContactsDictionary) {
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 {
((ContactsDictionary)oldContactsDictionary).reopen(this);
}
dictionaryToUse = oldContactsDictionary;
}
} else {
if (USE_BINARY_CONTACTS_DICTIONARY) {
dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS,
mSubtypeSwitcher.getCurrentSubtypeLocale());
locale);
} else {
dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
}
}
}
if (null != mSuggest) {
mSuggest.setContactsDictionary(dictionaryToUse);