summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java35
1 files changed, 25 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 6ea7aec7ba0c..80a7a4ae2f6a 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -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()