Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73ed613c authored by wangqi's avatar wangqi Committed by Copybara-Service
Browse files

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
parent 0a41f3c3
Loading
Loading
Loading
Loading
+0 −44
Original line number Diff line number Diff line
@@ -19,19 +19,16 @@ package com.android.dialer.util;
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 @@ public class ViewUtil {
    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;
  }
}
+2 −24
Original line number Diff line number Diff line
@@ -488,7 +488,6 @@ public class InCallActivity extends TransactionSafeFragmentActivity
      }
      showDialpadRequest = DIALPAD_REQUEST_NONE;
    }
    updateNavigationBar(isDialpadVisible());

    CallList.getInstance()
        .onInCallUiShown(getIntent().getBooleanExtra(IntentExtraNames.FOR_FULL_SCREEN, false));
@@ -807,10 +806,6 @@ public class InCallActivity extends TransactionSafeFragmentActivity
      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 @@ public class InCallActivity extends TransactionSafeFragmentActivity
    dialpadFragmentManager.executePendingTransactions();

    Logger.get(this).logScreenView(ScreenEvent.Type.INCALL_DIALPAD, this);
    updateNavigationBar(true /* isDialpadVisible */);
    getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(true);
  }

  private void hideDialpadFragment() {
@@ -851,8 +846,8 @@ public class InCallActivity extends TransactionSafeFragmentActivity
      transaction.commitAllowingStateLoss();
      dialpadFragmentManager.executePendingTransactions();
      dialpadFragment.setUserVisibleHint(false);
      getInCallOrRttCallScreen().onInCallScreenDialpadVisibilityChange(false);
    }
    updateNavigationBar(false /* isDialpadVisible */);
  }

  public boolean isDialpadVisible() {
@@ -1183,23 +1178,6 @@ public class InCallActivity extends TransactionSafeFragmentActivity
    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;
+7 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.incallui.incall.impl;

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;
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.DialerImpression;
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 @@ public class InCallFragment extends Fragment
    }
    // 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 @@ public class InCallFragment extends Fragment
      // 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
+0 −7
Original line number Diff line number Diff line
@@ -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>