Removing ContactNoneFragment

Change-Id: Ie70cc8548828241d55553d6f0e0243b46996aa90
diff --git a/res/layout-xlarge/contact_detail_header_view.xml b/res/layout-xlarge/contact_detail_header_view.xml
index f2ddd52..a8cfcaa 100644
--- a/res/layout-xlarge/contact_detail_header_view.xml
+++ b/res/layout-xlarge/contact_detail_header_view.xml
@@ -27,7 +27,6 @@
         android:layout_marginLeft="-1dip"
         android:layout_width="96dip"
         android:layout_height="96dip"
-        android:src="@*android:drawable/ic_contact_picture"
     />
 
     <LinearLayout
@@ -141,7 +140,9 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_vertical"
                 android:contentDescription="@string/description_star"
-                style="?android:attr/starStyle" />
+                android:visibility="invisible"
+                style="?android:attr/starStyle"
+            />
         </LinearLayout>
     </LinearLayout>
 </LinearLayout>
diff --git a/res/layout/contact_detail_header_view.xml b/res/layout/contact_detail_header_view.xml
index cc0372c..870f5d0 100644
--- a/res/layout/contact_detail_header_view.xml
+++ b/res/layout/contact_detail_header_view.xml
@@ -30,7 +30,6 @@
         android:layout_marginRight="8dip"
         android:layout_width="64dip"
         android:layout_height="64dip"
-        android:src="@*android:drawable/ic_contact_picture"
     />
 
     <LinearLayout
@@ -119,5 +118,7 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
         android:contentDescription="@string/description_star"
-        style="?android:attr/starStyle" />
+        android:visibility="invisible"
+        style="?android:attr/starStyle"
+    />
 </LinearLayout>
diff --git a/res/layout/contact_none_fragment.xml b/res/layout/contact_none_fragment.xml
deleted file mode 100644
index 6617427..0000000
--- a/res/layout/contact_none_fragment.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
->
-
-<!-- TODO: need an image -->
-<!--  <ImageView-->
-<!--    android:layout_width="wrap_content"-->
-<!--    android:layout_height="wrap_content"-->
-<!--    android:src="@drawable/contact_none"-->
-<!--    android:layout_centerInParent="true"/>-->
-    
-</RelativeLayout>
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 1c1f9b2..b04d640 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -38,7 +38,6 @@
 import com.android.contacts.util.DialogManager;
 import com.android.contacts.views.ContactSaveService;
 import com.android.contacts.views.detail.ContactDetailFragment;
-import com.android.contacts.views.detail.ContactNoneFragment;
 import com.android.contacts.widget.ContextMenuAdapter;
 
 import android.accounts.Account;
@@ -106,8 +105,6 @@
     private boolean mSearchMode;
 
     private ContactBrowseListFragment mListFragment;
-    private ContactNoneFragment mEmptyFragment;
-
     private boolean mContactContentDisplayed;
     private ContactDetailFragment mDetailFragment;
     private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener();
@@ -142,8 +139,6 @@
                 ((DefaultContactBrowseListFragment) mListFragment).setFilter(
                         mContactListFilterController.getFilter());
             }
-        } else if (fragment instanceof ContactNoneFragment) {
-            mEmptyFragment = (ContactNoneFragment)fragment;
         } else if (fragment instanceof ContactDetailFragment) {
             mDetailFragment = (ContactDetailFragment)fragment;
             mDetailFragment.setListener(mDetailFragmentListener);
@@ -382,6 +377,36 @@
         }
     }
 
+    private void showDefaultSelection() {
+        Uri requestedContactUri = mRequest.getContactUri();
+        if (requestedContactUri != null
+                && mListFragment instanceof DefaultContactBrowseListFragment) {
+            // If a specific selection was requested, adjust the filter so
+            // that the requested selection is unconditionally visible.
+            DefaultContactBrowseListFragment fragment =
+                    (DefaultContactBrowseListFragment) mListFragment;
+            ContactListFilter filter = new ContactListFilter(
+                    ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
+            fragment.setFilter(filter);
+            fragment.setSelectedContactUri(requestedContactUri);
+            fragment.saveSelectedUri(mPrefs);
+            fragment.reloadData();
+            if (mContactListFilterController != null) {
+                mContactListFilterController.setContactListFilter(filter, true);
+            }
+        } else {
+            // Otherwise, choose the first contact on the list and select it
+            requestedContactUri = mListFragment.getFirstContactUri();
+            if (requestedContactUri != null) {
+                mListFragment.setSelectedContactUri(requestedContactUri);
+                mListFragment.requestSelectionOnScreen(false);
+            }
+        }
+        if (mContactContentDisplayed) {
+            setupContactDetailFragment(requestedContactUri);
+        }
+    }
+
     @Override
     public void onContactListFilterCustomizationRequest() {
         startActivityForResult(new Intent(this, CustomContactListFilterActivity.class),
@@ -394,55 +419,18 @@
             return;
         }
 
-        if (mHandler == null) {
-            mHandler = new Handler();
-        }
-
-        mHandler.post(new Runnable() {
-
-            @Override
-            public void run() {
-                replaceContactDetailFragment(contactLookupUri);
-            }
-        });
-    }
-
-    public void replaceContactDetailFragment(Uri contactLookupUri) {
-        if (contactLookupUri != null) {
-            // Already showing? Nothing to do
-            if (mDetailFragment != null) {
-                mDetailFragment.loadUri(contactLookupUri);
-                return;
-            }
-
-            closeEmptyFragment();
-
-            mDetailFragment = new ContactDetailFragment();
-            mDetailFragment.loadUri(contactLookupUri);
-
-            // Nothing showing yet? Create (this happens during Activity-Startup)
-            getFragmentManager().openTransaction()
-                    .replace(R.id.detail_container, mDetailFragment)
-                    .commit();
-        } else {
-            closeDetailFragment();
-
-            mEmptyFragment = new ContactNoneFragment();
-            getFragmentManager().openTransaction()
-                    .replace(R.id.detail_container, mEmptyFragment)
-                    .commit();
-        }
-    }
-
-    private void closeDetailFragment() {
+        // Already showing? Nothing to do
         if (mDetailFragment != null) {
-            mDetailFragment.setListener(null);
-            mDetailFragment = null;
+            mDetailFragment.loadUri(contactLookupUri);
+            return;
         }
-    }
 
-    private void closeEmptyFragment() {
-        mEmptyFragment = null;
+        mDetailFragment = new ContactDetailFragment();
+        mDetailFragment.loadUri(contactLookupUri);
+
+        getFragmentManager().openTransaction()
+                .replace(R.id.detail_container, mDetailFragment)
+                .commit();
     }
 
     /**
@@ -603,33 +591,7 @@
 
         @Override
         public void onInvalidSelection() {
-            Uri requestedContactUri = mRequest.getContactUri();
-            if (requestedContactUri != null
-                    && mListFragment instanceof DefaultContactBrowseListFragment) {
-                // If a specific selection was requested, adjust the filter so
-                // that the requested selection is uncoditionally visible.
-                DefaultContactBrowseListFragment fragment =
-                        (DefaultContactBrowseListFragment) mListFragment;
-                ContactListFilter filter = new ContactListFilter(
-                        ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
-                fragment.setFilter(filter);
-                fragment.setSelectedContactUri(requestedContactUri);
-                fragment.saveSelectedUri(mPrefs);
-                fragment.reloadData();
-                if (mContactListFilterController != null) {
-                    mContactListFilterController.setContactListFilter(filter, true);
-                }
-            } else {
-                // Otherwise, choose the first contact on the list and select it
-                requestedContactUri = mListFragment.getFirstContactUri();
-                if (requestedContactUri != null) {
-                    mListFragment.setSelectedContactUri(requestedContactUri);
-                    mListFragment.requestSelectionOnScreen(false);
-                }
-            }
-            if (mContactContentDisplayed) {
-                setupContactDetailFragment(requestedContactUri);
-            }
+            showDefaultSelection();
         }
     }
 
@@ -637,6 +599,8 @@
         @Override
         public void onContactNotFound() {
             setupContactDetailFragment(null);
+            mRequest.setContactUri(null);
+            showDefaultSelection();
         }
 
         @Override
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 9bcad3f..cf03026 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -125,6 +125,19 @@
         }
     }
 
+    @Override
+    public void clearPartitions() { 
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+                directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
+            }
+        }
+        super.clearPartitions();
+    }
+
     public boolean isSearchMode() {
         return mSearchMode;
     }
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index 365851f..d5368dc 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -24,10 +24,10 @@
 import com.android.contacts.ContactsUtils.ImActions;
 import com.android.contacts.R;
 import com.android.contacts.TypePrecedence;
+import com.android.contacts.model.AccountTypes;
 import com.android.contacts.model.BaseAccountType;
 import com.android.contacts.model.BaseAccountType.DataKind;
 import com.android.contacts.model.BaseAccountType.EditType;
-import com.android.contacts.model.AccountTypes;
 import com.android.contacts.util.Constants;
 import com.android.contacts.util.DataStatus;
 import com.android.contacts.util.DateUtils;
@@ -105,7 +105,6 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Locale;
 
 public class ContactDetailFragment extends Fragment implements OnCreateContextMenuListener,
         OnItemClickListener, SelectAccountDialogFragment.Listener {
@@ -114,6 +113,7 @@
     private static final int LOADER_DETAILS = 1;
 
     private Context mContext;
+    private View mView;
     private Uri mLookupUri;
     private Listener mListener;
 
@@ -192,23 +192,23 @@
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
-        final View view = inflater.inflate(R.layout.contact_detail_fragment, container, false);
+        mView = inflater.inflate(R.layout.contact_detail_fragment, container, false);
 
         setHasOptionsMenu(true);
 
         mInflater = inflater;
 
-        mHeaderView = (ContactDetailHeaderView) view.findViewById(R.id.contact_header_widget);
+        mHeaderView = (ContactDetailHeaderView) mView.findViewById(R.id.contact_header_widget);
         mHeaderView.setListener(mHeaderViewListener);
 
-        mListView = (ListView) view.findViewById(android.R.id.list);
+        mListView = (ListView) mView.findViewById(android.R.id.list);
         mListView.setOnCreateContextMenuListener(this);
         mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
         mListView.setOnItemClickListener(this);
         // Don't set it to mListView yet.  We do so later when we bind the adapter.
-        mEmptyView = view.findViewById(android.R.id.empty);
+        mEmptyView = mView.findViewById(android.R.id.empty);
 
-        mCopyGalToLocalButton = (Button) view.findViewById(R.id.copyLocal);
+        mCopyGalToLocalButton = (Button) mView.findViewById(R.id.copyLocal);
         mCopyGalToLocalButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -216,7 +216,7 @@
             }
         });
 
-        return view;
+        return mView;
     }
 
     public void setListener(Listener value) {
@@ -236,12 +236,24 @@
 
     public void loadUri(Uri lookupUri) {
         mLookupUri = lookupUri;
-        if (getActivity() != null) {
+        if (mLookupUri == null) {
+            mContactData = null;
+            bindData();
+        } else if (getActivity() != null) {
             getLoaderManager().restartLoader(LOADER_DETAILS, null, mDetailLoaderListener);
         }
     }
 
     private void bindData() {
+        if (mView == null) {
+            return;
+        }
+
+        if (mContactData == null) {
+            mView.setVisibility(View.INVISIBLE);
+            return;
+        }
+
         // Set the header
         mHeaderView.loadData(mContactData);
 
@@ -276,6 +288,8 @@
             mCopyGalToLocalButton.setVisibility(View.GONE);
         }
 
+        mView.setVisibility(View.VISIBLE);
+
         getActivity().invalidateOptionsMenu();
     }
 
@@ -1200,7 +1214,6 @@
         }
     };
 
-
     public static interface Listener {
         /**
          * Contact was not found, so somehow close this fragment. This is raised after a contact
diff --git a/src/com/android/contacts/views/detail/ContactNoneFragment.java b/src/com/android/contacts/views/detail/ContactNoneFragment.java
deleted file mode 100644
index 8d5794e..0000000
--- a/src/com/android/contacts/views/detail/ContactNoneFragment.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.views.detail;
-
-import com.android.contacts.R;
-
-import android.app.Fragment;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-public class ContactNoneFragment extends Fragment {
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
-        return inflater.inflate(R.layout.contact_none_fragment, container, false);
-    }
-}