Improve compatibility for ICS.

ICS didn't have a SHORTCUT column in the user dictionary.
If running on a build under JellyBean, we should not ask
for it lest we crash.

Bug: 6600617
Change-Id: Iac0cbcc63c10064f01e2d51eec5931fd9cdd0922
main
Jean Chalard 2012-06-20 16:49:04 -07:00
parent 6080f6878b
commit 9997b44846
1 changed files with 23 additions and 10 deletions

View File

@ -36,11 +36,22 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
// TODO: use Words.SHORTCUT when it's public in the SDK // TODO: use Words.SHORTCUT when it's public in the SDK
final static String SHORTCUT = "shortcut"; final static String SHORTCUT = "shortcut";
private static final String[] PROJECTION_QUERY = { private static final String[] PROJECTION_QUERY;
Words.WORD, static {
SHORTCUT, // 16 is JellyBean, but we want this to compile against ICS.
Words.FREQUENCY, if (android.os.Build.VERSION.SDK_INT >= 16) {
}; PROJECTION_QUERY = new String[] {
Words.WORD,
SHORTCUT,
Words.FREQUENCY,
};
} else {
PROJECTION_QUERY = new String[] {
Words.WORD,
Words.FREQUENCY,
};
}
}
private static final String NAME = "userunigram"; private static final String NAME = "userunigram";
@ -136,7 +147,7 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
requestArguments = localeElements; requestArguments = localeElements;
} }
final Cursor cursor = mContext.getContentResolver().query( final Cursor cursor = mContext.getContentResolver().query(
Words.CONTENT_URI, PROJECTION_QUERY, request.toString(), requestArguments, null); Words.CONTENT_URI, PROJECTION_QUERY, request.toString(), requestArguments, null);
try { try {
addWords(cursor); addWords(cursor);
} finally { } finally {
@ -182,16 +193,18 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
} }
private void addWords(Cursor cursor) { private void addWords(Cursor cursor) {
// 16 is JellyBean, but we want this to compile against ICS.
final boolean hasShortcutColumn = android.os.Build.VERSION.SDK_INT >= 16;
clearFusionDictionary(); clearFusionDictionary();
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 = cursor.getColumnIndex(SHORTCUT); final int indexShortcut = hasShortcutColumn ? cursor.getColumnIndex(SHORTCUT) : 0;
final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY); final int indexFrequency = cursor.getColumnIndex(Words.FREQUENCY);
while (!cursor.isAfterLast()) { while (!cursor.isAfterLast()) {
String word = cursor.getString(indexWord); final String word = cursor.getString(indexWord);
String shortcut = cursor.getString(indexShortcut); final String shortcut = hasShortcutColumn ? cursor.getString(indexShortcut) : null;
int frequency = cursor.getInt(indexFrequency); final int frequency = cursor.getInt(indexFrequency);
// Safeguard against adding really long words. // Safeguard against adding really long words.
if (word.length() < MAX_WORD_LENGTH) { if (word.length() < MAX_WORD_LENGTH) {
super.addWord(word, null, frequency); super.addWord(word, null, frequency);