Fix for "Clear call log" menu item showing up incorrectly.

The fragment member variables were being lost on rotation
because the FragmentManager does not call getItem on rotation.

Fix the way we save the fragments into member variables to ensure
that those references are always up to date so that mAllCallsFragment
is not null after rotation.

Bug: 17478780

Change-Id: I5a0c070273f2d86864afd96c6bb6551bcd0d1aa4
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index c7862ae..ab61f48 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -31,6 +31,7 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.MotionEvent;
+import android.view.ViewGroup;
 
 import com.android.contacts.common.interactions.TouchPointManager;
 import com.android.contacts.common.list.ViewPagerTabs;
@@ -81,19 +82,34 @@
         public Fragment getItem(int position) {
             switch (position) {
                 case TAB_INDEX_ALL:
-                    mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
-                    return mAllCallsFragment;
+                    return new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
                 case TAB_INDEX_MISSED:
-                    mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
-                    return mMissedCallsFragment;
+                    return new CallLogFragment(Calls.MISSED_TYPE);
                 case TAB_INDEX_VOICEMAIL:
-                    mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
-                    return mVoicemailFragment;
+                    return new CallLogFragment(Calls.VOICEMAIL_TYPE);
             }
             throw new IllegalStateException("No fragment at position " + position);
         }
 
         @Override
+        public Object instantiateItem(ViewGroup container, int position) {
+            final CallLogFragment fragment =
+                    (CallLogFragment) super.instantiateItem(container, position);
+            switch (position) {
+                case TAB_INDEX_ALL:
+                    mAllCallsFragment = fragment;
+                    break;
+                case TAB_INDEX_MISSED:
+                    mMissedCallsFragment = fragment;
+                    break;
+                case TAB_INDEX_VOICEMAIL:
+                    mVoicemailFragment = fragment;
+                    break;
+            }
+            return fragment;
+        }
+
+        @Override
         public CharSequence getPageTitle(int position) {
             return mTabTitles[position];
         }
@@ -186,9 +202,8 @@
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all);
-
-        // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything.
         if (mAllCallsFragment != null && itemDeleteAll != null) {
+            // If onPrepareOptionsMenu is called before fragments are loaded, don't do anything.
             final CallLogAdapter adapter = mAllCallsFragment.getAdapter();
             itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
         }