diff --git a/java/com/android/dialer/util/ViewUtil.java b/java/com/android/dialer/util/ViewUtil.java
index 211b3ed..81a32f9 100644
--- a/java/com/android/dialer/util/ViewUtil.java
+++ b/java/com/android/dialer/util/ViewUtil.java
@@ -19,19 +19,16 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.graphics.Paint;
-import android.graphics.Point;
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.provider.Settings.Global;
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.TypedValue;
-import android.view.Display;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.ViewTreeObserver.OnPreDrawListener;
-import android.view.WindowManager;
 import android.widget.TextView;
 import java.util.Locale;
 
@@ -142,45 +139,4 @@
     return Settings.Global.getFloat(contentResolver, Global.ANIMATOR_DURATION_SCALE, 1.0f) == 0
         || powerManager.isPowerSaveMode();
   }
-
-  /**
-   * Get navigation bar height by calculating difference between app usable size and real screen
-   * size. Note that this won't work in multi-window mode so it's caller's responsibility to check
-   * if the app is in multi-window mode before using this.
-   *
-   * @param context Context
-   * @return Navigation bar height
-   */
-  public static int getNavigationBarHeight(Context context) {
-    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-    Display display = windowManager.getDefaultDisplay();
-    Point appUsableSize = getAppUsableScreenSize(display);
-    Point realScreenSize = getRealScreenSize(display);
-
-    // Navigation bar on the right.
-    if (appUsableSize.x < realScreenSize.x) {
-      return appUsableSize.y;
-    }
-
-    // Navigation bar at the bottom.
-    if (appUsableSize.y < realScreenSize.y) {
-      return realScreenSize.y - appUsableSize.y;
-    }
-
-    // Navigation bar is not present.
-    return 0;
-  }
-
-  private static Point getAppUsableScreenSize(Display display) {
-    Point size = new Point();
-    display.getSize(size);
-    return size;
-  }
-
-  private static Point getRealScreenSize(Display display) {
-    Point size = new Point();
-    display.getRealSize(size);
-
-    return size;
-  }
 }
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 70ba71b..2fe38c0 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -488,7 +488,6 @@
       }
       showDialpadRequest = DIALPAD_REQUEST_NONE;
     }
-    updateNavigationBar(isDialpadVisible());
 
     CallList.getInstance()
         .onInCallUiShown(getIntent().getBooleanExtra(IntentExtraNames.FOR_FULL_SCREEN, false));
@@ -807,10 +806,6 @@
       sensor.onDialpadVisible(show);
     }
     showDialpadRequest = DIALPAD_REQUEST_NONE;
-
-    // Note:  onInCallScreenDialpadVisibilityChange is called here to ensure that the dialpad FAB
-    // repositions itself.
-    getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(show);
   }
 
   private void showDialpadFragment() {
@@ -835,7 +830,7 @@
     dialpadFragmentManager.executePendingTransactions();
 
     Logger.get(this).logScreenView(ScreenEvent.Type.INCALL_DIALPAD, this);
-    updateNavigationBar(true /* isDialpadVisible */);
+    getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(true);
   }
 
   private void hideDialpadFragment() {
@@ -851,8 +846,8 @@
       transaction.commitAllowingStateLoss();
       dialpadFragmentManager.executePendingTransactions();
       dialpadFragment.setUserVisibleHint(false);
+      getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(false);
     }
-    updateNavigationBar(false /* isDialpadVisible */);
   }
 
   public boolean isDialpadVisible() {
@@ -1183,23 +1178,6 @@
     fragment.show(getSupportFragmentManager(), Tags.RTT_REQUEST_DIALOG);
   }
 
-  @Override
-  public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
-    super.onMultiWindowModeChanged(isInMultiWindowMode);
-    updateNavigationBar(isDialpadVisible());
-  }
-
-  private void updateNavigationBar(boolean isDialpadVisible) {
-    if (isInMultiWindowMode()) {
-      return;
-    }
-
-    View navigationBarBackground = getWindow().findViewById(R.id.navigation_bar_background);
-    if (navigationBarBackground != null) {
-      navigationBarBackground.setVisibility(isDialpadVisible ? View.VISIBLE : View.GONE);
-    }
-  }
-
   public void setAllowOrientationChange(boolean allowOrientationChange) {
     if (this.allowOrientationChange == allowOrientationChange) {
       return;
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 6f0ba60..85ae0bb 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -18,6 +18,7 @@
 
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
+import android.app.Activity;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -36,6 +37,7 @@
 import android.view.View.OnAttachStateChangeListener;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.view.Window;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
@@ -47,7 +49,6 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.multimedia.MultimediaData;
 import com.android.dialer.strictmode.StrictModeUtils;
-import com.android.dialer.util.ViewUtil;
 import com.android.dialer.widget.LockableViewPager;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
@@ -179,8 +180,6 @@
     }
     // TODO(a bug): Change to use corresponding phone type used for current call.
     phoneType = getContext().getSystemService(TelephonyManager.class).getPhoneType();
-    View space = view.findViewById(R.id.navigation_bar_background);
-    space.getLayoutParams().height = ViewUtil.getNavigationBarHeight(getContext());
 
     // Workaround to adjust padding for status bar and navigation bar since fitsSystemWindows
     // doesn't work well when switching with other fragments.
@@ -395,6 +394,11 @@
       // Update the Android Button's state to isShowing.
       inCallButtonGridFragment.onInCallScreenDialpadVisibilityChange(isShowing);
     }
+    Activity activity = getActivity();
+    Window window = activity.getWindow();
+    window.setNavigationBarColor(
+        activity.getColor(
+            isShowing ? android.R.color.background_dark : android.R.color.transparent));
   }
 
   @Override
diff --git a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
index 7eb9245..9cc599d 100644
--- a/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
+++ b/java/com/android/incallui/incall/impl/res/layout/frag_incall_voice.xml
@@ -125,11 +125,4 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_gravity="top"/>
-  <FrameLayout
-      android:id="@+id/navigation_bar_background"
-      android:layout_width="match_parent"
-      android:layout_height="0dp"
-      android:layout_gravity="bottom"
-      android:background="@android:color/background_dark"
-      android:visibility="gone"/>
 </FrameLayout>
