Merge "Ensure nav bar is not touchable when the IME is handling back" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-02-18 21:12:46 +00:00
committed by Android (Google) Code Review

View File

@@ -274,11 +274,21 @@ public class NavigationBarView extends FrameLayout implements
};
private final OnComputeInternalInsetsListener mOnComputeInternalInsetsListener = info -> {
// When the nav bar is in 2-button or 3-button mode, or when IME is visible in fully
// gestural mode, the entire nav bar should be touchable.
// When the nav bar is in 2-button or 3-button mode, or when the back button is force-shown
// while in gesture nav in SUW, the entire nav bar should be touchable.
if (!mEdgeBackGestureHandler.isHandlingGestures()) {
info.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_FRAME);
return;
// We're in 2/3 button mode OR back button force-shown in SUW
if (!mImeVisible) {
// IME not showing, take all touches
info.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_FRAME);
return;
}
if (!isImeRenderingNavButtons()) {
// IME showing but not drawing any buttons, take all touches
info.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_FRAME);
return;
}
}
// When in gestural and the IME is showing, don't use the nearest region since it will take
@@ -775,14 +785,10 @@ public class NavigationBarView extends FrameLayout implements
updateRecentsIcon();
boolean isImeRenderingNavButtons = mImeDrawsImeNavBar
&& mImeCanRenderGesturalNavButtons
&& (mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) != 0;
// Update IME button visibility, a11y and rotate button always overrides the appearance
boolean disableImeSwitcher =
(mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SWITCHER_SHOWN) == 0
|| isImeRenderingNavButtons;
|| isImeRenderingNavButtons();
mContextualButtonGroup.setButtonVisibility(R.id.ime_switcher, !disableImeSwitcher);
mBarTransitions.reapplyDarkIntensity();
@@ -799,7 +805,7 @@ public class NavigationBarView extends FrameLayout implements
boolean disableBack = !useAltBack && (mEdgeBackGestureHandler.isHandlingGestures()
|| ((mDisabledFlags & View.STATUS_BAR_DISABLE_BACK) != 0))
|| isImeRenderingNavButtons;
|| isImeRenderingNavButtons();
// When screen pinning, don't hide back and home when connected service or back and
// recents buttons when disconnected from launcher service in screen pinning mode,
@@ -832,6 +838,15 @@ public class NavigationBarView extends FrameLayout implements
notifyActiveTouchRegions();
}
/**
* Returns whether the IME is currently visible and drawing the nav buttons.
*/
private boolean isImeRenderingNavButtons() {
return mImeDrawsImeNavBar
&& mImeCanRenderGesturalNavButtons
&& (mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) != 0;
}
@VisibleForTesting
boolean isRecentsButtonDisabled() {
return mUseCarModeUi || !isOverviewEnabled()