Merge "Add a variable detecting illegal unbinding."
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c030cf0..a15619a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1357,6 +1357,9 @@
     <!-- Contact list filter selection indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
     <string name="list_filter_customize">Customize...</string>
 
+    <!-- Contact list filter selection indicating that the list shows all contacts with phone numbers [CHAR LIMIT=64] -->
+    <string name="list_filter_phones">Contacts with phone numbers</string>
+
     <!-- Title of the activity that allows the user to customize filtering of contact list [CHAR LIMIT=128] -->
     <string name="custom_list_filter">Define custom view</string>
 
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index aa75414..149260f 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -23,6 +23,7 @@
 import com.android.contacts.list.ContactBrowseListContextMenuAdapter;
 import com.android.contacts.list.ContactBrowseListFragment;
 import com.android.contacts.list.ContactEntryListFragment;
+import com.android.contacts.list.ContactListFilter;
 import com.android.contacts.list.ContactListFilterController;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
@@ -172,11 +173,9 @@
         mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         mContactContentDisplayed = findViewById(R.id.detail_container) != null;
 
-        Uri contactUri = null;
         if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
-            contactUri = mRequest.getContactUri();
             if (!mContactContentDisplayed) {
-                startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
+                startActivity(new Intent(Intent.ACTION_VIEW, mRequest.getContactUri()));
                 finish();
                 return;
             }
@@ -190,10 +189,7 @@
             // TODO: request may ask for FREQUENT - set the filter accordingly
         }
 
-        configureListFragment(contactUri);
-        if (contactUri != null) {
-            setSelectedContactUri(contactUri);
-        }
+        configureListFragment(true /* from request */);
 
         if (mContactContentDisplayed) {
             setupContactDetailFragment(mListFragment.getSelectedContactUri());
@@ -238,20 +234,28 @@
         return TextUtils.isEmpty(uriString) ? null : Uri.parse(uriString);
     }
 
-    private void configureListFragment(Uri selectedContactUri) {
+    private void configureListFragment(boolean fromRequest) {
         boolean searchMode = mSearchMode;
-        if (mHasActionBar) {
-            searchMode = mActionBarAdapter.isSearchMode();
+        if (fromRequest) {
+            if (mRequest.getDisplayWithPhoneNumbersOnly()) {
+                mContactListFilterController.setContactListFilter(new ContactListFilter(
+                        ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY), false);
+                searchMode = false;
+            }
         } else {
+            if (mHasActionBar) {
+                searchMode = mActionBarAdapter.isSearchMode();
+            } else {
 // TODO: reenable FREQUENT, STARRED and STREQUENT
-//            int actionCode = mRequest.getActionCode();
-//            if (actionCode == ContactsRequest.ACTION_FREQUENT ||
-//                    actionCode == ContactsRequest.ACTION_STARRED ||
-//                    actionCode == ContactsRequest.ACTION_STREQUENT) {
-//                mode = ContactBrowserMode.MODE_FAVORITES;
-//            } else {
-//                mode = ContactBrowserMode.MODE_CONTACTS;
-//            }
+//                int actionCode = mRequest.getActionCode();
+//                if (actionCode == ContactsRequest.ACTION_FREQUENT ||
+//                        actionCode == ContactsRequest.ACTION_STARRED ||
+//                        actionCode == ContactsRequest.ACTION_STREQUENT) {
+//                    mode = ContactBrowserMode.MODE_FAVORITES;
+//                } else {
+//                    mode = ContactBrowserMode.MODE_CONTACTS;
+//                }
+            }
         }
 
         boolean replaceList = mListFragment == null || (mSearchMode != searchMode);
@@ -283,13 +287,16 @@
             }
         }
 
-        Uri selectUri;
-        if (selectedContactUri != null) {
-            selectUri = selectedContactUri;
-        } else if (mListFragment.getSelectedContactUri() == null) {
+        Uri selectUri = null;
+        if (fromRequest) {
+            selectUri = mRequest.getContactUri();
+            if (selectUri != null) {
+                setSelectedContactUri(selectUri);
+            }
+        }
+
+        if (selectUri == null && mListFragment.getSelectedContactUri() == null) {
             selectUri = getDefaultSelectedContactUri();
-        } else {
-            selectUri = null;
         }
 
         if (selectUri != null) {
@@ -422,7 +429,7 @@
      */
     @Override
     public void onAction() {
-        configureListFragment(null);
+        configureListFragment(false /* from request */);
         setupContactDetailFragment(mListFragment.getSelectedContactUri());
     }
 
@@ -435,8 +442,6 @@
                 DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
                 fragment.setContactsRequest(mRequest);
                 fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
-                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
                 fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
                 fragment.setSearchMode(mRequest.isSearchMode());
                 fragment.setQueryString(mRequest.getQueryString());
@@ -491,8 +496,6 @@
     private ContactBrowseListFragment createContactSearchFragment() {
         DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
         fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-        fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
-        fragment.setVisibleContactsRestrictionEnabled(true);
         fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
         fragment.setSearchMode(true);
         fragment.setDirectorySearchEnabled(true);
diff --git a/src/com/android/contacts/activities/ContactSearchActivity.java b/src/com/android/contacts/activities/ContactSearchActivity.java
index cac3e1e..708099c 100644
--- a/src/com/android/contacts/activities/ContactSearchActivity.java
+++ b/src/com/android/contacts/activities/ContactSearchActivity.java
@@ -95,8 +95,6 @@
     private ContactBrowseListFragment createContactSearchFragment() {
         DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
         fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-        fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
-        fragment.setVisibleContactsRestrictionEnabled(true);
         fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
         fragment.setSearchMode(true);
         fragment.setDirectorySearchEnabled(true);
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 66d06d2..bd2834d 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -142,8 +142,6 @@
                 fragment.setOnContactListActionListener(new ContactBrowserActionListener());
                 fragment.setEditMode(true);
                 fragment.setCreateContactEnabled(true);
-                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
-                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
                 fragment.setSearchMode(mRequest.isSearchMode());
                 fragment.setQueryString(mRequest.getQueryString());
                 fragment.setDirectorySearchEnabled(false);
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 47b35d1..0189bbb 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -25,12 +25,13 @@
  */
 public final class ContactListFilter implements Comparable<ContactListFilter> {
 
-    public static final int FILTER_TYPE_ALL_ACCOUNTS = -1;
-    public static final int FILTER_TYPE_CUSTOM = -2;
-    public static final int FILTER_TYPE_STARRED = -3;
-    public static final int FILTER_TYPE_DEFAULT = -4;
+    public static final int FILTER_TYPE_DEFAULT = -1;
+    public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
+    public static final int FILTER_TYPE_CUSTOM = -3;
+    public static final int FILTER_TYPE_STARRED = -4;
+    public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
+
     public static final int FILTER_TYPE_ACCOUNT = 0;
-    public static final int FILTER_TYPE_ = 0;
     public static final int FILTER_TYPE_GROUP = 1;
 
     private static final String KEY_FILTER_TYPE = "filter.type";
@@ -67,6 +68,13 @@
         this.title = title;
     }
 
+    /**
+     * Returns true if this filter is based on data and may become invalid over time.
+     */
+    public boolean isValidationRequired() {
+        return filterType == FILTER_TYPE_ACCOUNT || filterType == FILTER_TYPE_GROUP;
+    }
+
     @Override
     public String toString() {
         switch (filterType) {
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index 8bcd488..2b406a3 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -141,10 +141,7 @@
             mFilterList.clear();
         }
 
-        boolean filterValid = mFilter != null
-                && (mFilter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM
-                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_STARRED);
+        boolean filterValid = mFilter != null && !mFilter.isValidationRequired();
 
         int accountCount = 0;
         int count = filters.size();
@@ -176,7 +173,12 @@
 
             mFilters.append(mNextFilterId++, filter);
             mFilterList.add(filter);
-            filterValid |= filter.equals(mFilter);
+
+            if (filter.equals(mFilter)) {
+                // Refresh the filter in case the title got changed
+                mFilter = filter;
+                filterValid = true;
+            }
 
             if (firstAndOnly) {
                 mFilters.append(mNextFilterId++,
@@ -216,7 +218,7 @@
         }
     }
 
-    protected void setContactListFilter(int filterId) {
+    private void setContactListFilter(int filterId) {
         ContactListFilter filter;
         if (filterId == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
             filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
@@ -231,11 +233,17 @@
             }
         }
 
+        setContactListFilter(filter, true);
+    }
+
+    public void setContactListFilter(ContactListFilter filter, boolean persistent) {
         if (!filter.equals(mFilter)) {
             mFilter = filter;
             ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
             updateFilterView();
-            mListener.onContactListFilterChanged();
+            if (mListener != null) {
+                mListener.onContactListFilterChanged();
+            }
         }
     }
 
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
index c9a0472..dc88207 100644
--- a/src/com/android/contacts/list/ContactListFilterView.java
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -66,41 +66,22 @@
 
         switch (mFilter.filterType) {
             case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
-                if (mIcon != null) {
-                    mIcon.setVisibility(View.VISIBLE);
-                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_all);
-                }
-                mLabel.setText(R.string.list_filter_all_accounts);
-                mLabel.setVisibility(View.VISIBLE);
-                if (dropdown) {
-                    mIndentedLabel.setVisibility(View.GONE);
-                }
+                bindView(R.drawable.ic_contact_list_filter_all,
+                        R.string.list_filter_all_accounts);
                 break;
             }
             case ContactListFilter.FILTER_TYPE_STARRED: {
-                if (mIcon != null) {
-                    mIcon.setVisibility(View.VISIBLE);
-                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_starred);
-                }
-                mLabel.setText(R.string.list_filter_all_starred);
-                mLabel.setVisibility(View.VISIBLE);
-                if (dropdown) {
-                    mIndentedLabel.setVisibility(View.GONE);
-                }
+                bindView(R.drawable.ic_contact_list_filter_starred,
+                        R.string.list_filter_all_starred);
                 break;
             }
             case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                if (mIcon != null) {
-                    mIcon.setVisibility(View.VISIBLE);
-                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_custom);
-                }
-                mLabel.setText(dropdown
-                        ? R.string.list_filter_customize
-                        : R.string.list_filter_custom);
-                mLabel.setVisibility(View.VISIBLE);
-                if (dropdown) {
-                    mIndentedLabel.setVisibility(View.GONE);
-                }
+                bindView(R.drawable.ic_contact_list_filter_custom,
+                        dropdown ? R.string.list_filter_customize : R.string.list_filter_custom);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                bindView(0, R.string.list_filter_phones);
                 break;
             }
             case ContactListFilter.FILTER_TYPE_ACCOUNT: {
@@ -135,4 +116,22 @@
             }
         }
     }
+
+    private void bindView(int iconResource, int textResource) {
+        if (mIcon != null) {
+            if (iconResource != 0) {
+                mIcon.setVisibility(View.VISIBLE);
+                mIcon.setImageResource(iconResource);
+            } else {
+                mIcon.setVisibility(View.GONE);
+            }
+        }
+
+        mLabel.setText(textResource);
+        mLabel.setVisibility(View.VISIBLE);
+
+        if (mIndentedLabel != null) {
+            mIndentedLabel.setVisibility(View.GONE);
+        }
+    }
 }
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 166294b..9bc4d8d 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -117,9 +117,6 @@
         super.configureAdapter();
 
         ContactEntryListAdapter adapter = getAdapter();
-        if (adapter instanceof DefaultContactListAdapter) {
-            ((DefaultContactListAdapter)adapter).setVisibleContactsOnly(true);
-        }
 
         // If "Create new contact" is shown, don't display the empty list UI
         adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 79dc1b0..d1525fb 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -61,17 +61,12 @@
 
         if (UI.LIST_DEFAULT.equals(action) ) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_PREFERENCE);
         } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
             request.setDisplayOnlyVisible(false);
         } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_ENABLED);
+            request.setDisplayWithPhoneNumbersOnly(true);
         } else if (UI.LIST_STARRED_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_STARRED);
         } else if (UI.LIST_FREQUENT_ACTION.equals(action)) {
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index e8ccb43..331dc93 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -74,12 +74,7 @@
     private CharSequence mTitle;
     private boolean mSearchMode;
     private String mQueryString;
-
-    public static final int DISPLAY_ONLY_WITH_PHONES_PREFERENCE = 0;
-    public static final int DISPLAY_ONLY_WITH_PHONES_ENABLED = 1;
-    public static final int DISPLAY_ONLY_WITH_PHONES_DISABLED = 2;
-
-    private int mDisplayOnlyWithPhones;
+    private boolean mDisplayOnlyWithPhones;
     private boolean mDisplayOnlyVisible;
     private String mGroupName;
     private boolean mLegacyCompatibilityMode;
@@ -119,7 +114,7 @@
             request.mTitle = source.readCharSequence();
             request.mSearchMode = source.readInt() != 0;
             request.mQueryString = source.readString();
-            request.mDisplayOnlyWithPhones = source.readInt();
+            request.mDisplayOnlyWithPhones = source.readInt() != 0;
             request.mDisplayOnlyVisible = source.readInt() != 0;
             request.mGroupName = source.readString();
             request.mLegacyCompatibilityMode  = source.readInt() != 0;
@@ -136,7 +131,7 @@
         dest.writeCharSequence(mTitle);
         dest.writeInt(mSearchMode ? 1 : 0);
         dest.writeString(mQueryString);
-        dest.writeInt(mDisplayOnlyWithPhones);
+        dest.writeInt(mDisplayOnlyWithPhones ? 1 : 0);
         dest.writeInt(mDisplayOnlyVisible ? 1 : 0);
         dest.writeString(mGroupName);
         dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
@@ -188,11 +183,11 @@
         mDisplayOnlyVisible = flag;
     }
 
-    public int getDisplayWithPhonesOnlyOption() {
+    public boolean getDisplayWithPhoneNumbersOnly() {
         return mDisplayOnlyWithPhones;
     }
 
-    public void setDisplayWithPhonesOnlyOption(int option) {
+    public void setDisplayWithPhoneNumbersOnly(boolean option) {
         mDisplayOnlyWithPhones = option;
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index ca93e0c..10f2290 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -16,14 +16,11 @@
 package com.android.contacts.list;
 
 import com.android.contacts.R;
-import com.android.contacts.preference.ContactsPreferences;
 
 import android.app.Activity;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,16 +37,12 @@
 
     private static final String KEY_EDIT_MODE = "editMode";
     private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
-    private static final String KEY_DISPLAY_WITH_PHONES_ONLY = "displayWithPhonesOnly";
-    private static final String KEY_VISIBLE_CONTACTS_RESTRICTION = "visibleContactsRestriction";
     private static final String KEY_FILTER_ENABLED = "filterEnabled";
 
     private static final int REQUEST_CODE_CUSTOMIZE_FILTER = 3;
 
     private boolean mEditMode;
     private boolean mCreateContactEnabled;
-    private int mDisplayWithPhonesOnlyOption = ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED;
-    private boolean mVisibleContactsRestrictionEnabled = true;
     private View mCounterHeaderView;
     private View mSearchHeaderView;
 
@@ -72,8 +65,6 @@
         super.onSaveInstanceState(outState);
         outState.putBoolean(KEY_EDIT_MODE, mEditMode);
         outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
-        outState.putInt(KEY_DISPLAY_WITH_PHONES_ONLY, mDisplayWithPhonesOnlyOption);
-        outState.putBoolean(KEY_VISIBLE_CONTACTS_RESTRICTION, mVisibleContactsRestrictionEnabled);
         outState.putBoolean(KEY_FILTER_ENABLED, mFilterEnabled);
     }
 
@@ -87,47 +78,10 @@
 
         mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
         mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
-        mDisplayWithPhonesOnlyOption = savedState.getInt(KEY_DISPLAY_WITH_PHONES_ONLY);
-        mVisibleContactsRestrictionEnabled =
-                savedState.getBoolean(KEY_VISIBLE_CONTACTS_RESTRICTION);
         setFilterEnabled(savedState.getBoolean(KEY_FILTER_ENABLED));
     }
 
     @Override
-    protected void prepareEmptyView() {
-        if (isShowingContactsWithPhonesOnly()) {
-            setEmptyText(R.string.noContactsWithPhoneNumbers);
-        } else {
-            super.prepareEmptyView();
-        }
-    }
-
-    private boolean isShowingContactsWithPhonesOnly() {
-        switch (mDisplayWithPhonesOnlyOption) {
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED:
-                return false;
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_ENABLED:
-                return true;
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_PREFERENCE:
-                SharedPreferences prefs = PreferenceManager
-                        .getDefaultSharedPreferences(getContext());
-                return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
-                        ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
-        }
-        return false;
-    }
-
-    public void setDisplayWithPhonesOnlyOption(int displayWithPhonesOnly) {
-        mDisplayWithPhonesOnlyOption = displayWithPhonesOnly;
-        configureAdapter();
-    }
-
-    public void setVisibleContactsRestrictionEnabled(boolean flag) {
-        mVisibleContactsRestrictionEnabled = flag;
-        configureAdapter();
-    }
-
-    @Override
     protected void onItemClick(int position, long id) {
         ContactListAdapter adapter = getAdapter();
         if (isEditMode()) {
@@ -154,12 +108,8 @@
         super.configureAdapter();
 
         DefaultContactListAdapter adapter = (DefaultContactListAdapter)getAdapter();
-        if (adapter != null) {
-            adapter.setContactsWithPhoneNumbersOnly(isShowingContactsWithPhonesOnly());
-            adapter.setVisibleContactsOnly(mVisibleContactsRestrictionEnabled);
-            if (mFilterEnabled && mFilterController != null) {
-                adapter.setFilter(mFilterController.getFilter(), mFilterController.getFilterList());
-            }
+        if (adapter != null && mFilterEnabled && mFilterController != null) {
+            adapter.setFilter(mFilterController.getFilter(), mFilterController.getFilterList());
         }
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 4160931..ede3597 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -15,11 +15,15 @@
  */
 package com.android.contacts.list;
 
+import com.android.contacts.preference.ContactsPreferences;
+
 import android.content.Context;
 import android.content.CursorLoader;
+import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.net.Uri;
 import android.net.Uri.Builder;
+import android.preference.PreferenceManager;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.Contacts;
@@ -37,21 +41,10 @@
  */
 public class DefaultContactListAdapter extends ContactListAdapter {
 
-    private boolean mContactsWithPhoneNumbersOnly;
-    private boolean mVisibleContactsOnly;
-
     public DefaultContactListAdapter(Context context) {
         super(context);
     }
 
-    public void setContactsWithPhoneNumbersOnly(boolean flag) {
-        mContactsWithPhoneNumbersOnly = flag;
-    }
-
-    public void setVisibleContactsOnly(boolean flag) {
-        mVisibleContactsOnly = flag;
-    }
-
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
 
@@ -141,14 +134,14 @@
                 selection.append(Contacts.STARRED + "!=0");
                 break;
             }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+                break;
+            }
             case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                if (mVisibleContactsOnly && mContactsWithPhoneNumbersOnly) {
-                    selection.append(Contacts.IN_VISIBLE_GROUP + "=1"
-                            + " AND " + Contacts.HAS_PHONE_NUMBER + "=1");
-                } else if (mVisibleContactsOnly) {
-                    selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
-                } else if (mContactsWithPhoneNumbersOnly) {
-                    selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+                if (isCustomFilterForPhoneNumbersOnly()) {
+                    selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
                 }
                 break;
             }
@@ -202,4 +195,11 @@
             bindSearchSnippet(view, cursor);
         }
     }
+
+    private boolean isCustomFilterForPhoneNumbersOnly() {
+        // TODO: this flag should not be stored in shared prefs.  It needs to be in the db.
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+        return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
+                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
+    }
 }
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 94f2aad..4fcd76d 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -53,7 +53,7 @@
     private static final String ANDROID_CONTACTS_PACKAGE = "com.android.contacts";
 
     private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
-            "com.android.contacts.activities.ContactListActivity";
+            "com.android.contacts.activities.ContactBrowserActivity";
     private static final String SEARCH_RESULTS_ACTIVITY_CLASS_NAME =
             "com.android.contacts.SearchResultsActivity";
     private static final String MULTIPLE_PHONE_PICKER_ACTIVITY_CLASS_NAME =