More clean-up work on the contact browser state machine
Change-Id: I77ff2dbc2a4fb19a8f61d26a91322fe297bf611c
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index af8528c..937ebee 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -166,7 +166,7 @@
if (fragment instanceof ContactBrowseListFragment) {
mListFragment = (ContactBrowseListFragment)fragment;
mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
- configureListSelection(false);
+ configureListSelection();
} else if (fragment instanceof ContactDetailFragment) {
mDetailFragment = (ContactDetailFragment)fragment;
mDetailFragment.setListener(mDetailFragmentListener);
@@ -374,7 +374,7 @@
@Override
public void onContactListFiltersLoaded() {
- configureListSelection(mRequest.getContactUri() == null);
+ configureListSelection();
// Filters have been loaded - now we can start loading the list itself
mListFragment.startLoading();
@@ -383,14 +383,24 @@
@Override
public void onContactListFilterChanged() {
resetContactSelectionInIntent();
- configureListSelection(true);
- mListFragment.reloadData();
+
+ DefaultContactBrowseListFragment fragment =
+ (DefaultContactBrowseListFragment) mListFragment;
+ ContactListFilter filter = mContactListFilterController.getFilter();
+ fragment.setFilter(filter);
+ fragment.reloadData();
+ fragment.restoreSelectedUri(mPrefs);
+ fragment.requestSelectionOnScreen(false);
+
+ if (mContactContentDisplayed) {
+ setupContactDetailFragment(mListFragment.getSelectedContactUri());
+ }
}
/**
* Configures filter-specific persistent selection.
*/
- private void configureListSelection(boolean restoreSelectedUri) {
+ private void configureListSelection() {
if (mListFragment == null) {
return;
}
@@ -400,8 +410,9 @@
&& mContactListFilterController.isLoaded()) {
DefaultContactBrowseListFragment fragment =
(DefaultContactBrowseListFragment) mListFragment;
- fragment.setFilter(mContactListFilterController.getFilter());
- if (restoreSelectedUri) {
+ ContactListFilter filter = mContactListFilterController.getFilter();
+ fragment.setFilter(filter);
+ if (mRequest.getContactUri() == null) {
fragment.restoreSelectedUri(mPrefs);
}
fragment.requestSelectionOnScreen(false);
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 8f1efc5..4914906 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -207,6 +207,7 @@
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
super.onLoadFinished(loader, data);
checkSelection();
+ requestSelectionOnScreenIfNeeded();
}
private void checkSelection() {
@@ -221,11 +222,9 @@
ContactListAdapter adapter = getAdapter();
if (adapter.hasValidSelection()) {
mSelectionVerified = true;
- requestSelectionOnScreenIfNeeded();
- return;
+ } else {
+ notifyInvalidSelection();
}
-
- notifyInvalidSelection();
}
@Override
@@ -317,7 +316,7 @@
}
ContactListAdapter adapter = getAdapter();
- if (adapter == null) {
+ if (adapter == null || adapter.isLoading()) {
return;
}