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);