Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d48bec9b authored by Ben Lin's avatar Ben Lin
Browse files

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
parent 73ffe99b
Loading
Loading
Loading
Loading
+29 −8
Original line number Diff line number Diff line
@@ -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);
+9 −0
Original line number Diff line number Diff line
@@ -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;
        }
    }

    /**