diff --git a/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java b/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
index 3095d69..0f893fe 100644
--- a/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
+++ b/tests/src/com/android/contacts/tests/mocks/ContactsMockPackageManager.java
@@ -17,7 +17,6 @@
 
 import android.content.ComponentName;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.test.mock.MockPackageManager;
diff --git a/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java b/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
index 14d563c..3acb52d 100644
--- a/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
+++ b/tests/src/com/android/contacts/tests/mocks/MockContentProvider.java
@@ -44,6 +44,9 @@
         private String[] mSelectionArgs;
         private String mSortOrder;
         private ArrayList<Object[]> mRows = new ArrayList<Object[]>();
+        private boolean mAnyProjection;
+        private boolean mAnySelection;
+        private boolean mAnySortOrder;
 
         public Query(Uri uri) {
             mUri = uri;
@@ -64,41 +67,61 @@
             return this;
         }
 
+        public Query withAnyProjection() {
+            mAnyProjection = true;
+            return this;
+        }
+
         public Query withSelection(String selection, String... selectionArgs) {
             mSelection = selection;
             mSelectionArgs = selectionArgs;
             return this;
         }
 
+        public Query withAnySelection() {
+            mAnySelection = true;
+            return this;
+        }
+
         public Query withSortOrder(String sortOrder) {
             mSortOrder = sortOrder;
             return this;
         }
 
+        public Query withAnySortOrder() {
+            mAnySortOrder = true;
+            return this;
+        }
+
         public Query returnRow(Object... row) {
             mRows.add(row);
             return this;
         }
 
+        public Query returnEmptyCursor() {
+            mRows.clear();
+            return this;
+        }
+
         public boolean equals(Uri uri, String[] projection, String selection,
                 String[] selectionArgs, String sortOrder) {
             if (!uri.equals(mUri)) {
                 return false;
             }
 
-            if (!equals(projection, mProjection)) {
+            if (!mAnyProjection && !equals(projection, mProjection)) {
                 return false;
             }
 
-            if (!TextUtils.equals(selection, mSelection)) {
+            if (!mAnySelection && !TextUtils.equals(selection, mSelection)) {
                 return false;
             }
 
-            if (!equals(selectionArgs, mSelectionArgs)) {
+            if (!mAnySelection && !equals(selectionArgs, mSelectionArgs)) {
                 return false;
             }
 
-            if (!TextUtils.equals(sortOrder, mSortOrder)) {
+            if (!mAnySortOrder && !TextUtils.equals(sortOrder, mSortOrder)) {
                 return false;
             }
 
@@ -126,7 +149,21 @@
         }
 
         public Cursor getResult() {
-            String[] columnNames = mProjection != null ? mProjection : mDefaultProjection;
+            String[] columnNames;
+            if (mAnyProjection) {
+                if (mRows.size() > 0) {
+                    int columnCount = mRows.get(0).length;
+                    columnNames = new String[columnCount];
+                    for (int i = 0; i < columnNames.length; i++) {
+                        columnNames[i] = "column" + (i+1);
+                    }
+                } else {
+                    columnNames = new String[]{"unspecified"};
+                }
+            } else {
+                columnNames = mProjection != null ? mProjection : mDefaultProjection;
+            }
+
             MatrixCursor cursor = new MatrixCursor(columnNames);
             for (Object[] row : mRows) {
                 cursor.addRow(row);
