diff options
| author | 2023-05-23 10:07:54 +0000 | |
|---|---|---|
| committer | 2023-05-23 10:07:54 +0000 | |
| commit | 8a192565d05c3910b16d8b413e181e2cf474d41c (patch) | |
| tree | a2e03dffb90e94418d9c9d4829fe0fc8abb4c2f7 | |
| parent | 4b4b8d7b085d669426c0d2f69fc9e20a080e4095 (diff) | |
| parent | a17835e7f877c16f69627fb3a661a314d1b5b153 (diff) | |
Merge "Update nav bar insets when in extractView" into udc-dev
| -rw-r--r-- | core/java/android/inputmethodservice/NavigationBarController.java | 100 |
1 files changed, 52 insertions, 48 deletions
diff --git a/core/java/android/inputmethodservice/NavigationBarController.java b/core/java/android/inputmethodservice/NavigationBarController.java index 69105016e0ea..78388efe98c7 100644 --- a/core/java/android/inputmethodservice/NavigationBarController.java +++ b/core/java/android/inputmethodservice/NavigationBarController.java @@ -246,8 +246,7 @@ final class NavigationBarController { @Override public void updateTouchableInsets(@NonNull InputMethodService.Insets originalInsets, @NonNull ViewTreeObserver.InternalInsetsInfo dest) { - if (!mImeDrawsImeNavBar || mNavigationBarFrame == null - || mService.isExtractViewShown()) { + if (!mImeDrawsImeNavBar || mNavigationBarFrame == null) { return; } @@ -255,53 +254,58 @@ final class NavigationBarController { if (systemInsets != null) { final Window window = mService.mWindow.getWindow(); final View decor = window.getDecorView(); - Region touchableRegion = null; - final View inputFrame = mService.mInputFrame; - switch (originalInsets.touchableInsets) { - case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: - if (inputFrame.getVisibility() == View.VISIBLE) { - inputFrame.getLocationInWindow(mTempPos); - mTempRect.set(mTempPos[0], mTempPos[1], - mTempPos[0] + inputFrame.getWidth(), - mTempPos[1] + inputFrame.getHeight()); - touchableRegion = new Region(mTempRect); - } - break; - case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: - if (inputFrame.getVisibility() == View.VISIBLE) { - inputFrame.getLocationInWindow(mTempPos); - mTempRect.set(mTempPos[0], originalInsets.contentTopInsets, - mTempPos[0] + inputFrame.getWidth() , - mTempPos[1] + inputFrame.getHeight()); - touchableRegion = new Region(mTempRect); - } - break; - case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: - if (inputFrame.getVisibility() == View.VISIBLE) { - inputFrame.getLocationInWindow(mTempPos); - mTempRect.set(mTempPos[0], originalInsets.visibleTopInsets, - mTempPos[0] + inputFrame.getWidth(), - mTempPos[1] + inputFrame.getHeight()); - touchableRegion = new Region(mTempRect); - } - break; - case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION: - touchableRegion = new Region(); - touchableRegion.set(originalInsets.touchableRegion); - break; - } - // Hereafter "mTempRect" means a navigation bar rect. - mTempRect.set(decor.getLeft(), decor.getBottom() - systemInsets.bottom, - decor.getRight(), decor.getBottom()); - if (touchableRegion == null) { - touchableRegion = new Region(mTempRect); - } else { - touchableRegion.union(mTempRect); - } - dest.touchableRegion.set(touchableRegion); - dest.setTouchableInsets( - ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); + // If the extract view is shown, everything is touchable, so no need to update + // touchable insets, but we still update normal insets below. + if (!mService.isExtractViewShown()) { + Region touchableRegion = null; + final View inputFrame = mService.mInputFrame; + switch (originalInsets.touchableInsets) { + case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: + if (inputFrame.getVisibility() == View.VISIBLE) { + inputFrame.getLocationInWindow(mTempPos); + mTempRect.set(mTempPos[0], mTempPos[1], + mTempPos[0] + inputFrame.getWidth(), + mTempPos[1] + inputFrame.getHeight()); + touchableRegion = new Region(mTempRect); + } + break; + case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: + if (inputFrame.getVisibility() == View.VISIBLE) { + inputFrame.getLocationInWindow(mTempPos); + mTempRect.set(mTempPos[0], originalInsets.contentTopInsets, + mTempPos[0] + inputFrame.getWidth(), + mTempPos[1] + inputFrame.getHeight()); + touchableRegion = new Region(mTempRect); + } + break; + case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: + if (inputFrame.getVisibility() == View.VISIBLE) { + inputFrame.getLocationInWindow(mTempPos); + mTempRect.set(mTempPos[0], originalInsets.visibleTopInsets, + mTempPos[0] + inputFrame.getWidth(), + mTempPos[1] + inputFrame.getHeight()); + touchableRegion = new Region(mTempRect); + } + break; + case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION: + touchableRegion = new Region(); + touchableRegion.set(originalInsets.touchableRegion); + break; + } + // Hereafter "mTempRect" means a navigation bar rect. + mTempRect.set(decor.getLeft(), decor.getBottom() - systemInsets.bottom, + decor.getRight(), decor.getBottom()); + if (touchableRegion == null) { + touchableRegion = new Region(mTempRect); + } else { + touchableRegion.union(mTempRect); + } + + dest.touchableRegion.set(touchableRegion); + dest.setTouchableInsets( + ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); + } // TODO(b/215443343): See if we can use View#OnLayoutChangeListener(). // TODO(b/215443343): See if we can replace DecorView#mNavigationColorViewState.view |