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

Commit 0967f330 authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "Changing A11yInteractionController to return null on unimportant root nodes" into main

parents 52319d5b c77c0f03
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];