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

Commit a88ee6f5 authored by Jackal Guo's avatar Jackal Guo
Browse files

Adjust the logic of isImportantForAccessibility

According to the logic in #isImportantForAccessibility, SurfaceView
wouldn't be important by default. This results in the A11yNodeInfo
generated by this SurfaceView isn't important. If this SurfaceView
hosts an embedded hierarchy, the accessibility services may ignore
it. Hence, it couldn't compose the complete node tree.

Bug: 149266686
Test: a11y CTS & unit tests
Change-Id: I90d9f043339d2ad72607e8ae8c8dfc2c1b0f004d
parent 1c4cb8be
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1596,6 +1596,19 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
        info.addChild(wrapper.getLeashToken());
    }

    @Override
    public int getImportantForAccessibility() {
        final int mode = super.getImportantForAccessibility();
        // If developers explicitly set the important mode for it, don't change the mode.
        // Only change the mode to important when this SurfaceView isn't explicitly set and has
        // an embedded hierarchy.
        if (mRemoteAccessibilityEmbeddedConnection == null
                || mode != IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
            return mode;
        }
        return IMPORTANT_FOR_ACCESSIBILITY_YES;
    }

    private void initEmbeddedHierarchyForAccessibility(SurfaceControlViewHost.SurfacePackage p) {
        final IAccessibilityEmbeddedConnection connection = p.getAccessibilityEmbeddedConnection();
        final RemoteAccessibilityEmbeddedConnection wrapper =
+1 −2
Original line number Diff line number Diff line
@@ -13429,8 +13429,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @see #getImportantForAccessibility()
     */
    public boolean isImportantForAccessibility() {
        final int mode = (mPrivateFlags2 & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK)
                >> PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT;
        final int mode = getImportantForAccessibility();
        if (mode == IMPORTANT_FOR_ACCESSIBILITY_NO
                || mode == IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) {
            return false;