Set navigation bar color when dialpad is visible.

Instead of fake a black bar on voice incall UI, the more reliable way is to set
navigation bar color.

Bug: 79902234
Test: manual
PiperOrigin-RevId: 197475300
Change-Id: I96085700e633570ef385386cdf366d758e50a6e2
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>