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;
         }