Java Code Examples for android.view.DisplayCutout#getSafeInsetRight()

The following examples show how to use android.view.DisplayCutout#getSafeInsetRight() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: NotchUtils.java    From ImmersionBar with Apache License 2.0 5 votes vote down vote up
/**
 * 获得刘海屏高度
 * Notch height int.
 *
 * @param activity the activity
 * @return the int
 */
public static int getNotchHeight(Activity activity) {
    int notchHeight = 0;
    int statusBarHeight = ImmersionBar.getStatusBarHeight(activity);
    DisplayCutout displayCutout = getDisplayCutout(activity);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && displayCutout != null) {
        if (activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            notchHeight = displayCutout.getSafeInsetTop();
        } else {
            if (displayCutout.getSafeInsetLeft() == 0) {
                notchHeight = displayCutout.getSafeInsetRight();
            } else {
                notchHeight = displayCutout.getSafeInsetLeft();
            }
        }
    } else {
        if (hasNotchAtXiaoMi(activity)) {
            notchHeight = getXiaoMiNotchHeight(activity);
        }
        if (hasNotchAtHuaWei(activity)) {
            notchHeight = getHuaWeiNotchSize(activity)[1];
        }
        if (hasNotchAtVIVO(activity)) {
            notchHeight = dp2px(activity, 32);
            if (notchHeight < statusBarHeight) {
                notchHeight = statusBarHeight;
            }
        }
        if (hasNotchAtOPPO(activity)) {
            notchHeight = 80;
            if (notchHeight < statusBarHeight) {
                notchHeight = statusBarHeight;
            }
        }
    }
    return notchHeight;
}
 
Example 2
Source File: NotchUtils.java    From MNImageBrowser with GNU General Public License v3.0 5 votes vote down vote up
/**
 * 获得刘海屏高度
 * Notch height int.
 *
 * @param activity the activity
 * @return the int
 */
public static int getNotchHeight(Activity activity) {
    int notchHeight = 0;
    int statusBarHeight = ImmersionBar.getStatusBarHeight(activity);
    DisplayCutout displayCutout = getDisplayCutout(activity);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && displayCutout != null) {
        if (activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            notchHeight = displayCutout.getSafeInsetTop();
        } else {
            if (displayCutout.getSafeInsetLeft() == 0) {
                notchHeight = displayCutout.getSafeInsetRight();
            } else {
                notchHeight = displayCutout.getSafeInsetLeft();
            }
        }
    } else {
        if (hasNotchAtXiaoMi(activity)) {
            notchHeight = getXiaoMiNotchHeight(activity);
        }
        if (hasNotchAtHuaWei(activity)) {
            notchHeight = getHuaWeiNotchSize(activity)[1];
        }
        if (hasNotchAtVIVO(activity)) {
            notchHeight = dp2px(activity, 32);
            if (notchHeight < statusBarHeight) {
                notchHeight = statusBarHeight;
            }
        }
        if (hasNotchAtOPPO(activity)) {
            notchHeight = 80;
            if (notchHeight < statusBarHeight) {
                notchHeight = statusBarHeight;
            }
        }
    }
    return notchHeight;
}
 
Example 3
Source File: DisplayFrames.java    From android_9.0.0_r45 with Apache License 2.0 4 votes vote down vote up
public void onBeginLayout() {
    switch (mRotation) {
        case ROTATION_90:
            mRotatedDisplayInfoOverscan.left = mDisplayInfoOverscan.top;
            mRotatedDisplayInfoOverscan.top = mDisplayInfoOverscan.right;
            mRotatedDisplayInfoOverscan.right = mDisplayInfoOverscan.bottom;
            mRotatedDisplayInfoOverscan.bottom = mDisplayInfoOverscan.left;
            break;
        case ROTATION_180:
            mRotatedDisplayInfoOverscan.left = mDisplayInfoOverscan.right;
            mRotatedDisplayInfoOverscan.top = mDisplayInfoOverscan.bottom;
            mRotatedDisplayInfoOverscan.right = mDisplayInfoOverscan.left;
            mRotatedDisplayInfoOverscan.bottom = mDisplayInfoOverscan.top;
            break;
        case ROTATION_270:
            mRotatedDisplayInfoOverscan.left = mDisplayInfoOverscan.bottom;
            mRotatedDisplayInfoOverscan.top = mDisplayInfoOverscan.left;
            mRotatedDisplayInfoOverscan.right = mDisplayInfoOverscan.top;
            mRotatedDisplayInfoOverscan.bottom = mDisplayInfoOverscan.right;
            break;
        default:
            mRotatedDisplayInfoOverscan.set(mDisplayInfoOverscan);
            break;
    }

    mRestrictedOverscan.set(0, 0, mDisplayWidth, mDisplayHeight);
    mOverscan.set(mRestrictedOverscan);
    mSystem.set(mRestrictedOverscan);
    mUnrestricted.set(mRotatedDisplayInfoOverscan);
    mUnrestricted.right = mDisplayWidth - mUnrestricted.right;
    mUnrestricted.bottom = mDisplayHeight - mUnrestricted.bottom;
    mRestricted.set(mUnrestricted);
    mDock.set(mUnrestricted);
    mContent.set(mUnrestricted);
    mVoiceContent.set(mUnrestricted);
    mStable.set(mUnrestricted);
    mStableFullscreen.set(mUnrestricted);
    mCurrent.set(mUnrestricted);

    mDisplayCutout = mDisplayInfoCutout;
    mDisplayCutoutSafe.set(Integer.MIN_VALUE, Integer.MIN_VALUE,
            Integer.MAX_VALUE, Integer.MAX_VALUE);
    if (!mDisplayCutout.getDisplayCutout().isEmpty()) {
        final DisplayCutout c = mDisplayCutout.getDisplayCutout();
        if (c.getSafeInsetLeft() > 0) {
            mDisplayCutoutSafe.left = mRestrictedOverscan.left + c.getSafeInsetLeft();
        }
        if (c.getSafeInsetTop() > 0) {
            mDisplayCutoutSafe.top = mRestrictedOverscan.top + c.getSafeInsetTop();
        }
        if (c.getSafeInsetRight() > 0) {
            mDisplayCutoutSafe.right = mRestrictedOverscan.right - c.getSafeInsetRight();
        }
        if (c.getSafeInsetBottom() > 0) {
            mDisplayCutoutSafe.bottom = mRestrictedOverscan.bottom - c.getSafeInsetBottom();
        }
    }
}
 
Example 4
Source File: OverlayController.java    From talkback with Apache License 2.0 4 votes vote down vote up
@VisibleForTesting
void adjustGlobalMenuButtonPosition(
    @Nullable DisplayCutout displayCutout, List<Rect> cutoutRects) {
  LayoutParams globalMenuButtonParams = globalMenuButtonOverlay.getParams();
  if (displayCutout == null) {
    globalMenuButtonParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
  } else {
    Point screenSize = ScreenUtils.getRealScreenSize(getContext());
    View menuButton = globalMenuButtonOverlay.findViewById(R.id.global_menu_button);
    int menuButtonWidth = menuButton.getWidth();
    int leftOfCenteredMenuButton = (screenSize.x / 2) - (menuButtonWidth / 2);
    Rect centeredMenuButton =
        new Rect(
            leftOfCenteredMenuButton,
            0,
            leftOfCenteredMenuButton + menuButtonWidth,
            menuButton.getHeight());

    // Clear the margins.
    MarginLayoutParams menuButtonMarginParams = (MarginLayoutParams) menuButton.getLayoutParams();
    menuButtonMarginParams.setMargins(0, 0, 0, 0);

    // Find the cutout that intersects the centered menu button. If there's space to the right of
    // the cutout, move there. Otherwise if there's space to the left, move there. If neither side
    // has space, move just below the cutout.
    int safeInsetLeft = displayCutout.getSafeInsetLeft();
    int safeInsetRight = displayCutout.getSafeInsetRight();
    boolean cutoutIntersectsCenteredMenuButton = false;
    for (Rect cutoutRect : cutoutRects) {
      if (Rect.intersects(centeredMenuButton, cutoutRect)) {
        cutoutIntersectsCenteredMenuButton = true;
        if ((screenSize.x - safeInsetRight - cutoutRect.right) > menuButtonWidth) {
          globalMenuButtonParams.gravity = Gravity.TOP | Gravity.END;
          menuButtonMarginParams.rightMargin = screenSize.x - cutoutRect.right - menuButtonWidth;
        } else if ((cutoutRect.left - safeInsetLeft) > menuButtonWidth) {
          globalMenuButtonParams.gravity = Gravity.TOP | Gravity.START;
          menuButtonMarginParams.leftMargin = cutoutRect.left - menuButtonWidth;
        } else {
          globalMenuButtonParams.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
          menuButtonMarginParams.topMargin = displayCutout.getSafeInsetTop();
        }
      }
    }
    if (!cutoutIntersectsCenteredMenuButton) {
      globalMenuButtonParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
    }
  }
  globalMenuButtonOverlay.setParams(globalMenuButtonParams);
}