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

Commit c9b8f31d authored by Daniel Norman's avatar Daniel Norman Committed by Android (Google) Code Review
Browse files

Merge "Fix a11yfocus clearing of view with AccessibilityDataSensitive root." into udc-dev

parents 6d0bd2aa 7585bd44
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -874,8 +874,11 @@ public final class AccessibilityInteractionController {
            return;
        }
        try {
            // Clearing focus does not expose sensitive data, so set fetch flags to ensure that the
            // root view is always returned if present.
            setAccessibilityFetchFlags(
                    AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS);
                    AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS
                            | AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL);
            final View root = getRootView();
            if (root != null && isShown(root)) {
                final View host = mViewRootImpl.mAccessibilityFocusedHost;
+31 −13
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package android.view;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;

import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
@@ -98,24 +98,42 @@ public class AccessibilityInteractionControllerTest {
    @Test
    public void clearAccessibilityFocus_shouldClearFocus() throws Exception {
        performAccessibilityFocus("com.android.frameworks.coretests:id/appNameBtn");
        assertTrue("Button should have a11y focus",
                mButton.isAccessibilityFocused());
        assertWithMessage("Button should have a11y focus").that(
                mButton.isAccessibilityFocused()).isTrue();
        mAccessibilityInteractionController.clearAccessibilityFocusClientThread();
        sInstrumentation.waitForIdleSync();
        assertFalse("Button should not have a11y focus",
                mButton.isAccessibilityFocused());
        assertWithMessage("Button should not have a11y focus").that(
                mButton.isAccessibilityFocused()).isFalse();
    }

    @Test
    public void clearAccessibilityFocus_uiThread_shouldClearFocus() throws Exception {
        performAccessibilityFocus("com.android.frameworks.coretests:id/appNameBtn");
        assertTrue("Button should have a11y focus",
                mButton.isAccessibilityFocused());
        sInstrumentation.runOnMainSync(() -> {
            mAccessibilityInteractionController.clearAccessibilityFocusClientThread();
        });
        assertFalse("Button should not have a11y focus",
                mButton.isAccessibilityFocused());
        assertWithMessage("Button should have a11y focus").that(
                mButton.isAccessibilityFocused()).isTrue();
        sInstrumentation.runOnMainSync(() ->
                mAccessibilityInteractionController.clearAccessibilityFocusClientThread());
        assertWithMessage("Button should not have a11y focus").that(
                mButton.isAccessibilityFocused()).isFalse();
    }

    @Test
    public void clearAccessibilityFocus_sensitiveRootView_shouldClearFocus()
            throws Exception {
        final View rootView = mButton.getRootView();
        assertThat(rootView).isNotNull();
        try {
            rootView.setAccessibilityDataSensitive(View.ACCESSIBILITY_DATA_SENSITIVE_YES);
            performAccessibilityFocus("com.android.frameworks.coretests:id/appNameBtn");
            assertWithMessage("Button should have a11y focus").that(
                    mButton.isAccessibilityFocused()).isTrue();
            sInstrumentation.runOnMainSync(() ->
                    mAccessibilityInteractionController.clearAccessibilityFocusClientThread());
            assertWithMessage("Button should not have a11y focus").that(
                    mButton.isAccessibilityFocused()).isFalse();
        } finally {
            rootView.setAccessibilityDataSensitive(View.ACCESSIBILITY_DATA_SENSITIVE_AUTO);
        }
    }

    private void launchActivity() {