diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 13b9a552d75c..37c79ccff927 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -124,7 +124,8 @@ public class NavigationBarView extends FrameLayout implements int mNavigationIconHints = 0; private int mNavBarMode; - private final Region mActiveRegion = new Region(); + private final Region mTmpRegion = new Region(); + private final int[] mTmpPosition = new int[2]; private Rect mTmpBounds = new Rect(); private KeyButtonDrawable mBackIcon; @@ -266,24 +267,14 @@ 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. - if (!mEdgeBackGestureHandler.isHandlingGestures() || mImeVisible) { + if (!mEdgeBackGestureHandler.isHandlingGestures()) { info.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); return; } info.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_REGION); - ButtonDispatcher imeSwitchButton = getImeSwitchButton(); - if (imeSwitchButton.getVisibility() == VISIBLE) { - // If the IME is not up, but the ime switch button is visible, then make sure that - // button is touchable - int[] loc = new int[2]; - View buttonView = imeSwitchButton.getCurrentView(); - buttonView.getLocationInWindow(loc); - info.touchableRegion.set(loc[0], loc[1], loc[0] + buttonView.getWidth(), - loc[1] + buttonView.getHeight()); - return; - } - info.touchableRegion.setEmpty(); + info.touchableRegion.set(getButtonLocations(false /* includeFloatingRotationButton */, + false /* inScreen */)); }; private final Consumer<Boolean> mRotationButtonListener = (visible) -> { @@ -956,30 +947,44 @@ public class NavigationBarView extends FrameLayout implements * Notifies the overview service of the active touch regions. */ public void notifyActiveTouchRegions() { - mActiveRegion.setEmpty(); - updateButtonLocation(getBackButton()); - updateButtonLocation(getHomeButton()); - updateButtonLocation(getRecentsButton()); - updateButtonLocation(getImeSwitchButton()); - updateButtonLocation(getAccessibilityButton()); - if (mFloatingRotationButton.isVisible()) { - View floatingRotationView = mFloatingRotationButton.getCurrentView(); - floatingRotationView.getBoundsOnScreen(mTmpBounds); - mActiveRegion.op(mTmpBounds, Op.UNION); + mOverviewProxyService.onActiveNavBarRegionChanges( + getButtonLocations(true /* includeFloatingRotationButton */, true /* inScreen */)); + } + + private Region getButtonLocations(boolean includeFloatingRotationButton, + boolean inScreenSpace) { + mTmpRegion.setEmpty(); + updateButtonLocation(getBackButton(), inScreenSpace); + updateButtonLocation(getHomeButton(), inScreenSpace); + updateButtonLocation(getRecentsButton(), inScreenSpace); + updateButtonLocation(getImeSwitchButton(), inScreenSpace); + updateButtonLocation(getAccessibilityButton(), inScreenSpace); + if (includeFloatingRotationButton && mFloatingRotationButton.isVisible()) { + updateButtonLocation(mFloatingRotationButton.getCurrentView(), inScreenSpace); } else { - updateButtonLocation(getRotateSuggestionButton()); + updateButtonLocation(getRotateSuggestionButton(), inScreenSpace); } - mOverviewProxyService.onActiveNavBarRegionChanges(mActiveRegion); + return mTmpRegion; } - private void updateButtonLocation(ButtonDispatcher button) { + private void updateButtonLocation(ButtonDispatcher button, boolean inScreenSpace) { View view = button.getCurrentView(); if (view == null || !button.isVisible()) { return; } + updateButtonLocation(view, inScreenSpace); + } - view.getBoundsOnScreen(mTmpBounds); - mActiveRegion.op(mTmpBounds, Op.UNION); + private void updateButtonLocation(View view, boolean inScreenSpace) { + if (inScreenSpace) { + view.getBoundsOnScreen(mTmpBounds); + } else { + view.getLocationInWindow(mTmpPosition); + mTmpBounds.set(mTmpPosition[0], mTmpPosition[1], + mTmpPosition[0] + view.getWidth(), + mTmpPosition[1] + view.getHeight()); + } + mTmpRegion.op(mTmpBounds, Op.UNION); } private void updateOrientationViews() { |