diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index ee83c2e..6b24c0a 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -90,7 +90,7 @@
 
     protected ContactInfoCache mContactInfoCache;
 
-    private boolean mShowCallHistoryListItem = false;
+    private boolean mIsShowingRecentsTab;
 
     /**
      * Tracks the currently expanded call log row.
@@ -184,13 +184,14 @@
             Context context,
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
+            boolean isShowingRecentsTab,
             OnReportButtonClickListener onReportButtonClickListener) {
         super(context);
 
         mContext = context;
         mCallFetcher = callFetcher;
         mContactInfoHelper = contactInfoHelper;
-
+        mIsShowingRecentsTab = isShowingRecentsTab;
         mOnReportButtonClickListener = onReportButtonClickListener;
 
         mContactInfoCache = new ContactInfoCache(
@@ -425,19 +426,19 @@
 
     @Override
     public int getItemCount() {
-        return super.getItemCount() + (mShowCallHistoryListItem ? 1 : 0);
+        return super.getItemCount() + (isShowingRecentsTab() ? 1 : 0);
     }
 
     @Override
     public int getItemViewType(int position) {
-        if (position == getItemCount() - 1 && mShowCallHistoryListItem) {
+        if (position == getItemCount() - 1 && isShowingRecentsTab()) {
             return VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM;
         }
         return super.getItemViewType(position);
     }
 
-    public void setShowCallHistoryListItem(boolean show) {
-        mShowCallHistoryListItem = show;
+    protected boolean isShowingRecentsTab() {
+        return mIsShowingRecentsTab;
     }
 
     /**
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 02970f6..4948176 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -281,11 +281,13 @@
         mRecyclerView.setLayoutManager(mLayoutManager);
 
         String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
-        mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
-                new ContactInfoHelper(getActivity(), currentCountryIso), this);
-        if (mLogLimit != NO_LOG_LIMIT || mDateLimit != NO_DATE_LIMIT) {
-            mAdapter.setShowCallHistoryListItem(true);
-        }
+        boolean isShowingRecentsTab = mLogLimit != NO_LOG_LIMIT || mDateLimit != NO_DATE_LIMIT;
+        mAdapter = ObjectFactory.newCallLogAdapter(
+                getActivity(),
+                this,
+                new ContactInfoHelper(getActivity(), currentCountryIso),
+                isShowingRecentsTab,
+                this);
         mRecyclerView.setAdapter(mAdapter);
 
         mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index dfacd3f..be4eeec 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -48,9 +48,14 @@
             Context context,
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
+            boolean isShowingRecentsTab,
             OnReportButtonClickListener onReportButtonClickListener) {
         return new CallLogAdapter(
-                context, callFetcher, contactInfoHelper, onReportButtonClickListener);
+                context,
+                callFetcher,
+                contactInfoHelper,
+                isShowingRecentsTab,
+                onReportButtonClickListener);
     }
 
     public static DialogFragment getReportDialogFragment(String number) {
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
index 70d63c9..5f09cb7 100644
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
@@ -204,7 +204,7 @@
     private static final class TestCallLogAdapter extends CallLogAdapter {
         public TestCallLogAdapter(Context context, CallFetcher callFetcher,
                 ContactInfoHelper contactInfoHelper) {
-            super(context, callFetcher, contactInfoHelper, null);
+            super(context, callFetcher, contactInfoHelper, false, null);
             mContactInfoCache = new TestContactInfoCache(
                     contactInfoHelper, mOnContactInfoChangedListener);
         }
