OSDN Git Service

Merge "Prevent a11y seeing behind tasks w/modal windows." into nyc-mr1-dev
authorPhil Weaver <pweaver@google.com>
Fri, 29 Jul 2016 19:16:37 +0000 (19:16 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Fri, 29 Jul 2016 19:16:38 +0000 (19:16 +0000)
services/core/java/com/android/server/wm/AccessibilityController.java

index 8be5dfb..d2d5c28 100644 (file)
@@ -1071,14 +1071,15 @@ final class AccessibilityController {
                                 Region.Op.REVERSE_DIFFERENCE);
                     }
 
-                    // We figured out what is touchable for the entire screen - done.
-                    if (unaccountedSpace.isEmpty()) {
-                        break;
-                    }
-
                     // If a window is modal it prevents other windows from being touched
                     if ((flags & (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                             | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)) == 0) {
+                        // Account for all space in the task, whether the windows in it are
+                        // touchable or not. The modal window blocks all touches from the task's
+                        // area.
+                        unaccountedSpace.op(windowState.getDisplayFrameLw(), unaccountedSpace,
+                                Region.Op.REVERSE_DIFFERENCE);
+
                         if (task != null) {
                             // If the window is associated with a particular task, we can skip the
                             // rest of the windows for that task.
@@ -1090,6 +1091,10 @@ final class AccessibilityController {
                             break;
                         }
                     }
+                    // We figured out what is touchable for the entire screen - done.
+                    if (unaccountedSpace.isEmpty()) {
+                        break;
+                    }
                 }
 
                 // Always report the focused window.