Show empty detail screen (on tablet) on nothing loaded

TESTED:
- People on Phone should work as we expect.
  (this change shouldn't affect Phone experience at all)
- People on Tablet, landscape and portrait
-- nothing should be shown when no contact is selected
   on boot
-- detail should be shown when a contact is selected
-- nothing should be shown when filter has changed and
   no contact is selected
-- detail should be shown when filter has changed and
   a contact is selected after that
-- orientation change should not cause any problem

Bug: 5084998
Change-Id: Ieed0b551655b7ee3b3872117eca50af90df30021
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 1c69ef9..1bab98d 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1045,6 +1045,8 @@
         @Override
         public void onDetailsLoaded(final ContactLoader.Result result) {
             if (result == null) {
+                // Nothing is loaded. Show empty state.
+                mContactDetailLayoutController.showEmptyState();
                 return;
             }
             // Since {@link FragmentTransaction}s cannot be done in the onLoadFinished() of the
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 4d50a39..9a54013 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -371,6 +371,10 @@
         mShowStaticPhoto = showPhoto;
     }
 
+    public void showEmptyState() {
+        setData(null, null);
+    }
+
     public void setData(Uri lookupUri, ContactLoader.Result result) {
         mLookupUri = lookupUri;
         mContactData = result;
@@ -393,6 +397,10 @@
 
         if (mContactData == null) {
             mView.setVisibility(View.INVISIBLE);
+            mAllEntries.clear();
+            if (mAdapter != null) {
+                mAdapter.notifyDataSetChanged();
+            }
             return;
         }
 
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index a10431b..ae62bdb 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -221,6 +221,33 @@
         }
     }
 
+    public void showEmptyState() {
+        switch (mLayoutMode) {
+            case FRAGMENT_CAROUSEL: {
+                mFragmentCarousel.enableSwipe(false);
+                mDetailFragment.showEmptyState();
+                break;
+            }
+            case TWO_COLUMN: {
+                mDetailFragment.setShowStaticPhoto(false);
+                mUpdatesFragmentView.setVisibility(View.GONE);
+                mDetailFragment.showEmptyState();
+                break;
+            }
+            case VIEW_PAGER_AND_TAB_CAROUSEL: {
+                mDetailFragment.setShowStaticPhoto(false);
+                mDetailFragment.showEmptyState();
+                mTabCarousel.loadData(null);
+                mTabCarousel.setVisibility(View.GONE);
+                mViewPagerAdapter.enableSwipe(false);
+                mViewPager.setCurrentItem(0);
+                break;
+            }
+            default:
+                throw new IllegalStateException("Invalid LayoutMode " + mLayoutMode);
+        }
+    }
+
     /**
      * Setup the layout for the contact with updates. Pass in the index of the current page to
      * select or null if the current selection should be left as is.