Merge "Fix crash on adding a word in the user dictionary."

main
Jean Chalard 2011-07-13 02:06:14 -07:00 committed by Android (Google) Code Review
commit 18fa487202
1 changed files with 26 additions and 14 deletions

View File

@ -16,12 +16,14 @@
package com.android.inputmethod.latin; package com.android.inputmethod.latin;
import android.content.ContentProviderClient;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.RemoteException;
import android.provider.UserDictionary.Words; import android.provider.UserDictionary.Words;
public class UserDictionary extends ExpandableDictionary { public class UserDictionary extends ExpandableDictionary {
@ -99,24 +101,34 @@ public class UserDictionary extends ExpandableDictionary {
values.put(Words.APP_ID, 0); values.put(Words.APP_ID, 0);
final ContentResolver contentResolver = getContext().getContentResolver(); final ContentResolver contentResolver = getContext().getContentResolver();
final ContentProviderClient client =
contentResolver.acquireContentProviderClient(Words.CONTENT_URI);
if (null == client) return;
new Thread("addWord") { new Thread("addWord") {
@Override @Override
public void run() { public void run() {
Cursor cursor = contentResolver.query(Words.CONTENT_URI, PROJECTION_ADD, try {
"word=? and ((locale IS NULL) or (locale=?))", final Cursor cursor = client.query(Words.CONTENT_URI, PROJECTION_ADD,
new String[] { word, mLocale }, null); "word=? and ((locale IS NULL) or (locale=?))",
if (cursor != null && cursor.moveToFirst()) { new String[] { word, mLocale }, null);
String locale = cursor.getString(cursor.getColumnIndex(Words.LOCALE)); if (cursor != null && cursor.moveToFirst()) {
// If locale is null, we will not override the entry. final String locale = cursor.getString(cursor.getColumnIndex(Words.LOCALE));
if (locale != null && locale.equals(mLocale.toString())) { // If locale is null, we will not override the entry.
long id = cursor.getLong(cursor.getColumnIndex(Words._ID)); if (locale != null && locale.equals(mLocale.toString())) {
Uri uri = Uri.withAppendedPath(Words.CONTENT_URI, Long.toString(id)); final long id = cursor.getLong(cursor.getColumnIndex(Words._ID));
// Update the entry with new frequency value. final Uri uri =
contentResolver.update(uri, values, null, null); Uri.withAppendedPath(Words.CONTENT_URI, Long.toString(id));
// Update the entry with new frequency value.
client.update(uri, values, null, null);
}
} else {
// Insert new entry.
client.insert(Words.CONTENT_URI, values);
} }
} else { } catch (RemoteException e) {
// Insert new entry. // If we come here, the activity is already about to be killed, and we
contentResolver.insert(Words.CONTENT_URI, values); // have no means of contacting the content provider any more.
// See ContentResolver#insert, inside the catch(){}
} }
} }
}.start(); }.start();