diff options
15 files changed, 48 insertions, 370 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index a61225fde141..1eb4c02ed1c3 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -49957,7 +49957,6 @@ package android.view { method public void invalidate(); method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable); method public void invalidateOutline(); - method public boolean isAccessibilityDataPrivate(); method public boolean isAccessibilityFocused(); method public boolean isAccessibilityHeading(); method public boolean isActivated(); @@ -50135,7 +50134,6 @@ package android.view { method public void scrollTo(int, int); method public void sendAccessibilityEvent(int); method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent); - method public void setAccessibilityDataPrivate(int); method public void setAccessibilityDelegate(@Nullable android.view.View.AccessibilityDelegate); method public void setAccessibilityHeading(boolean); method public void setAccessibilityLiveRegion(int); @@ -50316,9 +50314,6 @@ package android.view { method @CallSuper protected boolean verifyDrawable(@NonNull android.graphics.drawable.Drawable); method @Deprecated public boolean willNotCacheDrawing(); method public boolean willNotDraw(); - field public static final int ACCESSIBILITY_DATA_PRIVATE_AUTO = 0; // 0x0 - field public static final int ACCESSIBILITY_DATA_PRIVATE_NO = 2; // 0x2 - field public static final int ACCESSIBILITY_DATA_PRIVATE_YES = 1; // 0x1 field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2 field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0 field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1 @@ -51771,11 +51766,9 @@ package android.view.accessibility { method public int getSpeechStateChangeTypes(); method public int getWindowChanges(); method public void initFromParcel(android.os.Parcel); - method public boolean isAccessibilityDataPrivate(); method @Deprecated public static android.view.accessibility.AccessibilityEvent obtain(int); method @Deprecated public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent); method @Deprecated public static android.view.accessibility.AccessibilityEvent obtain(); - method public void setAccessibilityDataPrivate(boolean); method public void setAction(int); method public void setContentChangeTypes(int); method public void setEventTime(long); @@ -51866,7 +51859,6 @@ package android.view.accessibility { method public static boolean isAccessibilityButtonSupported(); method public boolean isAudioDescriptionRequested(); method public boolean isEnabled(); - method public boolean isRequestFromAccessibilityTool(); method public boolean isTouchExplorationEnabled(); method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer); method public boolean removeAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index c87ea2adbd77..9a3c8a0c0d29 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -90,7 +90,6 @@ package android.accessibilityservice { public class AccessibilityServiceInfo implements android.os.Parcelable { method @NonNull public android.content.ComponentName getComponentName(); - method public void setAccessibilityTool(boolean); } } diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index 8f6bfd3b13db..2e89ce83cd36 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -784,7 +784,6 @@ public class AccessibilityServiceInfo implements Parcelable { mNonInteractiveUiTimeout = other.mNonInteractiveUiTimeout; mInteractiveUiTimeout = other.mInteractiveUiTimeout; flags = other.flags; - mIsAccessibilityTool = other.mIsAccessibilityTool; } private boolean isRequestAccessibilityButtonChangeEnabled(IPlatformCompat platformCompat) { @@ -1113,26 +1112,6 @@ public class AccessibilityServiceInfo implements Parcelable { } /** - * Sets whether the service is used to assist users with disabilities. - * - * <p> - * This property is normally provided in the service's {@link #mResolveInfo ResolveInfo}. - * </p> - * - * <p> - * This method is helpful for unit testing. However, this property is not dynamically - * configurable by a standard {@link AccessibilityService} so it's not possible to update the - * copy held by the system with this method. - * </p> - * - * @hide - */ - @TestApi - public void setAccessibilityTool(boolean isAccessibilityTool) { - mIsAccessibilityTool = isAccessibilityTool; - } - - /** * Indicates if the service is used to assist users with disabilities. * * @return {@code true} if the property is set to true. diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index 8d57e32a763c..a045157e02db 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -550,7 +550,6 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub { info.setCapabilities(AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT | AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION | AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS); - info.setAccessibilityTool(true); try { // Calling out with a lock held is fine since if the system // process is gone the client calling in will be killed. diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java index 52dc34298ae7..a6f63e859049 100644 --- a/core/java/android/view/AccessibilityInteractionController.java +++ b/core/java/android/view/AccessibilityInteractionController.java @@ -89,7 +89,9 @@ public final class AccessibilityInteractionController { // Callbacks should have the same configuration of the flags below to allow satisfying a pending // node request on prefetch - private static final int FLAGS_AFFECTING_REPORTED_DATA = AccessibilityNodeInfo.FLAG_REPORT_MASK; + private static final int FLAGS_AFFECTING_REPORTED_DATA = + AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS + | AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS; private final ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList = new ArrayList<AccessibilityNodeInfo>(); @@ -165,11 +167,6 @@ public final class AccessibilityInteractionController { return (view != null) && (view.getWindowVisibility() == View.VISIBLE && view.isShown()); } - private boolean isVisibleToAccessibilityService(View view) { - return view != null && (!view.isAccessibilityDataPrivate() - || mA11yManager.isRequestFromAccessibilityTool()); - } - public void findAccessibilityNodeInfoByAccessibilityIdClientThread( long accessibilityNodeId, Region interactiveRegion, int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid, @@ -361,7 +358,7 @@ public final class AccessibilityInteractionController { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; requestedView = findViewByAccessibilityId(accessibilityViewId); if (requestedView != null && isShown(requestedView)) { requestedNode = populateAccessibilityNodeInfoForView( @@ -374,7 +371,7 @@ public final class AccessibilityInteractionController { mPrefetcher.prefetchAccessibilityNodeInfos(requestedView, requestedNode == null ? null : new AccessibilityNodeInfo(requestedNode), infos); - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; } } } finally { @@ -399,7 +396,7 @@ public final class AccessibilityInteractionController { } mPrefetcher.prefetchAccessibilityNodeInfos(requestedView, requestedNode == null ? null : new AccessibilityNodeInfo(requestedNode), infos); - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; updateInfosForViewPort(infos, spec, matrixValues, interactiveRegion); final SatisfiedFindAccessibilityNodeByAccessibilityIdRequest satisfiedRequest = getSatisfiedRequestInPrefetch(requestedNode == null ? null : requestedNode, infos, @@ -481,7 +478,7 @@ public final class AccessibilityInteractionController { || viewId == null) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; final View root = findViewByAccessibilityId(accessibilityViewId); if (root != null) { final int resolvedViewId = root.getContext().getResources() @@ -497,7 +494,7 @@ public final class AccessibilityInteractionController { mAddNodeInfosForViewId.reset(); } } finally { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; updateInfosForViewportAndReturnFindNodeResult( infos, callback, interactionId, spec, matrixValues, interactiveRegion); } @@ -545,7 +542,7 @@ public final class AccessibilityInteractionController { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; final View root = findViewByAccessibilityId(accessibilityViewId); if (root != null && isShown(root)) { AccessibilityNodeProvider provider = root.getAccessibilityNodeProvider(); @@ -564,7 +561,7 @@ public final class AccessibilityInteractionController { final int viewCount = foundViews.size(); for (int i = 0; i < viewCount; i++) { View foundView = foundViews.get(i); - if (isShown(foundView) && isVisibleToAccessibilityService(foundView)) { + if (isShown(foundView)) { provider = foundView.getAccessibilityNodeProvider(); if (provider != null) { List<AccessibilityNodeInfo> infosFromProvider = @@ -582,7 +579,7 @@ public final class AccessibilityInteractionController { } } } finally { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; updateInfosForViewportAndReturnFindNodeResult( infos, callback, interactionId, spec, matrixValues, interactiveRegion); } @@ -630,7 +627,7 @@ public final class AccessibilityInteractionController { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; final View root = findViewByAccessibilityId(accessibilityViewId); if (root != null && isShown(root)) { switch (focusType) { @@ -645,9 +642,6 @@ public final class AccessibilityInteractionController { if (!isShown(host)) { break; } - if (!isVisibleToAccessibilityService(host)) { - break; - } // If the host has a provider ask this provider to search for the // focus instead fetching all provider nodes to do the search here. AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider(); @@ -668,9 +662,6 @@ public final class AccessibilityInteractionController { if (!isShown(target)) { break; } - if (!isVisibleToAccessibilityService(target)) { - break; - } AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider(); if (provider != null) { focused = provider.findFocus(focusType); @@ -684,7 +675,7 @@ public final class AccessibilityInteractionController { } } } finally { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; updateInfoForViewportAndReturnFindNodeResult( focused, callback, interactionId, spec, matrixValues, interactiveRegion); } @@ -731,7 +722,7 @@ public final class AccessibilityInteractionController { if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; final View root = findViewByAccessibilityId(accessibilityViewId); if (root != null && isShown(root)) { View nextView = root.focusSearch(direction); @@ -740,7 +731,7 @@ public final class AccessibilityInteractionController { } } } finally { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; updateInfoForViewportAndReturnFindNodeResult( next, callback, interactionId, spec, matrixValues, interactiveRegion); } @@ -787,9 +778,9 @@ public final class AccessibilityInteractionController { mViewRootImpl.mStopped || mViewRootImpl.mPausedForTransition) { return; } - setAccessibilityFetchFlags(flags); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; final View target = findViewByAccessibilityId(accessibilityViewId); - if (target != null && isShown(target) && isVisibleToAccessibilityService(target)) { + if (target != null && isShown(target)) { mA11yManager.notifyPerformingAction(action); if (action == R.id.accessibilityActionClickOnClickableSpan) { // Handle this hidden action separately @@ -808,7 +799,7 @@ public final class AccessibilityInteractionController { } } finally { try { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; callback.setPerformAccessibilityActionResult(succeeded, interactionId); } catch (RemoteException re) { /* ignore - the other side will time out */ @@ -832,9 +823,9 @@ public final class AccessibilityInteractionController { return; } try { - setAccessibilityFetchFlags( - AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS); - final View root = getRootView(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = + AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; + final View root = mViewRootImpl.mView; if (root != null && isShown(root)) { final View host = mViewRootImpl.mAccessibilityFocusedHost; // If there is no accessibility focus host or it is not a descendant @@ -858,7 +849,7 @@ public final class AccessibilityInteractionController { } } } finally { - resetAccessibilityFetchFlags(); + mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; } } @@ -878,7 +869,7 @@ public final class AccessibilityInteractionController { || mViewRootImpl.mStopped || mViewRootImpl.mPausedForTransition) { return; } - final View root = getRootView(); + final View root = mViewRootImpl.mView; if (root != null && isShown(root)) { // trigger ACTION_OUTSIDE to notify windows final long now = SystemClock.uptimeMillis(); @@ -891,30 +882,12 @@ public final class AccessibilityInteractionController { private View findViewByAccessibilityId(int accessibilityId) { if (accessibilityId == AccessibilityNodeInfo.ROOT_ITEM_ID) { - return getRootView(); + return mViewRootImpl.mView; } else { return AccessibilityNodeIdManager.getInstance().findView(accessibilityId); } } - private View getRootView() { - if (!isVisibleToAccessibilityService(mViewRootImpl.mView)) { - return null; - } - return mViewRootImpl.mView; - } - - private void setAccessibilityFetchFlags(int flags) { - mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags; - mA11yManager.setRequestFromAccessibilityTool( - (flags & AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL) != 0); - } - - private void resetAccessibilityFetchFlags() { - mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = 0; - mA11yManager.setRequestFromAccessibilityTool(false); - } - // The boundInScreen includes magnification effect, so we need to normalize it before // determine the visibility. private void adjustIsVisibleToUserIfNeeded(AccessibilityNodeInfo info, @@ -1733,7 +1706,7 @@ public final class AccessibilityInteractionController { @Override public boolean test(View view) { - if (view.getId() == mViewId && isShown(view) && isVisibleToAccessibilityService(view)) { + if (view.getId() == mViewId && isShown(view)) { mInfos.add(view.createAccessibilityNodeInfo()); } return false; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 84edb3a7bdee..48937770eddb 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3085,45 +3085,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, static final int IMPORTANT_FOR_ACCESSIBILITY_DEFAULT = IMPORTANT_FOR_ACCESSIBILITY_AUTO; /** - * Automatically determine whether the view should only allow interactions from - * {@link android.accessibilityservice.AccessibilityService}s with the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - * - * <p> - * Accessibility interactions from services without {@code isAccessibilityTool} set to true are - * disallowed for any of the following conditions: - * <li>this view's window sets {@link WindowManager.LayoutParams#FLAG_SECURE}.</li> - * <li>this view sets {@link #getFilterTouchesWhenObscured()}.</li> - * <li>any parent of this view returns true from {@link #isAccessibilityDataPrivate()}.</li> - * </p> - */ - public static final int ACCESSIBILITY_DATA_PRIVATE_AUTO = 0x00000000; - - /** - * Only allow interactions from {@link android.accessibilityservice.AccessibilityService}s - * with the {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} - * property set to true. - */ - public static final int ACCESSIBILITY_DATA_PRIVATE_YES = 0x00000001; - - /** - * Allow interactions from all {@link android.accessibilityservice.AccessibilityService}s, - * regardless of their - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property. - */ - public static final int ACCESSIBILITY_DATA_PRIVATE_NO = 0x00000002; - - /** @hide */ - @IntDef(prefix = { "ACCESSIBILITY_DATA_PRIVATE_" }, value = { - ACCESSIBILITY_DATA_PRIVATE_AUTO, - ACCESSIBILITY_DATA_PRIVATE_YES, - ACCESSIBILITY_DATA_PRIVATE_NO, - }) - @Retention(RetentionPolicy.SOURCE) - public @interface AccessibilityDataPrivate {} - - /** * Mask for obtaining the bits which specify how to determine * whether a view is important for accessibility. */ @@ -4566,14 +4527,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private CharSequence mAccessibilityPaneTitle; /** - * Describes whether this view should only allow interactions from - * {@link android.accessibilityservice.AccessibilityService}s with the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - */ - private int mAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_AUTO; - - /** * Specifies the id of a view for which this view serves as a label for * accessibility purposes. */ @@ -5966,10 +5919,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, setImportantForAccessibility(a.getInt(attr, IMPORTANT_FOR_ACCESSIBILITY_DEFAULT)); break; - case R.styleable.View_accessibilityDataPrivate: - setAccessibilityDataPrivate(a.getInt(attr, - ACCESSIBILITY_DATA_PRIVATE_AUTO)); - break; case R.styleable.View_accessibilityLiveRegion: setAccessibilityLiveRegion(a.getInt(attr, ACCESSIBILITY_LIVE_REGION_DEFAULT)); break; @@ -8569,11 +8518,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * is responsible for handling this call. * </p> * <p> - * If this view sets {@link #isAccessibilityDataPrivate()} then this view should only append - * sensitive information to an event that also sets - * {@link AccessibilityEvent#isAccessibilityDataPrivate()}. - * </p> - * <p> * <em>Note:</em> Accessibility events of certain types are not dispatched for * populating the event text via this method. For details refer to {@link AccessibilityEvent}. * </p> @@ -10475,7 +10419,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } if ((mAttachInfo.mAccessibilityFetchFlags - & AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS) != 0 + & AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS) != 0 && Resources.resourceHasPackage(mID)) { try { String viewId = getResources().getResourceName(mID); @@ -14458,75 +14402,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @UnsupportedAppUsage public boolean includeForAccessibility() { if (mAttachInfo != null) { - if (isAccessibilityDataPrivate() && !AccessibilityManager.getInstance( - mContext).isRequestFromAccessibilityTool()) { - return false; - } - return (mAttachInfo.mAccessibilityFetchFlags - & AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS) != 0 + & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0 || isImportantForAccessibility(); } return false; } /** - * Whether this view should restrict accessibility service access only to services that have the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - * - * <p> - * See default behavior provided by {@link #ACCESSIBILITY_DATA_PRIVATE_AUTO}. Otherwise, - * returns true for {@link #ACCESSIBILITY_DATA_PRIVATE_YES} or false for {@link - * #ACCESSIBILITY_DATA_PRIVATE_NO}. - * </p> - * - * @return True if this view should restrict accessibility service access to services that have - * the isAccessibilityTool property. - */ - @ViewDebug.ExportedProperty(category = "accessibility") - public boolean isAccessibilityDataPrivate() { - if (mAccessibilityDataPrivate == ACCESSIBILITY_DATA_PRIVATE_YES) { - return true; - } - if (mAccessibilityDataPrivate == ACCESSIBILITY_DATA_PRIVATE_NO) { - return false; - } - - // Views inside FLAG_SECURE windows default to accessibilityDataPrivate. - if (mAttachInfo != null && mAttachInfo.mWindowSecure) { - return true; - } - // Views that set filterTouchesWhenObscured default to accessibilityDataPrivate. - if (getFilterTouchesWhenObscured()) { - return true; - } - - // Descendants of an accessibilityDataPrivate View are also accessibilityDataPrivate. - ViewParent parent = mParent; - while (parent instanceof View) { - if (((View) parent).isAccessibilityDataPrivate()) { - return true; - } - parent = parent.getParent(); - } - - // Otherwise, default to not accessibilityDataPrivate. - return false; - } - - /** - * Specifies whether this view should only allow interactions from - * {@link android.accessibilityservice.AccessibilityService}s with the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - */ - public void setAccessibilityDataPrivate( - @AccessibilityDataPrivate int accessibilityDataPrivate) { - mAccessibilityDataPrivate = accessibilityDataPrivate; - } - - /** * Returns whether the View is considered actionable from * accessibility perspective. Such view are important for * accessibility. @@ -30213,11 +30096,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int mWindowVisibility; /** - * Indicates whether the view's window sets {@link WindowManager.LayoutParams#FLAG_SECURE}. - */ - boolean mWindowSecure; - - /** * Indicates the time at which drawing started to occur. */ @UnsupportedAppUsage @@ -30394,8 +30272,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Flags related to accessibility processing. * - * @see AccessibilityNodeInfo#FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS - * @see AccessibilityNodeInfo#FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS + * @see AccessibilityNodeInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS + * @see AccessibilityNodeInfo#FLAG_REPORT_VIEW_IDS */ int mAccessibilityFetchFlags; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 12bc169153a4..674f0a283273 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2842,7 +2842,6 @@ public final class ViewRootImpl implements ViewParent, // However, windows are now always 32 bits by default, so choose 32 bits mAttachInfo.mUse32BitDrawingCache = true; mAttachInfo.mWindowVisibility = viewVisibility; - mAttachInfo.mWindowSecure = (lp.flags & WindowManager.LayoutParams.FLAG_SECURE) != 0; mAttachInfo.mRecomputeGlobalAttributes = false; mLastConfigurationFromResources.setTo(config); mLastSystemUiVisibility = mAttachInfo.mSystemUiVisibility; diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java index 2db0dcbce45e..cd0dd1df1249 100644 --- a/core/java/android/view/accessibility/AccessibilityEvent.java +++ b/core/java/android/view/accessibility/AccessibilityEvent.java @@ -46,17 +46,15 @@ import java.util.List; * </p> * <p> * The main purpose of an accessibility event is to communicate changes in the UI to an - * {@link android.accessibilityservice.AccessibilityService}. If needed, the service may then - * inspect the user interface by examining the View hierarchy through the event's - * {@link #getSource() source}, as represented by a tree of {@link AccessibilityNodeInfo}s (snapshot - * of a View state) which can be used for exploring the window content. Note that the privilege for - * accessing an event's source, thus the window content, has to be explicitly requested. For more + * {@link android.accessibilityservice.AccessibilityService}. The service may then inspect, + * if needed the user interface by examining the View hierarchy, as represented by a tree of + * {@link AccessibilityNodeInfo}s (snapshot of a View state) + * which can be used for exploring the window content. Note that the privilege for accessing + * an event's source, thus the window content, has to be explicitly requested. For more * details refer to {@link android.accessibilityservice.AccessibilityService}. If an * accessibility service has not requested to retrieve the window content the event will - * not contain reference to its source. <strong>Note: </strong> for events of type - * {@link #TYPE_NOTIFICATION_STATE_CHANGED} the source is never available, and Views that set - * {@link android.view.View#isAccessibilityDataPrivate()} may not populate all event properties on - * events sent from higher up in the view hierarchy. + * not contain reference to its source. Also for events of type + * {@link #TYPE_NOTIFICATION_STATE_CHANGED} the source is never available. * </p> * <p> * This class represents various semantically different accessibility event @@ -1094,47 +1092,6 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par } /** - * Whether the event should only be delivered to an - * {@link android.accessibilityservice.AccessibilityService} with the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - * - * <p> - * Initial value matches the {@link android.view.View#isAccessibilityDataPrivate} property from - * the event's source node, if present, or false by default. - * </p> - * - * @return True if the event should be delivered only to isAccessibilityTool services, false - * otherwise. - * @see #setAccessibilityDataPrivate - */ - @Override - public boolean isAccessibilityDataPrivate() { - return super.isAccessibilityDataPrivate(); - } - - /** - * Sets whether the event should only be delivered to an - * {@link android.accessibilityservice.AccessibilityService} with the - * {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property - * set to true. - * - * <p> - * This will be set automatically based on the event's source (if present). If creating and - * sending an event directly through {@link AccessibilityManager} (where an event may have - * no source) then this method must be called explicitly if you want non-default behavior. - * </p> - * - * @param accessibilityDataPrivate True if the event should be delivered only to - * isAccessibilityTool services, false otherwise. - * @throws IllegalStateException If called from an AccessibilityService. - */ - @Override - public void setAccessibilityDataPrivate(boolean accessibilityDataPrivate) { - super.setAccessibilityDataPrivate(accessibilityDataPrivate); - } - - /** * Gets the bit mask of the speech state signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event * * @see #SPEECH_STATE_SPEAKING_START diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index e89f836aaac1..9e3195aec8a6 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -276,8 +276,6 @@ public final class AccessibilityManager { private final ArrayMap<AudioDescriptionRequestedChangeListener, Executor> mAudioDescriptionRequestedChangeListeners = new ArrayMap<>(); - private boolean mRequestFromAccessibilityTool; - /** * Map from a view's accessibility id to the list of request preparers set for that view */ @@ -985,39 +983,6 @@ public final class AccessibilityManager { } /** - * Whether the current accessibility request comes from an - * {@link AccessibilityService} with the {@link AccessibilityServiceInfo#isAccessibilityTool} - * property set to true. - * - * <p> - * You can use this method inside {@link AccessibilityNodeProvider} to decide how to populate - * your nodes. - * </p> - * - * <p> - * <strong>Note:</strong> The return value is valid only when an {@link AccessibilityNodeInfo} - * request is in progress, can change from one request to another, and has no meaning when a - * request is not in progress. - * </p> - * - * @return True if the current request is from a tool that sets isAccessibilityTool. - */ - public boolean isRequestFromAccessibilityTool() { - return mRequestFromAccessibilityTool; - } - - /** - * Specifies whether the current accessibility request comes from an - * {@link AccessibilityService} with the {@link AccessibilityServiceInfo#isAccessibilityTool} - * property set to true. - * - * @hide - */ - public void setRequestFromAccessibilityTool(boolean requestFromAccessibilityTool) { - mRequestFromAccessibilityTool = requestFromAccessibilityTool; - } - - /** * Registers a {@link AccessibilityRequestPreparer}. */ public void addAccessibilityRequestPreparer(AccessibilityRequestPreparer preparer) { diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 15718c4af26f..953f2615b539 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -217,29 +217,14 @@ public class AccessibilityNodeInfo implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface PrefetchingStrategy {} - /** - * @see AccessibilityServiceInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS - * @hide - */ - public static final int FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS = 0x00000080; - - /** - * @see AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS - * @hide - */ - public static final int FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS = 0x00000100; + /** @hide */ + public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x00000080; - /** - * @see AccessibilityServiceInfo#isAccessibilityTool() - * @hide - */ - public static final int FLAG_SERVICE_IS_ACCESSIBILITY_TOOL = 0x00000200; + /** @hide */ + public static final int FLAG_REPORT_VIEW_IDS = 0x00000100; /** @hide */ - public static final int FLAG_REPORT_MASK = - FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS - | FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS - | FLAG_SERVICE_IS_ACCESSIBILITY_TOOL; + public static final int FLAG_REPORT_MASK = 0x00000180; // Actions. diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java index 789c740bbba2..036316e15cb9 100644 --- a/core/java/android/view/accessibility/AccessibilityRecord.java +++ b/core/java/android/view/accessibility/AccessibilityRecord.java @@ -72,7 +72,6 @@ public class AccessibilityRecord { private static final int PROPERTY_FULL_SCREEN = 0x00000080; private static final int PROPERTY_SCROLLABLE = 0x00000100; private static final int PROPERTY_IMPORTANT_FOR_ACCESSIBILITY = 0x00000200; - private static final int PROPERTY_ACCESSIBILITY_DATA_PRIVATE = 0x00000400; private static final int GET_SOURCE_PREFETCH_FLAGS = AccessibilityNodeInfo.FLAG_PREFETCH_ANCESTORS @@ -160,8 +159,6 @@ public class AccessibilityRecord { important = root.isImportantForAccessibility(); rootViewId = root.getAccessibilityViewId(); mSourceWindowId = root.getAccessibilityWindowId(); - setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE, - root.isAccessibilityDataPrivate()); } setBooleanProperty(PROPERTY_IMPORTANT_FOR_ACCESSIBILITY, important); mSourceNodeId = AccessibilityNodeInfo.makeNodeId(rootViewId, virtualDescendantId); @@ -391,23 +388,6 @@ public class AccessibilityRecord { } /** - * @see AccessibilityEvent#isAccessibilityDataPrivate - * @hide - */ - boolean isAccessibilityDataPrivate() { - return getBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE); - } - - /** - * @see AccessibilityEvent#setAccessibilityDataPrivate - * @hide - */ - void setAccessibilityDataPrivate(boolean accessibilityDataPrivate) { - enforceNotSealed(); - setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE, accessibilityDataPrivate); - } - - /** * Gets the number of items that can be visited. * * @return The number of items. @@ -961,8 +941,6 @@ public class AccessibilityRecord { appendUnless(false, PROPERTY_CHECKED, builder); appendUnless(false, PROPERTY_FULL_SCREEN, builder); appendUnless(false, PROPERTY_SCROLLABLE, builder); - appendUnless(false, PROPERTY_IMPORTANT_FOR_ACCESSIBILITY, builder); - appendUnless(false, PROPERTY_ACCESSIBILITY_DATA_PRIVATE, builder); append(builder, "BeforeText", mBeforeText); append(builder, "FromIndex", mFromIndex); @@ -996,8 +974,6 @@ public class AccessibilityRecord { case PROPERTY_SCROLLABLE: return "Scrollable"; case PROPERTY_IMPORTANT_FOR_ACCESSIBILITY: return "ImportantForAccessibility"; - case PROPERTY_ACCESSIBILITY_DATA_PRIVATE: - return "AccessibilityDataPrivate"; default: return Integer.toHexString(prop); } } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index c6ac0382fa32..1c7c5829d2bc 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -12089,13 +12089,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener public void onPopulateAccessibilityEventInternal(AccessibilityEvent event) { super.onPopulateAccessibilityEventInternal(event); - if (this.isAccessibilityDataPrivate() && !event.isAccessibilityDataPrivate()) { - // This view's accessibility data is private, but another view that generated this event - // is not, so don't append this view's text to the event in order to prevent sharing - // this view's contents with non-accessibility-tool services. - return; - } - final CharSequence text = getTextForAccessibility(); if (!TextUtils.isEmpty(text)) { event.getText().add(text); diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java index 3324c526ecc2..b34482f0964f 100644 --- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java @@ -354,24 +354,16 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ if (supportsFlagForNotImportantViews(info)) { if ((info.flags & AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0) { - mFetchFlags |= - AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS; + mFetchFlags |= AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; } else { - mFetchFlags &= - ~AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS; + mFetchFlags &= ~AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; } } if ((info.flags & AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS) != 0) { - mFetchFlags |= AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS; + mFetchFlags |= AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS; } else { - mFetchFlags &= ~AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS; - } - - if (mAccessibilityServiceInfo.isAccessibilityTool()) { - mFetchFlags |= AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL; - } else { - mFetchFlags &= ~AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL; + mFetchFlags &= ~AccessibilityNodeInfo.FLAG_REPORT_VIEW_IDS; } mRequestTouchExplorationMode = (info.flags @@ -1530,16 +1522,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ return false; } - final boolean includeNotImportantViews = (mFetchFlags - & AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS) != 0; if ((event.getWindowId() != AccessibilityWindowInfo.UNDEFINED_WINDOW_ID) && !event.isImportantForAccessibility() - && !includeNotImportantViews) { - return false; - } - - if (event.isAccessibilityDataPrivate() - && (mFetchFlags & AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL) == 0) { + && (mFetchFlags & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) == 0) { return false; } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 6a6d2bb44d48..6eabc981e9fe 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3693,7 +3693,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub info.setCapabilities(AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT); info.flags |= AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS; info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; - info.setAccessibilityTool(true); final AccessibilityUserState userState; synchronized (mLock) { userState = getCurrentUserStateLocked(); diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java index 4a16874c7acf..842b23c91e41 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java @@ -17,13 +17,13 @@ package com.android.server.accessibility; +import static android.view.accessibility.AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_ANCESTORS; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_DEPTH_FIRST; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_HYBRID; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS; import static android.view.accessibility.AccessibilityNodeInfo.FLAG_PREFETCH_UNINTERRUPTIBLE; -import static android.view.accessibility.AccessibilityNodeInfo.FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS; import static android.view.accessibility.AccessibilityNodeInfo.ROOT_NODE_ID; import static org.junit.Assert.assertEquals; @@ -528,8 +528,7 @@ public class AccessibilityInteractionControllerNodeRequestsTest { // different client that holds different fetch flags for TextView1. sendNodeRequestToController(nodeId, mMockClientCallback2, mMockClient2InteractionId, - FLAG_PREFETCH_SIBLINGS - | FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS + FLAG_PREFETCH_SIBLINGS | FLAG_INCLUDE_NOT_IMPORTANT_VIEWS | FLAG_PREFETCH_ANCESTORS); } } |