diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index b2d109a..aac10e3 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -773,7 +773,7 @@
     public void displayDialpad(boolean value, boolean animate) {
         mShowDialpadButton.setSelected(value);
         if (getActivity() != null && getActivity() instanceof InCallActivity) {
-            ((InCallActivity) getActivity()).displayDialpad(value, animate);
+            ((InCallActivity) getActivity()).showDialpadFragment(value, animate);
         }
     }
 
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index bdf39d5..1b17d35 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -211,7 +211,7 @@
             @Override
             public void onClick(View v) {
                 InCallActivity activity = (InCallActivity) getActivity();
-                activity.showConferenceCallManager(true);
+                activity.showConferenceFragment(true);
             }
         });
 
@@ -879,7 +879,7 @@
         });
     }
 
-    public void onDialpadVisiblityChange(boolean isShown) {
+    public void onDialpadVisibilityChange(boolean isShown) {
         mIsDialpadShowing = isShown;
         updateFabPosition();
     }
@@ -949,7 +949,7 @@
                         }
                         observer.removeOnGlobalLayoutListener(this);
 
-                        onDialpadVisiblityChange(mIsDialpadShowing);
+                        onDialpadVisibilityChange(mIsDialpadShowing);
                     }
                 });
     }
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 1a73127..a6b3a41 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -333,7 +333,7 @@
             mCallButtonFragment.displayDialpad(false /* show */, true /* animate */);
             return;
         } else if (mConferenceManagerFragment != null && mConferenceManagerFragment.isVisible()) {
-            showConferenceCallManager(false);
+            showConferenceFragment(false);
             return;
         }
 
@@ -684,25 +684,25 @@
         throw new IllegalStateException("Unexpected fragment: " + tag);
     }
 
-    public void displayDialpad(boolean showDialpad, boolean animate) {
+    public void showDialpadFragment(boolean show, boolean animate) {
         // If the dialpad is already visible, don't animate in. If it's gone, don't animate out.
-        if ((showDialpad && isDialpadVisible()) || (!showDialpad && !isDialpadVisible())) {
+        if ((show && isDialpadVisible()) || (!show && !isDialpadVisible())) {
             return;
         }
         // We don't do a FragmentTransaction on the hide case because it will be dealt with when
         // the listener is fired after an animation finishes.
         if (!animate) {
-            showFragment(TAG_DIALPAD_FRAGMENT, showDialpad, true);
+            showFragment(TAG_DIALPAD_FRAGMENT, show, true);
         } else {
-            if (showDialpad) {
+            if (show) {
                 showFragment(TAG_DIALPAD_FRAGMENT, true, true);
                 mDialpadFragment.animateShowDialpad();
             }
-            mCallCardFragment.onDialpadVisiblityChange(showDialpad);
-            mDialpadFragment.getView().startAnimation(showDialpad ? mSlideIn : mSlideOut);
+            mCallCardFragment.onDialpadVisibilityChange(show);
+            mDialpadFragment.getView().startAnimation(show ? mSlideIn : mSlideOut);
         }
 
-        InCallPresenter.getInstance().getProximitySensor().onDialpadVisible(showDialpad);
+        InCallPresenter.getInstance().getProximitySensor().onDialpadVisible(show);
     }
 
     public boolean isDialpadVisible() {
@@ -715,7 +715,7 @@
      * @param show {@code true} if the conference manager should be shown, {@code false} if it
      *                         should be hidden.
      */
-    public void showConferenceCallManager(boolean show) {
+    public void showConferenceFragment(boolean show) {
         showFragment(TAG_CONFERENCE_FRAGMENT, show, true);
         mConferenceManagerFragment.onVisibilityChanged(show);
 
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index e90dc99..f2aaea1 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -1302,7 +1302,7 @@
             return;
         }
 
-        mInCallActivity.showConferenceCallManager(show);
+        mInCallActivity.showConferenceFragment(show);
     }
 
     /**
