Merge "Fixing "closed cursor" exception in contacts search" into honeycomb
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 8fb3d95..7b04562 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -18,6 +18,7 @@
 import com.android.contacts.R;
 
 import android.database.Cursor;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -110,7 +111,7 @@
             }
 
             // In search mode we only display the header if there is nothing found
-            if (!adapter.areAllPartitionsEmpty()) {
+            if (TextUtils.isEmpty(getQueryString()) || !adapter.areAllPartitionsEmpty()) {
                 mSearchHeaderView.setVisibility(View.GONE);
             } else {
                 TextView textView = (TextView) mSearchHeaderView.findViewById(
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 6b4a653..164a2cd 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -52,21 +52,29 @@
         ContactListFilter filter = getFilter();
         if (isSearchMode()) {
             String query = getQueryString();
-            Builder builder = Contacts.CONTENT_FILTER_URI.buildUpon();
+            if (query == null) {
+                query = "";
+            }
+            query = query.trim();
             if (TextUtils.isEmpty(query)) {
-                builder.appendPath("");
+                // Regardless of the directory, we don't want anything returned,
+                // so let's just send a "nothing" query to the local directory.
+                loader.setUri(Contacts.CONTENT_URI);
+                loader.setProjection(PROJECTION_CONTACT);
+                loader.setSelection("0");
             } else {
+                Builder builder = Contacts.CONTENT_FILTER_URI.buildUpon();
                 builder.appendPath(query);      // Builder will encode the query
+                builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                        String.valueOf(directoryId));
+                if (directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE) {
+                    builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+                            String.valueOf(getDirectoryResultLimit()));
+                }
+                applyDataRestriction(builder);
+                loader.setUri(builder.build());
+                loader.setProjection(FILTER_PROJECTION);
             }
-            builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
-                    String.valueOf(directoryId));
-            if (directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE) {
-                builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
-                        String.valueOf(getDirectoryResultLimit()));
-            }
-            applyDataRestriction(builder);
-            loader.setUri(builder.build());
-            loader.setProjection(FILTER_PROJECTION);
         } else {
             configureUri(loader, directoryId, filter);
             configureProjection(loader, directoryId, filter);