summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt8
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java21
-rw-r--r--core/java/android/app/UiAutomationConnection.java1
-rw-r--r--core/java/android/view/AccessibilityInteractionController.java77
-rw-r--r--core/java/android/view/View.java130
-rw-r--r--core/java/android/view/ViewRootImpl.java1
-rw-r--r--core/java/android/view/accessibility/AccessibilityEvent.java57
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java35
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java25
-rw-r--r--core/java/android/view/accessibility/AccessibilityRecord.java24
-rw-r--r--core/java/android/widget/TextView.java7
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java25
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java1
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/AccessibilityInteractionControllerNodeRequestsTest.java5
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);
}
}