diff --git a/res/drawable/recent_lists_footer_background.xml b/res/drawable/recent_lists_footer_background.xml
deleted file mode 100644
index b5029af..0000000
--- a/res/drawable/recent_lists_footer_background.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  ~ Copyright (C) 2014 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
-  -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="?android:attr/colorControlHighlight">
-    <!-- Mask to constrain the ripple to the bounds of the view. -->
-    <item android:id="@android:id/mask">
-        <color android:color="@android:color/white" />
-    </item>
-</ripple>
diff --git a/res/layout/recents_list_footer.xml b/res/layout/recents_list_footer.xml
deleted file mode 100644
index 3a56cbe..0000000
--- a/res/layout/recents_list_footer.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Text field and possibly soft menu button above the keypad where
-     the digits are displayed. -->
-
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/recents_list_footer"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingTop="20dp"
-    android:paddingBottom="20dp"
-    android:gravity="center"
-    android:fontFamily="@string/view_full_call_history_font_family"
-    android:textStyle="bold"
-    android:textColor="@color/dialtacts_secondary_text_color"
-    android:textSize="14sp"
-    android:text="@string/recents_footer_text"
-    android:background="@drawable/recent_lists_footer_background" />
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 904b9c5..d69c2ed 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -75,7 +75,6 @@
     private static final String KEY_FILTER_TYPE = "filter_type";
     private static final String KEY_LOG_LIMIT = "log_limit";
     private static final String KEY_DATE_LIMIT = "date_limit";
-    private static final String KEY_SHOW_FOOTER = "show_footer";
 
     private CallLogAdapter mAdapter;
     private CallLogQueryHandler mCallLogQueryHandler;
@@ -90,7 +89,6 @@
     private TextView mStatusMessageText;
     private TextView mStatusMessageAction;
     private KeyguardManager mKeyguardManager;
-    private View mFooterView;
 
     private boolean mEmptyLoaderRunning;
     private boolean mCallLogFetched;
@@ -128,9 +126,6 @@
     // the date filter are included.  If zero, no date-based filtering occurs.
     private long mDateLimit = 0;
 
-    // Whether or not to show the Show call history footer view
-    private boolean mHasFooterView = false;
-
     public CallLogFragment() {
         this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
     }
@@ -174,7 +169,6 @@
             mCallTypeFilter = state.getInt(KEY_FILTER_TYPE, mCallTypeFilter);
             mLogLimit = state.getInt(KEY_LOG_LIMIT, mLogLimit);
             mDateLimit = state.getLong(KEY_DATE_LIMIT, mDateLimit);
-            mHasFooterView = state.getBoolean(KEY_SHOW_FOOTER, mHasFooterView);
         }
 
         String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
@@ -287,7 +281,6 @@
         super.onViewCreated(view, savedInstanceState);
         mEmptyListView = view.findViewById(R.id.empty_list_view);
         getListView().setItemsCanFocus(true);
-        maybeAddFooterView();
 
         updateEmptyMessage(mCallTypeFilter);
     }
@@ -380,7 +373,6 @@
         outState.putInt(KEY_FILTER_TYPE, mCallTypeFilter);
         outState.putInt(KEY_LOG_LIMIT, mLogLimit);
         outState.putLong(KEY_DATE_LIMIT, mDateLimit);
-        outState.putBoolean(KEY_SHOW_FOOTER, mHasFooterView);
     }
 
     @Override
@@ -468,44 +460,6 @@
         }
     }
 
-    /**
-     * Enables/disables the showing of the view full call history footer
-     *
-     * @param hasFooterView Whether or not to show the footer
-     */
-    public void setHasFooterView(boolean hasFooterView) {
-        mHasFooterView = hasFooterView;
-        maybeAddFooterView();
-    }
-
-    /**
-     * Determine whether or not the footer view should be added to the listview. If getView()
-     * is null, which means onCreateView hasn't been called yet, defer the addition of the footer
-     * until onViewCreated has been called.
-     */
-    private void maybeAddFooterView() {
-        if (!mHasFooterView || getView() == null) {
-            return;
-        }
-
-        if (mFooterView == null) {
-            mFooterView = getActivity().getLayoutInflater().inflate(
-                    R.layout.recents_list_footer, getListView(), false);
-            mFooterView.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    ((HostInterface) getActivity()).showCallHistory();
-                }
-            });
-        }
-
-        final ListView listView = getListView();
-        listView.removeFooterView(mFooterView);
-        listView.addFooterView(mFooterView);
-
-        ViewUtil.addBottomPaddingToListViewForFab(listView, getResources());
-    }
-
     public void onBadDataReported(String number) {
         if (number == null) {
             return;
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 0e558bf..f22a5d1 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -109,7 +109,6 @@
                 case TAB_INDEX_RECENTS:
                     mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
                             MAX_RECENTS_ENTRIES, System.currentTimeMillis() - OLDEST_RECENTS_DATE);
-                    mRecentsFragment.setHasFooterView(true);
                     return mRecentsFragment;
                 case TAB_INDEX_ALL_CONTACTS:
                     mAllContactsFragment = new AllContactsFragment();
