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

Commit 98e293ed authored by Daniel Norman's avatar Daniel Norman Committed by Automerger Merge Worker
Browse files

Merge "Fix a11yfocus clearing of view with AccessibilityDataSensitive root."...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21899107



Change-Id: Ic9c1de1406f43c70327af017f0e0cea69baba516
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 7c8baaef c9b8f31d
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() {