Fix LatinIME crashing due to crash in Contacts DB
bug: 2895391 Change-Id: I3a0628942b74556f8b600b63ebc5d808fb2f0abdmain
parent
17dc363a63
commit
78c4611719
|
@ -32,6 +32,8 @@ public class ContactsDictionary extends ExpandableDictionary {
|
||||||
Contacts.DISPLAY_NAME,
|
Contacts.DISPLAY_NAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String TAG = "ContactsDictionary";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frequency for contacts information into the dictionary
|
* Frequency for contacts information into the dictionary
|
||||||
*/
|
*/
|
||||||
|
@ -80,10 +82,14 @@ public class ContactsDictionary extends ExpandableDictionary {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadDictionaryAsync() {
|
public void loadDictionaryAsync() {
|
||||||
Cursor cursor = getContext().getContentResolver()
|
try {
|
||||||
.query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
|
Cursor cursor = getContext().getContentResolver()
|
||||||
if (cursor != null) {
|
.query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
|
||||||
addWords(cursor);
|
if (cursor != null) {
|
||||||
|
addWords(cursor);
|
||||||
|
}
|
||||||
|
} catch(IllegalStateException e) {
|
||||||
|
Log.e(TAG, "Contacts DB is having problems");
|
||||||
}
|
}
|
||||||
mLastLoadedContacts = SystemClock.uptimeMillis();
|
mLastLoadedContacts = SystemClock.uptimeMillis();
|
||||||
}
|
}
|
||||||
|
@ -92,52 +98,55 @@ public class ContactsDictionary extends ExpandableDictionary {
|
||||||
clearDictionary();
|
clearDictionary();
|
||||||
|
|
||||||
final int maxWordLength = getMaxWordLength();
|
final int maxWordLength = getMaxWordLength();
|
||||||
if (cursor.moveToFirst()) {
|
try {
|
||||||
while (!cursor.isAfterLast()) {
|
if (cursor.moveToFirst()) {
|
||||||
String name = cursor.getString(INDEX_NAME);
|
while (!cursor.isAfterLast()) {
|
||||||
|
String name = cursor.getString(INDEX_NAME);
|
||||||
|
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
int len = name.length();
|
int len = name.length();
|
||||||
String prevWord = null;
|
String prevWord = null;
|
||||||
|
|
||||||
// TODO: Better tokenization for non-Latin writing systems
|
// TODO: Better tokenization for non-Latin writing systems
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
if (Character.isLetter(name.charAt(i))) {
|
if (Character.isLetter(name.charAt(i))) {
|
||||||
int j;
|
int j;
|
||||||
for (j = i + 1; j < len; j++) {
|
for (j = i + 1; j < len; j++) {
|
||||||
char c = name.charAt(j);
|
char c = name.charAt(j);
|
||||||
|
|
||||||
if (!(c == '-' || c == '\'' ||
|
if (!(c == '-' || c == '\'' ||
|
||||||
Character.isLetter(c))) {
|
Character.isLetter(c))) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
String word = name.substring(i, j);
|
String word = name.substring(i, j);
|
||||||
i = j - 1;
|
i = j - 1;
|
||||||
|
|
||||||
// Safeguard against adding really long words. Stack
|
// Safeguard against adding really long words. Stack
|
||||||
// may overflow due to recursion
|
// may overflow due to recursion
|
||||||
// Also don't add single letter words, possibly confuses
|
// Also don't add single letter words, possibly confuses
|
||||||
// capitalization of i.
|
// capitalization of i.
|
||||||
final int wordLen = word.length();
|
final int wordLen = word.length();
|
||||||
if (wordLen < maxWordLength && wordLen > 1) {
|
if (wordLen < maxWordLength && wordLen > 1) {
|
||||||
super.addWord(word, FREQUENCY_FOR_CONTACTS);
|
super.addWord(word, FREQUENCY_FOR_CONTACTS);
|
||||||
if (!TextUtils.isEmpty(prevWord)) {
|
if (!TextUtils.isEmpty(prevWord)) {
|
||||||
// TODO Do not add email address
|
// TODO Do not add email address
|
||||||
// Not so critical
|
// Not so critical
|
||||||
super.setBigram(prevWord, word, FREQUENCY_FOR_CONTACTS_BIGRAM);
|
super.setBigram(prevWord, word,
|
||||||
|
FREQUENCY_FOR_CONTACTS_BIGRAM);
|
||||||
|
}
|
||||||
|
prevWord = word;
|
||||||
}
|
}
|
||||||
prevWord = word;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cursor.moveToNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor.moveToNext();
|
|
||||||
}
|
}
|
||||||
|
cursor.close();
|
||||||
|
} catch(IllegalStateException e) {
|
||||||
|
Log.e(TAG, "Contacts DB is having problems");
|
||||||
}
|
}
|
||||||
cursor.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue