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

Commit c77c0f03 authored by Riley Jones's avatar Riley Jones
Browse files

Changing A11yInteractionController to return null on unimportant root nodes

Flag: android.view.accessibility.ignore_unimportant_root
Test: atest AccessibilityInteractionController
Bug: 407099631
Change-Id: Ibcc7009ba40abbd209053415bec849cdcb5e340c
parent 1cd751d8
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -963,12 +963,24 @@ public final class AccessibilityInteractionController {
        }
    }

    private View getRootView() {
    /**
     * @hide
     */
    @VisibleForTesting
    public View getRootView() {
        if (!isVisibleToAccessibilityService(mViewRootImpl.mView)) {
            return null;
        }
        if (Flags.ignoreUnimportantRoot()) {
            if (mViewRootImpl.mView == null || !mViewRootImpl.mView.includeForAccessibility()) {
                return null;
            } else {
                return mViewRootImpl.mView;
            }
        } else {
            return mViewRootImpl.mView;
        }
    }

    private void setAccessibilityFetchFlags(int flags) {
        mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
+7 −0
Original line number Diff line number Diff line
@@ -181,6 +181,13 @@ flag {
    bug: "302376158"
}

flag {
    name: "ignore_unimportant_root"
    namespace: "accessibility"
    description: "findViewByAccessibilityId will return null if the id matches the root but the root is unimportant."
    bug: "407099631"
}

flag {
    name: "indeterminate_range_info"
    namespace: "accessibility"
+21 −0
Original line number Diff line number Diff line
@@ -27,6 +27,9 @@ import android.app.UiAutomation;
import android.graphics.Rect;
import android.os.Process;
import android.os.SystemClock;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -64,6 +67,8 @@ public class AccessibilityInteractionControllerTest {
    @Rule
    public ActivityTestRule<AccessibilityTestActivity> mActivityRule = new ActivityTestRule<>(
            AccessibilityTestActivity.class, false, false);
    @Rule
    public SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private AccessibilityInteractionController mAccessibilityInteractionController;
    private ViewRootImpl mViewRootImpl;
@@ -153,6 +158,22 @@ public class AccessibilityInteractionControllerTest {
                vri.getWindowFlags(), Process.myUid(), vri.getSurfaceControl());
    }

    @Test
    @EnableFlags(android.view.accessibility.Flags.FLAG_IGNORE_UNIMPORTANT_ROOT)
    public void getRootView_isUnimportant_returnsNull() {
        mViewRootImpl.getView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);

        assertThat(mAccessibilityInteractionController.getRootView()).isNull();
    }

    @Test
    @DisableFlags(android.view.accessibility.Flags.FLAG_IGNORE_UNIMPORTANT_ROOT)
    public void getRootView_isUnimportant_returnsNotNull() {
        mViewRootImpl.getView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);

        assertThat(mAccessibilityInteractionController.getRootView()).isNotNull();
    }

    private void launchActivity() {
        final Object waitObject = new Object();
        final int[] location = new int[2];