PiP: Update accessibility window as menu shows/hides.
When calculcating accessibility regions w/ shell root, currently since shell root has no information on the child views' alpha, visibility, etc, it is always detected as active by the a11y controller. Update the accessibility region for PIP as menu shows and hides so that the controller can take this into consideration. Bug: 192524653 Test: Switch access to PIP when menu shows - able to navigate around menu items. Switch Access to PIP when menu is gone - able to select PIP itself. Change-Id: I7d5649ecbf98751a117c58ac8127584bc3196910
This commit is contained in:
@@ -133,6 +133,18 @@ public class SystemWindows {
|
||||
root.relayout((WindowManager.LayoutParams) params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the accessibility window for the given {@param shellRootLayer}.
|
||||
*/
|
||||
public void setShellRootAccessibilityWindow(int displayId,
|
||||
@WindowManager.ShellRootLayer int shellRootLayer, View view) {
|
||||
PerDisplay pd = mPerDisplay.get(displayId);
|
||||
if (pd == null) {
|
||||
return;
|
||||
}
|
||||
pd.setShellRootAccessibilityWindow(shellRootLayer, view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the touchable region of a view's window. This will be cropped to the window size.
|
||||
* @param view
|
||||
@@ -202,15 +214,9 @@ public class SystemWindows {
|
||||
attrs.flags |= FLAG_HARDWARE_ACCELERATED;
|
||||
viewRoot.setView(view, attrs);
|
||||
mViewRoots.put(view, viewRoot);
|
||||
|
||||
try {
|
||||
mWmService.setShellRootAccessibilityWindow(mDisplayId, shellRootLayer,
|
||||
viewRoot.getWindowToken());
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Error setting accessibility window for " + mDisplayId + ":"
|
||||
+ shellRootLayer, e);
|
||||
}
|
||||
setShellRootAccessibilityWindow(shellRootLayer, view);
|
||||
}
|
||||
|
||||
SysUiWindowManager addRoot(@WindowManager.ShellRootLayer int shellRootLayer) {
|
||||
SysUiWindowManager wwm = mWwms.get(shellRootLayer);
|
||||
if (wwm != null) {
|
||||
@@ -240,6 +246,21 @@ public class SystemWindows {
|
||||
return wwm.mContainerWindow;
|
||||
}
|
||||
|
||||
void setShellRootAccessibilityWindow(@WindowManager.ShellRootLayer int shellRootLayer,
|
||||
View view) {
|
||||
SysUiWindowManager wwm = mWwms.get(shellRootLayer);
|
||||
if (wwm == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
mWmService.setShellRootAccessibilityWindow(mDisplayId, shellRootLayer,
|
||||
view != null ? mViewRoots.get(view).getWindowToken() : null);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Error setting accessibility window for " + mDisplayId + ":"
|
||||
+ shellRootLayer, e);
|
||||
}
|
||||
}
|
||||
|
||||
void updateConfiguration(Configuration configuration) {
|
||||
for (int i = 0; i < mWwms.size(); ++i) {
|
||||
mWwms.valueAt(i).updateConfiguration(configuration);
|
||||
|
||||
@@ -524,6 +524,15 @@ public class PhonePipMenuController implements PipMenuController {
|
||||
mListeners.forEach(l -> l.onPipMenuStateChangeFinish(menuState));
|
||||
}
|
||||
mMenuState = menuState;
|
||||
switch (mMenuState) {
|
||||
case MENU_STATE_NONE:
|
||||
mSystemWindows.setShellRootAccessibilityWindow(0, SHELL_ROOT_LAYER_PIP, null);
|
||||
break;
|
||||
default:
|
||||
mSystemWindows.setShellRootAccessibilityWindow(0, SHELL_ROOT_LAYER_PIP,
|
||||
mPipMenuView);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user