diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index aacf208..1c93350 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1134,6 +1134,11 @@
         return mActionBarController.isActionBarShowing();
     }
 
+    @Override
+    public ActionBarController getActionBarController() {
+        return mActionBarController;
+    }
+
     public boolean isDialpadShown() {
         return mIsDialpadShown;
     }
@@ -1144,13 +1149,13 @@
     }
 
     @Override
-    public int getActionBarHeight() {
-        return mActionBarHeight;
+    public void setActionBarHideOffset(int offset) {
+        getActionBar().setHideOffset(offset);
     }
 
     @Override
-    public void setActionBarHideOffset(int hideOffset) {
-        mActionBarController.setHideOffset(hideOffset);
+    public int getActionBarHeight() {
+        return mActionBarHeight;
     }
 
     /**
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index de501f4..8e2500a 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -30,6 +30,7 @@
 import com.android.dialer.calllog.ContactInfoHelper;
 import com.android.dialer.list.ShortcutCardsAdapter.SwipeableShortcutCard;
 import com.android.dialer.util.DialerUtils;
+import com.android.dialer.widget.ActionBarController;
 import com.android.dialer.widget.OverlappingPaneLayout;
 import com.android.dialer.widget.OverlappingPaneLayout.PanelSlideCallbacks;
 import com.android.dialerbind.ObjectFactory;
@@ -68,8 +69,7 @@
 
     public interface HostInterface {
         public void showCallHistory();
-        public int getActionBarHeight();
-        public void setActionBarHideOffset(int offset);
+        public ActionBarController getActionBarController();
     }
 
     private ActionBar mActionBar;
@@ -124,8 +124,9 @@
 
                 final int availableActionBarHeight =
                         Math.min(mActionBar.getHeight(), topPaneHeight);
-                ((HostInterface) getActivity()).setActionBarHideOffset(
-                        mActionBar.getHeight() - availableActionBarHeight);
+                final ActionBarController controller =
+                        ((HostInterface) getActivity()).getActionBarController();
+                controller.setHideOffset(mActionBar.getHeight() - availableActionBarHeight);
 
                 if (!mActionBar.isShowing()) {
                     mActionBar.show();
@@ -407,7 +408,7 @@
         paneLayout.openPane();
         paneLayout.setPanelSlideCallbacks(mPanelSlideCallbacks);
         paneLayout.setIntermediatePinnedOffset(
-                ((HostInterface) getActivity()).getActionBarHeight());
+                ((HostInterface) getActivity()).getActionBarController().getActionBarHeight());
 
         LayoutTransition transition = paneLayout.getLayoutTransition();
         // Turns on animations for all types of layout changes so that they occur for
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
index 265c03f..b9923d1 100644
--- a/src/com/android/dialer/widget/ActionBarController.java
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -46,7 +46,8 @@
         public boolean hasSearchQuery();
         public boolean shouldShowActionBar();
         public int getActionBarHeight();
-        public ActionBar getActionBar();
+        public int getActionBarHideOffset();
+        public void setActionBarHideOffset(int offset);
     }
 
     public ActionBarController(ActivityUi activityUi, SearchEditTextLayout searchBox) {
@@ -166,14 +167,18 @@
 
     public void setHideOffset(int offset) {
         mIsActionBarSlidUp = offset >= mActivityUi.getActionBarHeight();
-        mActivityUi.getActionBar().setHideOffset(offset);
+        mActivityUi.setActionBarHideOffset(offset);
     }
 
     /**
      * @return The offset the action bar is being translated upwards by
      */
     public int getHideOffset() {
-        return mActivityUi.getActionBar().getHideOffset();
+        return mActivityUi.getActionBarHideOffset();
+    }
+
+    public int getActionBarHeight() {
+        return mActivityUi.getActionBarHeight();
     }
 
     /**
