diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index 65127e4a3b31e..cd3e258abd4df 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -960,7 +960,7 @@ final class AccessibilityController { // navigation bar insets into nonMagnifiedBounds. It happens when // navigation mode is gestural. if (isUntouchableNavigationBar(windowState, mTempRegion3)) { - final Rect navBarInsets = getNavBarInsets(mDisplayContent); + final Rect navBarInsets = getSystemBarInsetsFrame(windowState); nonMagnifiedBounds.op(navBarInsets, Region.Op.UNION); availableBounds.op(navBarInsets, Region.Op.DIFFERENCE); } @@ -1425,10 +1425,12 @@ final class AccessibilityController { return touchableRegion.isEmpty(); } - static Rect getNavBarInsets(DisplayContent displayContent) { - final InsetsSource source = displayContent.getInsetsStateController().getRawInsetsState() - .peekSource(ITYPE_NAVIGATION_BAR); - return source != null ? source.getFrame() : EMPTY_RECT; + static Rect getSystemBarInsetsFrame(WindowState win) { + if (win == null) { + return EMPTY_RECT; + } + final InsetsSourceProvider provider = win.getControllableInsetProvider(); + return provider != null ? provider.getSource().getFrame() : EMPTY_RECT; } /** @@ -1581,7 +1583,10 @@ final class AccessibilityController { // region of navigation bar inset because all touch events from this region // would be received by launcher, i.e. this region is a un-touchable one // for the application. - unaccountedSpace.op(getNavBarInsets(dc), unaccountedSpace, + unaccountedSpace.op( + getSystemBarInsetsFrame( + mService.mWindowMap.get(a11yWindow.getWindowInfo().token)), + unaccountedSpace, Region.Op.REVERSE_DIFFERENCE); }