Continued clean-up work on the contact browser state machine
Change-Id: Ief3060e6f81db8f58e1a213b75eafa42205d39d3
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 937ebee..dbf9f6c 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -231,11 +231,7 @@
});
}
- configureListFragment(true /* from request */);
-
- if (mContactContentDisplayed) {
- setupContactDetailFragment(mListFragment.getSelectedContactUri());
- }
+ configureFragments(true /* from request */);
}
@Override
@@ -285,13 +281,11 @@
@Override
protected void onStart() {
- if (mContactListFilterController != null) {
- mContactListFilterController.startLoading();
- }
+ mContactListFilterController.startLoading();
super.onStart();
}
- private void configureListFragment(boolean fromRequest) {
+ private void configureFragments(boolean fromRequest) {
boolean searchMode = mSearchMode;
if (fromRequest) {
ContactListFilter filter = null;
@@ -321,36 +315,44 @@
mContactListFilterController.setContactListFilter(new ContactListFilter(
ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), false);
}
- } else {
- if (mHasActionBar) {
- searchMode = mActionBarAdapter.isSearchMode();
- }
+ } else if (mHasActionBar) {
+ searchMode = mActionBarAdapter.isSearchMode();
}
boolean replaceList = mListFragment == null || (mSearchMode != searchMode);
if (replaceList) {
- closeListFragment();
+ if (mListFragment != null) {
+ mListFragment.setOnContactListActionListener(null);
+ }
+
mSearchMode = searchMode;
+
if (mSearchMode) {
mListFragment = createContactSearchFragment();
// When switching to the search mode, erase previous state of the search UI
mListFragment.eraseSelectedUri(mPrefs);
} else {
mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT);
- mListFragment.requestSelectionOnScreen(false);
}
}
- if (mHasActionBar && mSearchMode) {
- mListFragment.setQueryString(mActionBarAdapter.getQueryString());
- }
-
- if (fromRequest && !mSearchMode) {
- Uri selectUri = mRequest.getContactUri();
- if (selectUri != null) {
- mListFragment.setSelectedContactUri(selectUri);
- mListFragment.saveSelectedUri(mPrefs);
- mListFragment.requestSelectionOnScreen(false);
+ if (mSearchMode) {
+ if (mHasActionBar) {
+ mListFragment.setQueryString(mActionBarAdapter.getQueryString());
+ }
+ } else {
+ DefaultContactBrowseListFragment fragment =
+ (DefaultContactBrowseListFragment) mListFragment;
+ fragment.setFilter(mContactListFilterController.getFilter());
+ if (fromRequest && mRequest.getContactUri() != null) {
+ fragment.setSelectedContactUri(mRequest.getContactUri());
+ fragment.saveSelectedUri(mPrefs);
+ } else {
+ fragment.restoreSelectedUri(mPrefs);
+ }
+ fragment.requestSelectionOnScreen(false);
+ if (mContactContentDisplayed) {
+ setupContactDetailFragment(fragment.getSelectedContactUri());
}
}
@@ -358,17 +360,6 @@
getFragmentManager().openTransaction()
.replace(R.id.list_container, mListFragment)
.commit();
-
- if (mContactContentDisplayed) {
- setupContactDetailFragment(mListFragment.getSelectedContactUri());
- }
- }
- }
-
- private void closeListFragment() {
- if (mListFragment != null) {
- mListFragment.setOnContactListActionListener(null);
- mListFragment = null;
}
}
@@ -384,6 +375,10 @@
public void onContactListFilterChanged() {
resetContactSelectionInIntent();
+ if (mListFragment == null) {
+ return;
+ }
+
DefaultContactBrowseListFragment fragment =
(DefaultContactBrowseListFragment) mListFragment;
ContactListFilter filter = mContactListFilterController.getFilter();
@@ -529,7 +524,7 @@
*/
@Override
public void onAction() {
- configureListFragment(false /* from request */);
+ configureFragments(false /* from request */);
}
/**
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index 4b890cf..d5554ce 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -124,7 +124,9 @@
public void startLoading() {
// Set the "ready" flag right away - we only want to start the loader once
mFiltersLoaded = false;
- mFilter = ContactListFilter.restoreFromPreferences(getSharedPreferences());
+ if (mFilter == null) {
+ mFilter = ContactListFilter.restoreFromPreferences(getSharedPreferences());
+ }
loadFilters();
}