diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index f69c513..aad7d8e 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -24,8 +24,10 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@color/background_dialer_call_log"
+        android:clipToPadding="false"
         android:paddingStart="@dimen/call_log_horizontal_margin"
-        android:paddingEnd="@dimen/call_log_horizontal_margin" />
+        android:paddingEnd="@dimen/call_log_horizontal_margin"
+        android:paddingBottom="@dimen/floating_action_button_list_bottom_padding" />
 
     <com.android.dialer.widget.EmptyContentView
         android:id="@+id/empty_list_view"
diff --git a/res/layout/show_call_history_list_item.xml b/res/layout/show_call_history_list_item.xml
deleted file mode 100644
index 1264894..0000000
--- a/res/layout/show_call_history_list_item.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 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.
--->
-
-<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/CallLogCardStyle"
-    android:layout_height="40dp"
-    android:clickable="true"
-    android:foreground="?android:attr/selectableItemBackground">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:text="@string/show_call_history" />
-
-</android.support.v7.widget.CardView>
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9dcf72b..8eeb03c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -535,9 +535,6 @@
     <!-- Shortcut item used to make a video call directly from search. [CHAR LIMIT=25] -->
     <string name="search_shortcut_make_video_call">Make video call</string>
 
-    <!-- Title for the call log list item that brings users to the full call history when clicked -->
-    <string name="show_call_history">View full call history</string>
-
     <!-- Number of missed calls shown on call card [CHAR LIMIT=40] -->
     <string name="num_missed_calls"><xliff:g id="number">%s</xliff:g> new missed calls</string>
 
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 1f6c490..16f48ad 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -39,8 +39,6 @@
 import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 
 public class CallLogActivity extends Activity implements ViewPager.OnPageChangeListener {
     private ViewPager mViewPager;
@@ -67,9 +65,10 @@
         public Fragment getItem(int position) {
             switch (position) {
                 case TAB_INDEX_ALL:
-                    return new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
+                    return new CallLogFragment(
+                            CallLogQueryHandler.CALL_TYPE_ALL, true /* isCallLogActivity */);
                 case TAB_INDEX_MISSED:
-                    return new CallLogFragment(Calls.MISSED_TYPE);
+                    return new CallLogFragment(Calls.MISSED_TYPE, true /* isCallLogActivity */);
             }
             throw new IllegalStateException("No fragment at position " + position);
         }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 312cf7e..0d6fcac 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -76,14 +76,12 @@
         public void fetchCalls();
     }
 
-    private static final int VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM = 10;
     private static final int NO_EXPANDED_LIST_ITEM = -1;
 
     private static final int VOICEMAIL_PROMO_CARD_POSITION = 0;
     /**
      * View type for voicemail promo card.  Note: Numbering starts at 20 to avoid collision
-     * with {@link com.android.common.widget.GroupingListAdapter#ITEM_TYPE_IN_GROUP}, and
-     * {@link CallLogAdapter#VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM}.
+     * with {@link com.android.common.widget.GroupingListAdapter#ITEM_TYPE_IN_GROUP}.
      */
     private static final int VIEW_TYPE_VOICEMAIL_PROMO_CARD = 20;
 
@@ -96,12 +94,12 @@
 
     protected final Context mContext;
     private final ContactInfoHelper mContactInfoHelper;
-    private final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
+    protected final VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
     private final CallFetcher mCallFetcher;
 
     protected ContactInfoCache mContactInfoCache;
 
-    private boolean mIsShowingRecentsTab;
+    private boolean mIsCallLogActivity;
 
     private static final String KEY_EXPANDED_POSITION = "expanded_position";
     private static final String KEY_EXPANDED_ROW_ID = "expanded_row_id";
@@ -130,7 +128,7 @@
 
     private SharedPreferences mPrefs;
 
-    private boolean mShowPromoCard = false;
+    private boolean mShowVoicemailPromoCard = false;
 
     /** Instance of helper class for managing views. */
     private final CallLogListItemHelper mCallLogListItemHelper;
@@ -325,7 +323,7 @@
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
             VoicemailPlaybackPresenter voicemailPlaybackPresenter,
-            boolean isShowingRecentsTab) {
+            boolean isCallLogActivity) {
         super(context);
 
         mContext = context;
@@ -335,7 +333,7 @@
         if (mVoicemailPlaybackPresenter != null) {
             mVoicemailPlaybackPresenter.setOnVoicemailDeletedListener(this);
         }
-        mIsShowingRecentsTab = isShowingRecentsTab;
+        mIsCallLogActivity = isCallLogActivity;
 
         mContactInfoCache = new ContactInfoCache(
                 mContactInfoHelper, mOnContactInfoChangedListener);
@@ -413,9 +411,7 @@
 
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        if (viewType == VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM) {
-            return ShowCallHistoryViewHolder.create(mContext, parent);
-        } else if (viewType == VIEW_TYPE_VOICEMAIL_PROMO_CARD) {
+        if (viewType == VIEW_TYPE_VOICEMAIL_PROMO_CARD) {
             return createVoicemailPromoCardViewHolder(parent);
         }
         return createCallLogEntryViewHolder(parent);
@@ -459,8 +455,6 @@
         Trace.beginSection("onBindViewHolder: " + position);
 
         switch (getItemViewType(position)) {
-            case VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM:
-                break;
             case VIEW_TYPE_VOICEMAIL_PROMO_CARD:
                 bindVoicemailPromoCardViewHolder(viewHolder);
                 break;
@@ -601,14 +595,12 @@
 
     @Override
     public int getItemCount() {
-        return super.getItemCount() + ((isShowingRecentsTab() || mShowPromoCard) ? 1 : 0);
+        return super.getItemCount() + (mShowVoicemailPromoCard ? 1 : 0);
     }
 
     @Override
     public int getItemViewType(int position) {
-        if (position == getItemCount() - 1 && isShowingRecentsTab()) {
-            return VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM;
-        } else if (position == VOICEMAIL_PROMO_CARD_POSITION && mShowPromoCard) {
+        if (position == VOICEMAIL_PROMO_CARD_POSITION && mShowVoicemailPromoCard) {
             return VIEW_TYPE_VOICEMAIL_PROMO_CARD;
         }
         return super.getItemViewType(position);
@@ -623,11 +615,11 @@
      */
     @Override
     public Object getItem(int position) {
-        return super.getItem(position - (mShowPromoCard ? 1 : 0));
+        return super.getItem(position - (mShowVoicemailPromoCard ? 1 : 0));
     }
 
-    protected boolean isShowingRecentsTab() {
-        return mIsShowingRecentsTab;
+    protected boolean isCallLogActivity() {
+        return mIsCallLogActivity;
     }
 
     @Override
@@ -793,7 +785,7 @@
     private void maybeShowVoicemailPromoCard() {
         boolean showPromoCard = mPrefs.getBoolean(SHOW_VOICEMAIL_PROMO_CARD,
                 SHOW_VOICEMAIL_PROMO_CARD_DEFAULT);
-        mShowPromoCard = (mVoicemailPlaybackPresenter != null) && showPromoCard;
+        mShowVoicemailPromoCard = (mVoicemailPlaybackPresenter != null) && showPromoCard;
     }
 
     /**
@@ -801,7 +793,7 @@
      */
     private void dismissVoicemailPromoCard() {
         mPrefs.edit().putBoolean(SHOW_VOICEMAIL_PROMO_CARD, false).apply();
-        mShowPromoCard = false;
+        mShowVoicemailPromoCard = false;
         notifyItemRemoved(VOICEMAIL_PROMO_CARD_POSITION);
     }
 
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index e7b7764..cf354e5 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -141,10 +141,9 @@
     private long mDateLimit = NO_DATE_LIMIT;
 
     /*
-     * True if this instance of the CallLogFragment is the Recents screen shown in
-     * DialtactsActivity.
+     * True if this instance of the CallLogFragment shown in the CallLogActivity.
      */
-    private boolean mIsRecentsFragment;
+    private boolean mIsCallLogActivity = false;
 
     public interface HostInterface {
         public void showDialpad();
@@ -158,6 +157,11 @@
         this(filterType, NO_LOG_LIMIT);
     }
 
+    public CallLogFragment(int filterType, boolean isCallLogActivity) {
+        this(filterType, NO_LOG_LIMIT);
+        mIsCallLogActivity = isCallLogActivity;
+    }
+
     public CallLogFragment(int filterType, int logLimit) {
         this(filterType, logLimit, NO_DATE_LIMIT);
     }
@@ -194,8 +198,6 @@
             mDateLimit = state.getLong(KEY_DATE_LIMIT, mDateLimit);
         }
 
-        mIsRecentsFragment = mLogLimit != NO_LOG_LIMIT;
-
         final Activity activity = getActivity();
         final ContentResolver resolver = activity.getContentResolver();
         String currentCountryIso = GeoUtil.getCurrentCountryIso(activity);
@@ -294,13 +296,12 @@
         mEmptyListView.setActionClickedListener(this);
 
         String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
-        boolean isShowingRecentsTab = mLogLimit != NO_LOG_LIMIT || mDateLimit != NO_DATE_LIMIT;
         mAdapter = ObjectFactory.newCallLogAdapter(
                 getActivity(),
                 this,
                 new ContactInfoHelper(getActivity(), currentCountryIso),
                 mVoicemailPlaybackPresenter,
-                isShowingRecentsTab);
+                mIsCallLogActivity);
         mRecyclerView.setAdapter(mAdapter);
 
         fetchCalls();
@@ -419,10 +420,10 @@
                         + filterType);
         }
         mEmptyListView.setDescription(messageId);
-        if (mIsRecentsFragment) {
-            mEmptyListView.setActionLabel(R.string.recentCalls_empty_action);
-        } else {
+        if (mIsCallLogActivity) {
             mEmptyListView.setActionLabel(EmptyContentView.NO_LABEL);
+        } else {
+            mEmptyListView.setActionLabel(R.string.recentCalls_empty_action);
         }
     }
 
@@ -495,7 +496,7 @@
 
         if (!PermissionsUtil.hasPermission(activity, READ_CALL_LOG)) {
             requestPermissions(new String[] {READ_CALL_LOG}, READ_CALL_LOG_PERMISSION_REQUEST_CODE);
-        } else if (mIsRecentsFragment) {
+        } else if (!mIsCallLogActivity) {
             // Show dialpad if we are the recents fragment.
             ((HostInterface) activity).showDialpad();
         }
diff --git a/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java b/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java
deleted file mode 100644
index af36a4d..0000000
--- a/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2015 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.dialer.calllog;
-
-import android.content.Context;
-import android.content.Intent;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.dialer.R;
-
-public final class ShowCallHistoryViewHolder extends RecyclerView.ViewHolder {
-
-    private ShowCallHistoryViewHolder(final Context context, View view) {
-        super(view);
-        view.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                final Intent intent = new Intent(context, CallLogActivity.class);
-                context.startActivity(intent);
-            }
-        });
-    }
-
-    public static ShowCallHistoryViewHolder create(Context context, ViewGroup parent) {
-        LayoutInflater inflater = LayoutInflater.from(context);
-        View view = inflater.inflate(R.layout.show_call_history_list_item, parent, false);
-        return new ShowCallHistoryViewHolder(context, view);
-    }
-}
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 33c9776..1eeba58 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -59,10 +59,6 @@
     public static final int TAB_COUNT_DEFAULT = 3;
     public static final int TAB_COUNT_WITH_VOICEMAIL = 4;
 
-    private static final int MAX_RECENTS_ENTRIES = 20;
-    // Oldest recents entry to display is 2 weeks old.
-    private static final long OLDEST_RECENTS_DATE = 1000L * 60 * 60 * 24 * 14;
-
     private static final String PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER =
             "has_active_voicemail_provider";
 
@@ -116,8 +112,7 @@
                     mSpeedDialFragment = new SpeedDialFragment();
                     return mSpeedDialFragment;
                 case TAB_INDEX_RECENTS:
-                    mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
-                            MAX_RECENTS_ENTRIES, System.currentTimeMillis() - OLDEST_RECENTS_DATE);
+                    mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
                     return mRecentsFragment;
                 case TAB_INDEX_ALL_CONTACTS:
                     mAllContactsFragment = new AllContactsFragment();
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index 1a36b05..73c1c6f 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -47,12 +47,12 @@
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
             VoicemailPlaybackPresenter voicemailPlaybackPresenter,
-            boolean isShowingRecentsTab) {
+            boolean isCallLogActivity) {
         return new CallLogAdapter(
                 context,
                 callFetcher,
                 contactInfoHelper,
                 voicemailPlaybackPresenter,
-                isShowingRecentsTab);
+                isCallLogActivity);
     }
 }
