Making list switch to All Contacts when contact not found
Bug: 3349063
Change-Id: Iaf85a98293f7bf947fe8d7a71e2538fa80a27a9d
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4fb835a..ea7fffe 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -506,9 +506,16 @@
@Override
public void onInvalidSelection() {
- ContactListFilter filter =
- new ContactListFilter(ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
- mListFragment.setFilter(filter, false);
+ ContactListFilter filter;
+ ContactListFilter currentFilter = mListFragment.getFilter();
+ if (currentFilter != null
+ && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ mListFragment.setFilter(filter);
+ } else {
+ filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
+ mListFragment.setFilter(filter, false);
+ }
mContactListFilterController.setContactListFilter(filter, true);
}
}
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index b47c7db..03684f2 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -435,12 +435,6 @@
if (selectedPosition != -1) {
mLastSelectedPosition = selectedPosition;
} else {
- if (mSelectionRequired) {
- mSelectionRequired = false;
- notifyInvalidSelection();
- return;
- }
-
if (isSearchMode()) {
selectFirstFoundContactAfterDelay();
if (mListener != null) {
@@ -449,6 +443,33 @@
return;
}
+ if (mSelectionRequired) {
+ // A specific contact was requested, but it's not in the loaded list.
+
+ // Try reconfiguring and reloading the list that will hopefully contain
+ // the requested contact. Only take one attempt to avoid an infinite loop
+ // in case the contact cannot be found at all.
+ mSelectionRequired = false;
+
+ // If we were looking at a different specific contact, just reload
+ if (mFilter != null
+ && mFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ reloadData();
+ } else {
+ // Otherwise, call the listener, which will adjust the filter.
+ notifyInvalidSelection();
+ }
+ return;
+ }
+
+ // If we were trying to load a specific contact, but that contact no longer
+ // exists, call the listener, which will adjust the filter.
+ if (mFilter != null
+ && mFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ notifyInvalidSelection();
+ return;
+ }
+
saveSelectedUri(null);
selectDefaultContact();
}