summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2015-06-16 21:45:20 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-16 21:45:20 +0000
commit1efb4c217ac50a3ed7b1246dac8f9b0a041b2593 (patch)
treef246c415ee097bcca16eb38ed7dadcefcad8a180
parent007375d04b398a825e935f5ca4b86ff4853e6941 (diff)
parent3edc78c78ba277b116c28fde9b8759cb18f03e1e (diff)
downloadpackages_providers_ContactsProvider-1efb4c217ac50a3ed7b1246dac8f9b0a041b2593.tar.gz
packages_providers_ContactsProvider-1efb4c217ac50a3ed7b1246dac8f9b0a041b2593.tar.bz2
packages_providers_ContactsProvider-1efb4c217ac50a3ed7b1246dac8f9b0a041b2593.zip
am 3edc78c7: Guard against directory provider crash
* commit '3edc78c78ba277b116c28fde9b8759cb18f03e1e': Guard against directory provider crash
-rw-r--r--src/com/android/providers/contacts/ContactsProvider2.java27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 886bc94e..78355898 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -3548,7 +3548,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
args[0] = String.valueOf(contactId);
args[1] = Uri.encode(lookupKey);
lookupQb.appendWhere(Contacts._ID + "=? AND " + Contacts.LOOKUP_KEY + "=?");
- Cursor c = query(db, lookupQb, null, selection, args, null, null, null, null, null);
+ Cursor c = doQuery(db, lookupQb, null, selection, args, null, null, null, null,
+ null);
try {
if (c.getCount() == 1) {
// Contact was unmodified so go ahead and delete it.
@@ -5105,9 +5106,15 @@ public class ContactsProvider2 extends AbstractContactsProvider
projection = getDefaultProjection(uri);
}
- Cursor cursor = getContext().getContentResolver().query(
- directoryUri, projection, selection, selectionArgs, sortOrder);
- if (cursor == null) {
+ Cursor cursor;
+ try {
+ cursor = getContext().getContentResolver().query(
+ directoryUri, projection, selection, selectionArgs, sortOrder);
+ if (cursor == null) {
+ return null;
+ }
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Directory query failed: uri=" + uri, e);
return null;
}
@@ -6263,7 +6270,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
// phone_number_compare_loose.
qb.setStrict(true);
boolean foundResult = false;
- Cursor cursor = query(db, qb, projectionWithNumber, selection, selectionArgs,
+ Cursor cursor = doQuery(db, qb, projectionWithNumber, selection, selectionArgs,
sortOrder, groupBy, null, limit, cancellationSignal);
try {
if (cursor.getCount() > 0) {
@@ -6282,7 +6289,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
// numbers
mDbHelper.get().buildFallbackPhoneLookupAndContactQuery(qb, number);
- final Cursor fallbackCursor = query(db, qb, projectionWithNumber,
+ final Cursor fallbackCursor = doQuery(db, qb, projectionWithNumber,
selection, selectionArgs, sortOrder, groupBy, having, limit,
cancellationSignal);
return PhoneLookupWithStarPrefix.removeNonStarMatchesFromCursor(
@@ -6507,8 +6514,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
// Auto-rewrite SORT_KEY_{PRIMARY, ALTERNATIVE} sort orders.
String localizedSortOrder = getLocalizedSortOrder(sortOrder);
Cursor cursor =
- query(db, qb, projection, selection, selectionArgs, localizedSortOrder, groupBy,
- having, limit, cancellationSignal);
+ doQuery(db, qb, projection, selection, selectionArgs, localizedSortOrder, groupBy,
+ having, limit, cancellationSignal);
if (readBooleanQueryParameter(uri, Contacts.EXTRA_ADDRESS_BOOK_INDEX, false)) {
bundleFastScrollingIndexExtras(cursor, uri, db, qb, selection,
@@ -6549,7 +6556,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
return localizedSortOrder;
}
- private Cursor query(final SQLiteDatabase db, SQLiteQueryBuilder qb, String[] projection,
+ private Cursor doQuery(final SQLiteDatabase db, SQLiteQueryBuilder qb, String[] projection,
String selection, String[] selectionArgs, String sortOrder, String groupBy,
String having, String limit, CancellationSignal cancellationSignal) {
if (projection != null && projection.length == 1
@@ -6864,7 +6871,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
args[0] = String.valueOf(contactId);
args[1] = Uri.encode(lookupKey);
lookupQb.appendWhere(contactIdColumn + "=? AND " + lookupKeyColumn + "=?");
- Cursor c = query(db, lookupQb, projection, selection, args, sortOrder,
+ Cursor c = doQuery(db, lookupQb, projection, selection, args, sortOrder,
groupBy, null, limit, cancellationSignal);
if (c.getCount() != 0) {
return c;