Always show window divider to accessibility

Accessibility typically can only see windows that the user
can interact with. This CL carves out the split-screen
divider as an exception. The reason is that services can
use the presence of the split-screen divider to know if the
device is in split-screen mode. But the divider becomes
non-touchable if an IME appears in split-screen mode.

Services like TalkBack need some way to tell for sure that
they are in split-screen mode. Absent a new API for them
to query, simply making sure they can see the divider seems
like the simplest way to provide this.

Bug: 28768841
Test: A11y service CTS
Change-Id: I92b89c842689e4c4c69a732490150ca032de46cc
This commit is contained in:
Phil Weaver
2017-12-18 17:09:32 -08:00
parent be8a014175
commit b2779534c8

View File

@@ -16,6 +16,7 @@
package com.android.server.wm;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
@@ -1068,8 +1069,11 @@ final class AccessibilityController {
continue;
}
// If the window is not touchable - ignore.
if ((flags & WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) != 0) {
// Ignore non-touchable windows, except the split-screen divider, which is
// occasionally non-touchable but still useful for identifying split-screen
// mode.
if (((flags & WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) != 0)
&& (windowState.mAttrs.type != TYPE_DOCK_DIVIDER)) {
continue;
}