Merge "Fix crash on adding a word in the user dictionary."
commit
18fa487202
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue