diff options
| -rw-r--r-- | services/people/java/com/android/server/people/data/ContactsQueryHelper.java | 3 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/people/data/ContactsQueryHelperTest.java | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/services/people/java/com/android/server/people/data/ContactsQueryHelper.java b/services/people/java/com/android/server/people/data/ContactsQueryHelper.java index 8a3a44ae9f35..0993295e162f 100644 --- a/services/people/java/com/android/server/people/data/ContactsQueryHelper.java +++ b/services/people/java/com/android/server/people/data/ContactsQueryHelper.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.annotation.WorkerThread; import android.content.Context; import android.database.Cursor; +import android.database.sqlite.SQLiteException; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; @@ -149,6 +150,8 @@ class ContactsQueryHelper { found = true; } + } catch (SQLiteException exception) { + Slog.w("SQLite exception when querying contacts.", exception); } if (found && lookupKey != null && hasPhoneNumber) { return queryPhoneNumber(lookupKey); diff --git a/services/tests/servicestests/src/com/android/server/people/data/ContactsQueryHelperTest.java b/services/tests/servicestests/src/com/android/server/people/data/ContactsQueryHelperTest.java index 96302b954e75..299f15344dfa 100644 --- a/services/tests/servicestests/src/com/android/server/people/data/ContactsQueryHelperTest.java +++ b/services/tests/servicestests/src/com/android/server/people/data/ContactsQueryHelperTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.when; import android.database.Cursor; import android.database.MatrixCursor; +import android.database.sqlite.SQLiteException; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; @@ -63,6 +64,7 @@ public final class ContactsQueryHelperTest { private MatrixCursor mContactsLookupCursor; private MatrixCursor mPhoneCursor; private ContactsQueryHelper mHelper; + private ContactsContentProvider contentProvider; @Before public void setUp() { @@ -73,7 +75,7 @@ public final class ContactsQueryHelperTest { mPhoneCursor = new MatrixCursor(PHONE_COLUMNS); MockContentResolver contentResolver = new MockContentResolver(); - ContactsContentProvider contentProvider = new ContactsContentProvider(); + contentProvider = new ContactsContentProvider(); contentProvider.registerCursor(Contacts.CONTENT_URI, mContactsCursor); contentProvider.registerCursor( ContactsContract.PhoneLookup.CONTENT_FILTER_URI, mContactsLookupCursor); @@ -89,6 +91,14 @@ public final class ContactsQueryHelperTest { } @Test + public void testQueryException_returnsFalse() { + contentProvider.setThrowException(true); + + Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, CONTACT_LOOKUP_KEY); + assertFalse(mHelper.query(contactUri.toString())); + } + + @Test public void testQueryWithUri() { mContactsCursor.addRow(new Object[] { /* id= */ 11, CONTACT_LOOKUP_KEY, /* starred= */ 1, /* hasPhoneNumber= */ 1, @@ -168,10 +178,15 @@ public final class ContactsQueryHelperTest { private class ContactsContentProvider extends MockContentProvider { private Map<Uri, Cursor> mUriPrefixToCursorMap = new ArrayMap<>(); + private boolean throwException = false; @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + if (throwException) { + throw new SQLiteException(); + } + for (Uri prefixUri : mUriPrefixToCursorMap.keySet()) { if (uri.isPathPrefixMatch(prefixUri)) { return mUriPrefixToCursorMap.get(prefixUri); @@ -180,6 +195,10 @@ public final class ContactsQueryHelperTest { return mUriPrefixToCursorMap.get(uri); } + public void setThrowException(boolean throwException) { + this.throwException = throwException; + } + private void registerCursor(Uri uriPrefix, Cursor cursor) { mUriPrefixToCursorMap.put(uriPrefix, cursor); } |