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: Iac0cbcc63c10064f01e2d51eec5931fd9cdd0922main
parent
6080f6878b
commit
9997b44846
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue