Contacts binary dictionary updates with change in keyboard locale.
Bug: 6616436 Change-Id: I8d66a37f295134c5b9875b2a305a9be7442bd75d
This commit is contained in:
parent
6b3b37da97
commit
2e8aa06002
2 changed files with 33 additions and 16 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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,21 +519,35 @@ 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) {
|
|
||||||
// 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.
|
|
||||||
if (USE_BINARY_CONTACTS_DICTIONARY) {
|
|
||||||
((ContactsBinaryDictionary)oldContactsDictionary).reopen(this);
|
|
||||||
} else {
|
|
||||||
((ContactsDictionary)oldContactsDictionary).reopen(this);
|
|
||||||
}
|
|
||||||
dictionaryToUse = oldContactsDictionary;
|
|
||||||
} else {
|
} else {
|
||||||
if (USE_BINARY_CONTACTS_DICTIONARY) {
|
final Locale locale = mSubtypeSwitcher.getCurrentSubtypeLocale();
|
||||||
dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS,
|
if (null != oldContactsDictionary) {
|
||||||
mSubtypeSwitcher.getCurrentSubtypeLocale());
|
if (USE_BINARY_CONTACTS_DICTIONARY) {
|
||||||
|
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 {
|
} else {
|
||||||
dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
|
if (USE_BINARY_CONTACTS_DICTIONARY) {
|
||||||
|
dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS,
|
||||||
|
locale);
|
||||||
|
} else {
|
||||||
|
dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue