Inflating contact browser fragments from XML

Change-Id: I3395e70bed9aee8f5c70b92952644f58f425dfab
diff --git a/res/layout-xlarge/contact_browser.xml b/res/layout-xlarge/contact_browser.xml
index cc5e0eb..d7ab617 100644
--- a/res/layout-xlarge/contact_browser.xml
+++ b/res/layout-xlarge/contact_browser.xml
@@ -45,11 +45,13 @@
                 android:layout_marginTop="40dip"
                 android:background="#7e7e87" />
 
-            <FrameLayout
-                android:id="@+id/list_container"
+            <fragment
+                android:id="@+id/list_fragment"
+                class="com.android.contacts.list.DefaultContactBrowseListFragment"
                 android:layout_height="0dip"
                 android:layout_width="match_parent"
-                android:layout_weight="1" />
+                android:layout_weight="1" 
+            />
         </LinearLayout>
 
         <view
@@ -67,10 +69,12 @@
             ex:enterAnimation="@android:animator/fade_in"
             ex:exitAnimation="@android:animator/fade_out"
             ex:animationDuration="200">
-            <FrameLayout
-                android:id="@+id/detail_container"
+            <fragment
+                android:id="@+id/detail_fragment"
+                class="com.android.contacts.detail.ContactDetailFragment"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent" />
+                android:layout_height="match_parent" 
+            />
         </view>
 
     </com.android.contacts.widget.InterpolatingLayout>
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4ff9e63..4fb835a 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -34,7 +34,6 @@
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.ContactsUnavailableFragment;
 import com.android.contacts.list.CustomContactListFilterActivity;
-import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.list.DirectoryListLoader;
 import com.android.contacts.list.OnContactBrowserActionListener;
 import com.android.contacts.list.OnContactsUnavailableActionListener;
@@ -79,7 +78,7 @@
 
 /**
  * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on
- * the right
+ * the right.
  */
 public class ContactBrowserActivity extends ContactsActivity
         implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener,
@@ -144,13 +143,14 @@
         if (fragment instanceof ContactBrowseListFragment) {
             mListFragment = (ContactBrowseListFragment)fragment;
             mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
-            if (!mHasActionBar) {
+            if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) {
                 mListFragment.setContextMenuAdapter(
                         new ContactBrowseListContextMenuAdapter(mListFragment));
             }
         } else if (fragment instanceof ContactDetailFragment) {
             mDetailFragment = (ContactDetailFragment)fragment;
             mDetailFragment.setListener(mDetailFragmentListener);
+            mContactContentDisplayed = true;
         } else if (fragment instanceof ContactsUnavailableFragment) {
             mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
             mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
@@ -201,7 +201,6 @@
 
         if (createContentView) {
             setContentView(R.layout.contact_browser);
-            mContactContentDisplayed = findViewById(R.id.detail_container) != null;
         }
 
         if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
@@ -299,32 +298,15 @@
                 mSearchMode = false;
             }
 
+            mListFragment.setContactsRequest(mRequest);
+            configureListFragmentForRequest();
+
         } else if (mHasActionBar) {
             mSearchMode = mActionBarAdapter.isSearchMode();
         }
 
-        if (mListFragment == null) {
-            mListFragment = new DefaultContactBrowseListFragment();
-            mListFragment.setContactsRequest(mRequest);
-
-            getFragmentManager().openTransaction()
-                    .replace(R.id.list_container, mListFragment)
-                    .commit();
-        }
-
-        if (fromRequest) {
-            configureListFragmentForRequest();
-        }
-
         configureListFragment();
 
-        if (mContactContentDisplayed && mDetailFragment == null) {
-            mDetailFragment = new ContactDetailFragment();
-            getFragmentManager().openTransaction()
-                    .replace(R.id.detail_container, mDetailFragment)
-                    .commit();
-        }
-
         invalidateOptionsMenu();
     }
 
@@ -732,7 +714,7 @@
     }
 
     public boolean isCustomFilterChangeable() {
-        return mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT;
+        return mRequest != null && mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT;
     }
 
     @Override
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index d76ad38..903127b 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -498,11 +498,13 @@
     }
 
     public void setSectionHeaderDisplayEnabled(boolean flag) {
-        mSectionHeaderDisplayEnabled = flag;
-        if (mAdapter != null) {
-            mAdapter.setSectionHeaderDisplayEnabled(flag);
+        if (mSectionHeaderDisplayEnabled != flag) {
+            mSectionHeaderDisplayEnabled = flag;
+            if (mAdapter != null) {
+                mAdapter.setSectionHeaderDisplayEnabled(flag);
+            }
+            configureVerticalScrollbar();
         }
-        configureVerticalScrollbar();
     }
 
     public boolean isSectionHeaderDisplayEnabled() {
@@ -510,8 +512,10 @@
     }
 
     public void setVisibleScrollbarEnabled(boolean flag) {
-        mVisibleScrollbarEnabled = flag;
-        configureVerticalScrollbar();
+        if (mVisibleScrollbarEnabled != flag) {
+            mVisibleScrollbarEnabled = flag;
+            configureVerticalScrollbar();
+        }
     }
 
     public boolean isVisibleScrollbarEnabled() {
@@ -519,7 +523,10 @@
     }
 
     public void setVerticalScrollbarPosition(int position) {
-        this.mVerticalScrollbarPosition = position;
+        if (mVerticalScrollbarPosition != position) {
+            mVerticalScrollbarPosition = position;
+            configureVerticalScrollbar();
+        }
     }
 
     private void configureVerticalScrollbar() {