Loading core/java/android/view/AccessibilityInteractionController.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading core/tests/coretests/src/android/view/AccessibilityInteractionControllerTest.java +31 −13 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading
core/java/android/view/AccessibilityInteractionController.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
core/tests/coretests/src/android/view/AccessibilityInteractionControllerTest.java +31 −13 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading