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

Commit 8f55ab72 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: If6ad930c27c650b498628fdda8241c849bee1b03
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 60a02ef5 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() {