summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Kao <jackykao@google.com> 2020-04-14 03:38:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-04-14 03:38:43 +0000
commit705ebb0946ca0629882ade11818fd979209b8377 (patch)
treec57be38e016ca94e47fa851ebdf8d3e01df5dc04
parent4947356664460557c196b6efbf6f7f64f41031f4 (diff)
parentfd3b4a8c6940ad48c0137e76d4aa39adacd5720e (diff)
Merge "Fix more windows at framework on system gesture mode" into rvc-dev
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 68224b59a287..75d6a090bd3d 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -16,6 +16,7 @@
package com.android.server.wm;
+import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
@@ -48,6 +49,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.Display;
+import android.view.InsetsState;
import android.view.MagnificationSpec;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
@@ -1203,6 +1205,17 @@ final class AccessibilityController {
updateUnaccountedSpace(windowState, regionInScreen, unaccountedSpace,
skipRemainingWindowsForTasks);
focusedWindowAdded |= windowState.isFocused();
+ } else if (isUntouchableNavigationBar(windowState)) {
+ // If this widow is navigation bar without touchable region, accounting the
+ // 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.
+ final InsetsState insetsState =
+ dc.getInsetsStateController().getRawInsetsState();
+ final Rect displayFrame =
+ insetsState.getSource(ITYPE_NAVIGATION_BAR).getFrame();
+ unaccountedSpace.op(displayFrame, unaccountedSpace,
+ Region.Op.REVERSE_DIFFERENCE);
}
if (unaccountedSpace.isEmpty() && focusedWindowAdded) {
@@ -1281,6 +1294,18 @@ final class AccessibilityController {
return false;
}
+ private boolean isUntouchableNavigationBar(WindowState windowState) {
+ if (windowState.mAttrs.type != WindowManager.LayoutParams.TYPE_NAVIGATION_BAR) {
+ return false;
+ }
+
+ // Gets the touchable region.
+ Region touchableRegion = mTempRegion1;
+ windowState.getTouchableRegion(touchableRegion);
+
+ return touchableRegion.isEmpty();
+ }
+
private void updateUnaccountedSpace(WindowState windowState, Region regionInScreen,
Region unaccountedSpace, HashSet<Integer> skipRemainingWindowsForTasks) {
if (windowState.mAttrs.type