Merge "Fix touchable region calculation in NavigationBarController (2nd)" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-04-28 02:17:15 +00:00
committed by Android (Google) Code Review

View File

@@ -152,6 +152,7 @@ final class NavigationBarController {
private boolean mDrawLegacyNavigationBarBackground; private boolean mDrawLegacyNavigationBarBackground;
private final Rect mTempRect = new Rect(); private final Rect mTempRect = new Rect();
private final int[] mTempPos = new int[2];
Impl(@NonNull InputMethodService inputMethodService) { Impl(@NonNull InputMethodService inputMethodService) {
mService = inputMethodService; mService = inputMethodService;
@@ -259,21 +260,28 @@ final class NavigationBarController {
switch (originalInsets.touchableInsets) { switch (originalInsets.touchableInsets) {
case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME:
if (inputFrame.getVisibility() == View.VISIBLE) { if (inputFrame.getVisibility() == View.VISIBLE) {
inputFrame.getBoundsOnScreen(mTempRect); inputFrame.getLocationInWindow(mTempPos);
mTempRect.set(mTempPos[0], mTempPos[1],
mTempPos[0] + inputFrame.getWidth(),
mTempPos[1] + inputFrame.getHeight());
touchableRegion = new Region(mTempRect); touchableRegion = new Region(mTempRect);
} }
break; break;
case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT:
if (inputFrame.getVisibility() == View.VISIBLE) { if (inputFrame.getVisibility() == View.VISIBLE) {
inputFrame.getBoundsOnScreen(mTempRect); inputFrame.getLocationInWindow(mTempPos);
mTempRect.top = originalInsets.contentTopInsets; mTempRect.set(mTempPos[0], originalInsets.contentTopInsets,
mTempPos[0] + inputFrame.getWidth() ,
mTempPos[1] + inputFrame.getHeight());
touchableRegion = new Region(mTempRect); touchableRegion = new Region(mTempRect);
} }
break; break;
case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE:
if (inputFrame.getVisibility() == View.VISIBLE) { if (inputFrame.getVisibility() == View.VISIBLE) {
inputFrame.getBoundsOnScreen(mTempRect); inputFrame.getLocationInWindow(mTempPos);
mTempRect.top = originalInsets.visibleTopInsets; mTempRect.set(mTempPos[0], originalInsets.visibleTopInsets,
mTempPos[0] + inputFrame.getWidth(),
mTempPos[1] + inputFrame.getHeight());
touchableRegion = new Region(mTempRect); touchableRegion = new Region(mTempRect);
} }
break; break;