Making UI.LIST_ALL_CONTACTS_ACTION work with loaders/fragments.
Change-Id: If529dc8294439b6b2d2ef91cbea95dc7b45859fc
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 2eb54ca..9e3f067 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -464,6 +464,7 @@
switch (mMode) {
case MODE_DEFAULT:
+ case MODE_CUSTOM:
case MODE_INSERT_OR_EDIT_CONTACT:
case MODE_QUERY_PICK_TO_EDIT:
case MODE_FREQUENT:
@@ -486,6 +487,11 @@
fragment.setSearchResultsMode(true);
}
+ fragment.setContactsWithPhonesOnlyRestrictionEnabled(
+ mIntentResolver.isContactsWithPhonesOnlyRestrictionEnabled());
+ fragment.setVisibleContactsRestrictionEnabled(
+ mIntentResolver.isVisibleContactsRestrictionEnabled());
+
fragment.setOnContactListActionListener(new OnContactBrowserActionListener() {
public void onSearchAllContactsAction(String string) {
doSearch();
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index c1b90a5..3ded6de 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -405,10 +405,12 @@
}
protected void configureAdapter() {
- mAdapter.setQueryString(mQueryString);
- mAdapter.setContactNameDisplayOrder(mDisplayOrder);
- mAdapter.setSortOrder(mSortOrder);
- mAdapter.setNameHighlightingEnabled(isNameHighlighingEnabled());
+ if (mAdapter != null) {
+ mAdapter.setQueryString(mQueryString);
+ mAdapter.setContactNameDisplayOrder(mDisplayOrder);
+ mAdapter.setSortOrder(mSortOrder);
+ mAdapter.setNameHighlightingEnabled(isNameHighlighingEnabled());
+ }
}
@Override
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 888994b..3f8b524 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -470,4 +470,12 @@
}
return null;
}
+
+ public boolean isVisibleContactsRestrictionEnabled() {
+ return mMode != MODE_CUSTOM && !mSearchResultsMode;
+ }
+
+ public boolean isContactsWithPhonesOnlyRestrictionEnabled() {
+ return mMode != MODE_CUSTOM;
+ }
}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 8ea4901..12de913 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -35,10 +35,13 @@
private boolean mEditMode;
private boolean mCreateContactEnabled;
private boolean mContactsWithPhoneNumbersOnly;
+ private boolean mContactsWithPhonesOnlyRestrictionEnabled = true;
+ private boolean mVisibleContactsRestrictionEnabled = true;
// TODO: Remove this horrible hack once the framework can lookup fragments via findFragmentById
public static DefaultContactBrowseListFragment sLastFragment = null;
+
public DefaultContactBrowseListFragment() {
setPhotoLoaderEnabled(true);
@@ -64,10 +67,17 @@
public void setContactsWithPhoneNumbersOnly(boolean flag) {
mContactsWithPhoneNumbersOnly = flag;
- ContactListAdapter adapter = getAdapter();
- if (adapter != null) {
- ((DefaultContactListAdapter)adapter).setContactsWithPhoneNumbersOnly(flag);
- }
+ configureAdapter();
+ }
+
+ public void setContactsWithPhonesOnlyRestrictionEnabled(boolean flag) {
+ this.mContactsWithPhonesOnlyRestrictionEnabled = flag;
+ configureAdapter();
+ }
+
+ public void setVisibleContactsRestrictionEnabled(boolean flag) {
+ this.mVisibleContactsRestrictionEnabled = flag;
+ configureAdapter();
}
@Override
@@ -96,7 +106,6 @@
adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
adapter.setDisplayPhotos(true);
adapter.setQuickContactEnabled(true);
-
return adapter;
}
@@ -105,7 +114,12 @@
super.configureAdapter();
DefaultContactListAdapter adapter = (DefaultContactListAdapter)getAdapter();
- adapter.setContactsWithPhoneNumbersOnly(mContactsWithPhoneNumbersOnly);
+ if (adapter != null) {
+ adapter.setContactsWithPhoneNumbersOnly(mContactsWithPhoneNumbersOnly
+ && mContactsWithPhonesOnlyRestrictionEnabled);
+ adapter.setVisibleContactsOnly(!isSearchResultsMode()
+ && mVisibleContactsRestrictionEnabled);
+ }
}
@Override
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 984e808..4c4323f 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -23,7 +23,6 @@
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
import android.view.View;
-import android.view.ViewGroup;
/**
* A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
@@ -31,6 +30,7 @@
public class DefaultContactListAdapter extends ContactListAdapter {
private boolean mContactsWithPhoneNumbersOnly;
+ private boolean mVisibleContactsOnly;
public DefaultContactListAdapter(Context context) {
super(context);
@@ -40,31 +40,31 @@
mContactsWithPhoneNumbersOnly = flag;
}
+ public void setVisibleContactsOnly(boolean flag) {
+ mVisibleContactsOnly = flag;
+ }
+
@Override
public void configureLoader(CursorLoader loader) {
Uri uri;
+
if (isSearchMode() || isSearchResultsMode()) {
String query = getQueryString();
uri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
TextUtils.isEmpty(query) ? "" : Uri.encode(query));
loader.setProjection(FILTER_PROJECTION);
- if (!isSearchResultsMode()) {
- if (mContactsWithPhoneNumbersOnly) {
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
- + Contacts.HAS_PHONE_NUMBER + "=1");
- } else {
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
- }
- }
} else {
uri = Contacts.CONTENT_URI;
loader.setProjection(PROJECTION);
- if (mContactsWithPhoneNumbersOnly) {
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
- + Contacts.HAS_PHONE_NUMBER + "=1");
- } else {
- loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
- }
+ }
+
+ if (mVisibleContactsOnly && mContactsWithPhoneNumbersOnly) {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1"
+ + " AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+ } else if (mVisibleContactsOnly) {
+ loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+ } else if (mContactsWithPhoneNumbersOnly) {
+ loader.setSelection(Contacts.HAS_PHONE_NUMBER + "=1");
}
if (isSectionHeaderDisplayEnabled()) {