Some cleanup and reinforcement
Bug: 9520584 Change-Id: I1c0f9e1b530d4d5bf5f52c2905c20f5ab7c26442
This commit is contained in:
parent
879629af3c
commit
49d7871290
1 changed files with 30 additions and 19 deletions
|
@ -51,23 +51,15 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
|
||||||
// to auto-correct, so we set this to the highest frequency that won't, i.e. 14.
|
// to auto-correct, so we set this to the highest frequency that won't, i.e. 14.
|
||||||
private static final int USER_DICT_SHORTCUT_FREQUENCY = 14;
|
private static final int USER_DICT_SHORTCUT_FREQUENCY = 14;
|
||||||
|
|
||||||
// TODO: use Words.SHORTCUT when we target JellyBean or above
|
private static final String[] PROJECTION_QUERY_WITH_SHORTCUT = new String[] {
|
||||||
final static String SHORTCUT = "shortcut";
|
|
||||||
private static final String[] PROJECTION_QUERY;
|
|
||||||
static {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
|
||||||
PROJECTION_QUERY = new String[] {
|
|
||||||
Words.WORD,
|
Words.WORD,
|
||||||
SHORTCUT,
|
Words.SHORTCUT,
|
||||||
Words.FREQUENCY,
|
Words.FREQUENCY,
|
||||||
};
|
};
|
||||||
} else {
|
private static final String[] PROJECTION_QUERY_WITHOUT_SHORTCUT = new String[] {
|
||||||
PROJECTION_QUERY = new String[] {
|
|
||||||
Words.WORD,
|
Words.WORD,
|
||||||
Words.FREQUENCY,
|
Words.FREQUENCY,
|
||||||
};
|
};
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String NAME = "userunigram";
|
private static final String NAME = "userunigram";
|
||||||
|
|
||||||
|
@ -182,10 +174,29 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
|
||||||
} else {
|
} else {
|
||||||
requestArguments = localeElements;
|
requestArguments = localeElements;
|
||||||
}
|
}
|
||||||
|
final String requestString = request.toString();
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||||
|
try {
|
||||||
|
addWordsFromProjectionLocked(PROJECTION_QUERY_WITH_SHORTCUT, requestString,
|
||||||
|
requestArguments);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// This may happen on some non-compliant devices where the declared API is JB+ but
|
||||||
|
// the SHORTCUT column is not present for some reason.
|
||||||
|
addWordsFromProjectionLocked(PROJECTION_QUERY_WITHOUT_SHORTCUT, requestString,
|
||||||
|
requestArguments);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
addWordsFromProjectionLocked(PROJECTION_QUERY_WITHOUT_SHORTCUT, requestString,
|
||||||
|
requestArguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addWordsFromProjectionLocked(final String[] query, String request,
|
||||||
|
final String[] requestArguments) throws IllegalArgumentException {
|
||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
try {
|
try {
|
||||||
cursor = mContext.getContentResolver().query(
|
cursor = mContext.getContentResolver().query(
|
||||||
Words.CONTENT_URI, PROJECTION_QUERY, request.toString(), requestArguments, null);
|
Words.CONTENT_URI, query, request, requestArguments, null);
|
||||||
addWordsLocked(cursor);
|
addWordsLocked(cursor);
|
||||||
} catch (final SQLiteException e) {
|
} catch (final SQLiteException e) {
|
||||||
Log.e(TAG, "SQLiteException in the remote User dictionary process.", e);
|
Log.e(TAG, "SQLiteException in the remote User dictionary process.", e);
|
||||||
|
@ -245,7 +256,7 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
|
||||||
if (cursor == null) return;
|
if (cursor == null) return;
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
final int indexWord = cursor.getColumnIndex(Words.WORD);
|
final int indexWord = cursor.getColumnIndex(Words.WORD);
|
||||||
final int indexShortcut = hasShortcutColumn ? cursor.getColumnIndex(SHORTCUT) : 0;
|
final int indexShortcut = hasShortcutColumn ? cursor.getColumnIndex(Words.SHORTCUT) : 0;
|
||||||
final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
|
final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
|
||||||
while (!cursor.isAfterLast()) {
|
while (!cursor.isAfterLast()) {
|
||||||
final String word = cursor.getString(indexWord);
|
final String word = cursor.getString(indexWord);
|
||||||
|
|
Loading…
Reference in a new issue