Restore the "Contacts to display" custom filter (1/3)
* Revert "Remove AccountFilterActivity and its usage (Contacts)"
This reverts commit 1fc8847aa6bef1b6ceb017870d3de90f5960757e.
* But we don't restore the changes to DefaultContactBrowseListFragment
since we won't be starting the "Contacts to display" filter
from an overflow menu option on PeopleActivity.
* In DrawerActivity and PeopleActivity, everywhere we check for
FITLER_TYPE_ALL_ACCOUNTS, we must also accept FILTER_TYPE_CUSTOM,
since either of those can be used for the default/main contacts
list again.
Bug 29185471
Change-Id: Ie77e8acb16980b9015bd1f1f4af9fb7a014f3c51
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d6954b3..4624b9b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -216,6 +216,18 @@
android:theme="@style/ContactsPreferencesTheme"
android:exported="false" />
+ <!-- Used to filter contacts list by account -->
+ <activity
+ android:name=".common.list.AccountFilterActivity"
+ android:label="@string/activity_title_contacts_filter"
+ android:theme="@style/ContactListFilterTheme" />
+
+ <!-- Used to select display and sync groups -->
+ <activity
+ android:name=".common.list.CustomContactListFilterActivity"
+ android:label="@string/custom_list_filter"
+ android:theme="@style/ContactListFilterTheme" />
+
<activity
android:name=".common.activity.RequestPermissionsActivity"
android:label="@string/launcherActivityLabel"
diff --git a/res/drawable-hdpi/unknown_source.png b/res/drawable-hdpi/unknown_source.png
deleted file mode 100644
index 0a8f37d..0000000
--- a/res/drawable-hdpi/unknown_source.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/unknown_source.png b/res/drawable-mdpi/unknown_source.png
deleted file mode 100644
index 356748f..0000000
--- a/res/drawable-mdpi/unknown_source.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/unknown_source.png b/res/drawable-xhdpi/unknown_source.png
deleted file mode 100644
index 35e8fb4..0000000
--- a/res/drawable-xhdpi/unknown_source.png
+++ /dev/null
Binary files differ
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 0af01f7..b408d00 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -281,6 +281,10 @@
<item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
+ <style name="ContactListFilterTheme" parent="@style/PeopleTheme">
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
+ </style>
+
<style name="NonPhoneActivityTheme" parent="@android:Theme.Translucent.NoTitleBar">
</style>
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index cf44fe3..3ae009e 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -49,6 +49,7 @@
import com.android.contacts.common.ContactsUtils;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.editor.SelectAccountDialogFragment;
+import com.android.contacts.common.list.AccountFilterActivity;
import com.android.contacts.common.list.ContactListFilter;
import com.android.contacts.common.list.ContactListFilterController;
import com.android.contacts.common.model.AccountTypeManager;
@@ -465,7 +466,7 @@
positionOfLastFilter, menuName);
mFilterMenuMap.put(filter, menuItem);
final Intent intent = new Intent();
- intent.putExtra(AccountFilterUtil.EXTRA_CONTACT_LIST_FILTER, filter);
+ intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
@@ -496,7 +497,7 @@
protected void updateFilterMenu(ContactListFilter filter) {
clearCheckedMenus();
- if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ if (ContactListFilter.isContactsFilterType(filter)) {
if (mIdMenuMap != null && mIdMenuMap.get(R.id.nav_all_contacts) != null) {
mIdMenuMap.get(R.id.nav_all_contacts).setCheckable(true);
mIdMenuMap.get(R.id.nav_all_contacts).setChecked(true);
@@ -512,7 +513,7 @@
}
/**
- * Returns the current filter if the child class is {@link PeopleActivity}, and null otherwise.
+ * Returns the current filter if the child class is PeopleActivity, and null otherwise.
*/
protected ContactListFilter getContactListFilter() {
return null;
@@ -526,7 +527,6 @@
@Override
public boolean onNavigationItemSelected(final MenuItem item) {
final int id = item.getItemId();
-
mToggle.runWhenIdle(new Runnable() {
@Override
public void run() {
@@ -564,8 +564,8 @@
protected void switchToAllContacts() {
final Intent intent = new Intent();
- final ContactListFilter filter = createAllAccountsFilter();
- intent.putExtra(AccountFilterUtil.EXTRA_CONTACT_LIST_FILTER, filter);
+ final ContactListFilter filter = createContactsFilter();
+ intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
AccountFilterUtil.handleAccountFilterResult(
mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
if (shouldFinish()) {
@@ -578,8 +578,17 @@
Assistants.getDuplicatesActivityIntent(this));
}
- protected ContactListFilter createAllAccountsFilter() {
- return ContactListFilter.createFilterWithType(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ /**
+ * Returns a {@link ContactListFilter} of type
+ * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
+ * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
+ */
+ protected ContactListFilter createContactsFilter() {
+ final int filterType =
+ ContactListFilterController.getInstance(this).isCustomFilterPersisted()
+ ? ContactListFilter.FILTER_TYPE_CUSTOM
+ : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+ return ContactListFilter.createFilterWithType(filterType);
}
private void clearCheckedMenus() {
@@ -587,7 +596,6 @@
clearCheckedMenu(mGroupMenuMap);
clearCheckedMenu(mIdMenuMap);
}
-
private void clearCheckedMenu(Map<?, MenuItem> map) {
final Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 2ab0fef..fadede6 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -225,7 +225,7 @@
// This is useful when user upgrades app while an account filter or a custom filter was
// stored in sharedPreference in a previous version of Contacts app.
final ContactListFilter filter = mIsRecreatedInstance
- ? mContactListFilterController.getFilter() : createAllAccountsFilter();
+ ? mContactListFilterController.getFilter() : createContactsFilter();
persistFilterIfNeeded(filter);
createViewsAndFragments(savedState);
@@ -434,7 +434,7 @@
final int tabToOpen;
switch (actionCode) {
case ContactsRequest.ACTION_ALL_CONTACTS:
- filter = createAllAccountsFilter();
+ filter = createContactsFilter();
tabToOpen = TabState.ALL;
break;
case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
@@ -460,7 +460,7 @@
}
if (filter != null) {
- mContactListFilterController.setContactListFilter(filter, false);
+ mContactListFilterController.setContactListFilter(filter, /* persistent */ false);
searchMode = false;
}
@@ -985,7 +985,7 @@
ContactListFilter currentFilter = mAllFragment.getFilter();
if (currentFilter != null
&& currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- filter = createAllAccountsFilter();
+ filter = createContactsFilter();
setFilterAndUpdateTitle(filter);
} else {
filter = ContactListFilter.createFilterWithType(
@@ -1307,8 +1307,7 @@
Logger.logScreenView(this, ScreenType.SEARCH_EXIT);
Logger.logSearchEvent(mAllFragment.createSearchState());
}
- } else if (mContactListFilterController.getFilter().filterType !=
- ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ } else if (!isAllContactsFilter(mContactListFilterController.getFilter())) {
switchToAllContacts();
} else {
super.onBackPressed();
@@ -1392,7 +1391,7 @@
private void setFilterAndUpdateTitle(ContactListFilter filter, boolean restoreSelectedUri) {
mAllFragment.setFilter(filter, restoreSelectedUri);
- final int listType = filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+ final int listType = isAllContactsFilter(filter)
? ListEvent.ListType.ALL_CONTACTS : ListEvent.ListType.ACCOUNT;
mAllFragment.setListType(listType);
@@ -1425,7 +1424,7 @@
}
private boolean isAllContactsFilter(ContactListFilter filter) {
- return filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+ return ContactListFilter.isContactsFilterType(filter);
}
private boolean isDeviceContactsFilter(ContactListFilter filter) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index fd6c0c0..8fdce75 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -73,8 +73,11 @@
final ContactListFilterController contactListFilterController =
ContactListFilterController.getInstance(getContext());
final ContactListFilter filter = contactListFilterController.getFilter();
- if (!isSearchMode()
- && filter.filterType != ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ if (isSearchMode()) {
+ hideHeaderAndAddPadding(getContext(), getListView(), accountFilterContainer);
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ bindListHeaderCustom(getListView(), accountFilterContainer);
+ } else if (filter.filterType != ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
filter.accountName, filter.accountType, filter.dataSet);
bindListHeader(getContext(), getListView(), accountFilterContainer,
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index af403ca..1e3c191 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -299,6 +299,19 @@
}
}
+ protected void bindListHeaderCustom(View listView, View accountFilterContainer) {
+ bindListHeaderCommon(listView, accountFilterContainer);
+
+ final TextView accountFilterHeader = (TextView) accountFilterContainer.findViewById(
+ R.id.account_filter_header);
+ accountFilterHeader.setText(R.string.listCustomView);
+ accountFilterHeader.setAllCaps(false);
+
+ final ImageView accountFilterHeaderIcon = (ImageView) accountFilterContainer
+ .findViewById(R.id.account_filter_icon);
+ accountFilterHeaderIcon.setVisibility(View.INVISIBLE);
+ }
+
/**
* Show account icon, count of contacts and account name in the header of the list.
*/
@@ -309,9 +322,7 @@
return;
}
- // Show header and remove top padding of the list
- accountFilterContainer.setVisibility(View.VISIBLE);
- listView.setPadding(0, 0, 0, 0);
+ bindListHeaderCommon(listView, accountFilterContainer);
// Set text of count of contacts and account name (if it's a Google account)
final TextView accountFilterHeader = (TextView) accountFilterContainer.findViewById(
@@ -333,9 +344,16 @@
final Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null;
final ImageView accountFilterHeaderIcon = (ImageView) accountFilterContainer
.findViewById(R.id.account_filter_icon);
+ accountFilterHeaderIcon.setVisibility(View.VISIBLE);
accountFilterHeaderIcon.setImageDrawable(icon);
}
+ private void bindListHeaderCommon(View listView, View accountFilterContainer) {
+ // Show header and remove top padding of the list
+ accountFilterContainer.setVisibility(View.VISIBLE);
+ listView.setPadding(0, 0, 0, 0);
+ }
+
/**
* Hide header of list view and add padding to the top of list view.
*/