diff options
author | 2011-07-13 02:06:14 -0700 | |
---|---|---|
committer | 2011-07-13 02:06:14 -0700 | |
commit | 18fa487202da11b1d0fa2516a5024b01f4ccd663 (patch) | |
tree | 6e32321588a1866b79a175efb331b52d59ca1b3f /java/src/com/android/inputmethod/latin/UserDictionary.java | |
parent | ad2a3bd6dd04c9ed53e1c46d4e111f738d112c5e (diff) | |
parent | 092826c8cdec0cf0c49c3de9b247e58403c34da7 (diff) | |
download | latinime-18fa487202da11b1d0fa2516a5024b01f4ccd663.tar.gz latinime-18fa487202da11b1d0fa2516a5024b01f4ccd663.tar.xz latinime-18fa487202da11b1d0fa2516a5024b01f4ccd663.zip |
Merge "Fix crash on adding a word in the user dictionary."
Diffstat (limited to 'java/src/com/android/inputmethod/latin/UserDictionary.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/UserDictionary.java | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/java/src/com/android/inputmethod/latin/UserDictionary.java b/java/src/com/android/inputmethod/latin/UserDictionary.java index c06bd736e..2aaa26c8d 100644 --- a/java/src/com/android/inputmethod/latin/UserDictionary.java +++ b/java/src/com/android/inputmethod/latin/UserDictionary.java @@ -16,12 +16,14 @@ package com.android.inputmethod.latin; +import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; +import android.os.RemoteException; import android.provider.UserDictionary.Words; public class UserDictionary extends ExpandableDictionary { @@ -99,24 +101,34 @@ public class UserDictionary extends ExpandableDictionary { values.put(Words.APP_ID, 0); final ContentResolver contentResolver = getContext().getContentResolver(); + final ContentProviderClient client = + contentResolver.acquireContentProviderClient(Words.CONTENT_URI); + if (null == client) return; new Thread("addWord") { @Override public void run() { - Cursor cursor = contentResolver.query(Words.CONTENT_URI, PROJECTION_ADD, - "word=? and ((locale IS NULL) or (locale=?))", - new String[] { word, mLocale }, null); - if (cursor != null && cursor.moveToFirst()) { - String locale = cursor.getString(cursor.getColumnIndex(Words.LOCALE)); - // If locale is null, we will not override the entry. - if (locale != null && locale.equals(mLocale.toString())) { - long id = cursor.getLong(cursor.getColumnIndex(Words._ID)); - Uri uri = Uri.withAppendedPath(Words.CONTENT_URI, Long.toString(id)); - // Update the entry with new frequency value. - contentResolver.update(uri, values, null, null); + try { + final Cursor cursor = client.query(Words.CONTENT_URI, PROJECTION_ADD, + "word=? and ((locale IS NULL) or (locale=?))", + new String[] { word, mLocale }, null); + if (cursor != null && cursor.moveToFirst()) { + final String locale = cursor.getString(cursor.getColumnIndex(Words.LOCALE)); + // If locale is null, we will not override the entry. + if (locale != null && locale.equals(mLocale.toString())) { + final long id = cursor.getLong(cursor.getColumnIndex(Words._ID)); + final Uri uri = + 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 { - // Insert new entry. - contentResolver.insert(Words.CONTENT_URI, values); + } catch (RemoteException e) { + // If we come here, the activity is already about to be killed, and we + // have no means of contacting the content provider any more. + // See ContentResolver#insert, inside the catch(){} } } }.start(); |