Merge "Rename AccessibilityDataPrivate -> AccessibilityDataSensitive" into udc-dev am: 4c68e35d46
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21539030 Change-Id: Ie9cb9bced4cb1e3f90bf77d6759d10874b7f994a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -375,7 +375,7 @@ package android {
|
||||
public static final class R.attr {
|
||||
ctor public R.attr();
|
||||
field public static final int absListViewStyle = 16842858; // 0x101006a
|
||||
field public static final int accessibilityDataPrivate;
|
||||
field public static final int accessibilityDataSensitive;
|
||||
field public static final int accessibilityEventTypes = 16843648; // 0x1010380
|
||||
field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
|
||||
field public static final int accessibilityFlags = 16843652; // 0x1010384
|
||||
@@ -52218,7 +52218,7 @@ 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 isAccessibilityDataSensitive();
|
||||
method public boolean isAccessibilityFocused();
|
||||
method public boolean isAccessibilityHeading();
|
||||
method public boolean isActivated();
|
||||
@@ -52398,7 +52398,7 @@ 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 setAccessibilityDataSensitive(int);
|
||||
method public void setAccessibilityDelegate(@Nullable android.view.View.AccessibilityDelegate);
|
||||
method public void setAccessibilityHeading(boolean);
|
||||
method public void setAccessibilityLiveRegion(int);
|
||||
@@ -52584,9 +52584,9 @@ 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_DATA_SENSITIVE_AUTO = 0; // 0x0
|
||||
field public static final int ACCESSIBILITY_DATA_SENSITIVE_NO = 2; // 0x2
|
||||
field public static final int ACCESSIBILITY_DATA_SENSITIVE_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
|
||||
@@ -54056,11 +54056,11 @@ package android.view.accessibility {
|
||||
method public int getSpeechStateChangeTypes();
|
||||
method public int getWindowChanges();
|
||||
method public void initFromParcel(android.os.Parcel);
|
||||
method public boolean isAccessibilityDataPrivate();
|
||||
method public boolean isAccessibilityDataSensitive();
|
||||
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 setAccessibilityDataSensitive(boolean);
|
||||
method public void setAction(int);
|
||||
method public void setContentChangeTypes(int);
|
||||
method public void setEventTime(long);
|
||||
@@ -54251,6 +54251,7 @@ package android.view.accessibility {
|
||||
method public int getWindowId();
|
||||
method public boolean hasRequestInitialAccessibilityFocus();
|
||||
method public boolean hasRequestTouchPassthrough();
|
||||
method public boolean isAccessibilityDataSensitive();
|
||||
method public boolean isAccessibilityFocused();
|
||||
method public boolean isCheckable();
|
||||
method public boolean isChecked();
|
||||
@@ -54287,6 +54288,7 @@ package android.view.accessibility {
|
||||
method public boolean removeAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction);
|
||||
method public boolean removeChild(android.view.View);
|
||||
method public boolean removeChild(android.view.View, int);
|
||||
method public void setAccessibilityDataSensitive(boolean);
|
||||
method public void setAccessibilityFocused(boolean);
|
||||
method public void setAvailableExtraData(java.util.List<java.lang.String>);
|
||||
method @Deprecated public void setBoundsInParent(android.graphics.Rect);
|
||||
|
||||
@@ -172,7 +172,7 @@ public final class AccessibilityInteractionController {
|
||||
|
||||
private boolean isVisibleToAccessibilityService(View view) {
|
||||
return view != null && (mA11yManager.isRequestFromAccessibilityTool()
|
||||
|| !view.isAccessibilityDataPrivate());
|
||||
|| !view.isAccessibilityDataSensitive());
|
||||
}
|
||||
|
||||
public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
|
||||
|
||||
@@ -3114,33 +3114,33 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* Accessibility interactions from services without {@code isAccessibilityTool} set to true are
|
||||
* disallowed for any of the following conditions:
|
||||
* <li>this view sets {@link #getFilterTouchesWhenObscured()}.</li>
|
||||
* <li>any parent of this view returns true from {@link #isAccessibilityDataPrivate()}.</li>
|
||||
* <li>any parent of this view returns true from {@link #isAccessibilityDataSensitive()}.</li>
|
||||
* </p>
|
||||
*/
|
||||
public static final int ACCESSIBILITY_DATA_PRIVATE_AUTO = 0x00000000;
|
||||
public static final int ACCESSIBILITY_DATA_SENSITIVE_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;
|
||||
public static final int ACCESSIBILITY_DATA_SENSITIVE_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;
|
||||
public static final int ACCESSIBILITY_DATA_SENSITIVE_NO = 0x00000002;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(prefix = { "ACCESSIBILITY_DATA_PRIVATE_" }, value = {
|
||||
ACCESSIBILITY_DATA_PRIVATE_AUTO,
|
||||
ACCESSIBILITY_DATA_PRIVATE_YES,
|
||||
ACCESSIBILITY_DATA_PRIVATE_NO,
|
||||
@IntDef(prefix = { "ACCESSIBILITY_DATA_SENSITIVE_" }, value = {
|
||||
ACCESSIBILITY_DATA_SENSITIVE_AUTO,
|
||||
ACCESSIBILITY_DATA_SENSITIVE_YES,
|
||||
ACCESSIBILITY_DATA_SENSITIVE_NO,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface AccessibilityDataPrivate {}
|
||||
public @interface AccessibilityDataSensitive {}
|
||||
|
||||
/**
|
||||
* Mask for obtaining the bits which specify how to determine
|
||||
@@ -4611,9 +4611,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property
|
||||
* set to true.
|
||||
*/
|
||||
private int mExplicitAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_AUTO;
|
||||
/** Used to calculate and cache {@link #isAccessibilityDataPrivate()}. */
|
||||
private int mInferredAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_AUTO;
|
||||
private int mExplicitAccessibilityDataSensitive = ACCESSIBILITY_DATA_SENSITIVE_AUTO;
|
||||
/** Used to calculate and cache {@link #isAccessibilityDataSensitive()}. */
|
||||
private int mInferredAccessibilityDataSensitive = ACCESSIBILITY_DATA_SENSITIVE_AUTO;
|
||||
|
||||
/**
|
||||
* Specifies the id of a view for which this view serves as a label for
|
||||
@@ -6016,9 +6016,9 @@ 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));
|
||||
case R.styleable.View_accessibilityDataSensitive:
|
||||
setAccessibilityDataSensitive(a.getInt(attr,
|
||||
ACCESSIBILITY_DATA_SENSITIVE_AUTO));
|
||||
break;
|
||||
case R.styleable.View_accessibilityLiveRegion:
|
||||
setAccessibilityLiveRegion(a.getInt(attr, ACCESSIBILITY_LIVE_REGION_DEFAULT));
|
||||
@@ -8660,9 +8660,9 @@ 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
|
||||
* If this view sets {@link #isAccessibilityDataSensitive()} then this view should only append
|
||||
* sensitive information to an event that also sets
|
||||
* {@link AccessibilityEvent#isAccessibilityDataPrivate()}.
|
||||
* {@link AccessibilityEvent#isAccessibilityDataSensitive()}.
|
||||
* </p>
|
||||
* <p>
|
||||
* <em>Note:</em> Accessibility events of certain types are not dispatched for
|
||||
@@ -10697,6 +10697,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
info.setVisibleToUser(isVisibleToUser());
|
||||
|
||||
info.setImportantForAccessibility(isImportantForAccessibility());
|
||||
info.setAccessibilityDataSensitive(isAccessibilityDataSensitive());
|
||||
info.setPackageName(mContext.getPackageName());
|
||||
info.setClassName(getAccessibilityClassName());
|
||||
info.setStateDescription(getStateDescription());
|
||||
@@ -13581,7 +13582,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
public void setFilterTouchesWhenObscured(boolean enabled) {
|
||||
setFlags(enabled ? FILTER_TOUCHES_WHEN_OBSCURED : 0,
|
||||
FILTER_TOUCHES_WHEN_OBSCURED);
|
||||
calculateAccessibilityDataPrivate();
|
||||
calculateAccessibilityDataSensitive();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -14817,7 +14818,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
// source View's AccessibilityDataPrivate value, and then filtering is done when
|
||||
// AccessibilityManagerService propagates events to each recipient AccessibilityService.
|
||||
if (!AccessibilityManager.getInstance(mContext).isRequestFromAccessibilityTool()
|
||||
&& isAccessibilityDataPrivate()) {
|
||||
&& isAccessibilityDataSensitive()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -14833,43 +14834,43 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* 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}.
|
||||
* See default behavior provided by {@link #ACCESSIBILITY_DATA_SENSITIVE_AUTO}. Otherwise,
|
||||
* returns true for {@link #ACCESSIBILITY_DATA_SENSITIVE_YES} or false for {@link
|
||||
* #ACCESSIBILITY_DATA_SENSITIVE_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 (mInferredAccessibilityDataPrivate == ACCESSIBILITY_DATA_PRIVATE_AUTO) {
|
||||
calculateAccessibilityDataPrivate();
|
||||
public boolean isAccessibilityDataSensitive() {
|
||||
if (mInferredAccessibilityDataSensitive == ACCESSIBILITY_DATA_SENSITIVE_AUTO) {
|
||||
calculateAccessibilityDataSensitive();
|
||||
}
|
||||
return mInferredAccessibilityDataPrivate == ACCESSIBILITY_DATA_PRIVATE_YES;
|
||||
return mInferredAccessibilityDataSensitive == ACCESSIBILITY_DATA_SENSITIVE_YES;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate and cache the inferred value for {@link #isAccessibilityDataPrivate()}.
|
||||
* Calculate and cache the inferred value for {@link #isAccessibilityDataSensitive()}.
|
||||
*
|
||||
* <p>
|
||||
* <strong>Note:</strong> This method needs to be called any time one of the below conditions
|
||||
* changes, to recalculate the new value.
|
||||
* </p>
|
||||
*/
|
||||
void calculateAccessibilityDataPrivate() {
|
||||
void calculateAccessibilityDataSensitive() {
|
||||
// Use the explicit value if set.
|
||||
if (mExplicitAccessibilityDataPrivate != ACCESSIBILITY_DATA_PRIVATE_AUTO) {
|
||||
mInferredAccessibilityDataPrivate = mExplicitAccessibilityDataPrivate;
|
||||
if (mExplicitAccessibilityDataSensitive != ACCESSIBILITY_DATA_SENSITIVE_AUTO) {
|
||||
mInferredAccessibilityDataSensitive = mExplicitAccessibilityDataSensitive;
|
||||
} else if (getFilterTouchesWhenObscured()) {
|
||||
// Views that set filterTouchesWhenObscured default to accessibilityDataPrivate.
|
||||
mInferredAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_YES;
|
||||
} else if (mParent instanceof View && ((View) mParent).isAccessibilityDataPrivate()) {
|
||||
// Descendants of an accessibilityDataPrivate View are also accessibilityDataPrivate.
|
||||
mInferredAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_YES;
|
||||
// Views that set filterTouchesWhenObscured default to accessibilityDataSensitive.
|
||||
mInferredAccessibilityDataSensitive = ACCESSIBILITY_DATA_SENSITIVE_YES;
|
||||
} else if (mParent instanceof View && ((View) mParent).isAccessibilityDataSensitive()) {
|
||||
// Descendants of accessibilityDataSensitive Views are also accessibilityDataSensitive.
|
||||
mInferredAccessibilityDataSensitive = ACCESSIBILITY_DATA_SENSITIVE_YES;
|
||||
} else {
|
||||
// Otherwise, default to not accessibilityDataPrivate.
|
||||
mInferredAccessibilityDataPrivate = ACCESSIBILITY_DATA_PRIVATE_NO;
|
||||
// Otherwise, default to not accessibilityDataSensitive.
|
||||
mInferredAccessibilityDataSensitive = ACCESSIBILITY_DATA_SENSITIVE_NO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14879,10 +14880,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* {@link android.accessibilityservice.AccessibilityServiceInfo#isAccessibilityTool} property
|
||||
* set to true.
|
||||
*/
|
||||
public void setAccessibilityDataPrivate(
|
||||
@AccessibilityDataPrivate int accessibilityDataPrivate) {
|
||||
mExplicitAccessibilityDataPrivate = accessibilityDataPrivate;
|
||||
calculateAccessibilityDataPrivate();
|
||||
public void setAccessibilityDataSensitive(
|
||||
@AccessibilityDataSensitive int accessibilityDataSensitive) {
|
||||
mExplicitAccessibilityDataSensitive = accessibilityDataSensitive;
|
||||
calculateAccessibilityDataSensitive();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3921,10 +3921,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
}
|
||||
|
||||
@Override
|
||||
void calculateAccessibilityDataPrivate() {
|
||||
super.calculateAccessibilityDataPrivate();
|
||||
void calculateAccessibilityDataSensitive() {
|
||||
super.calculateAccessibilityDataSensitive();
|
||||
for (int i = 0; i < mChildrenCount; i++) {
|
||||
mChildren[i].calculateAccessibilityDataPrivate();
|
||||
mChildren[i].calculateAccessibilityDataSensitive();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ import java.util.List;
|
||||
* 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
|
||||
* {@link android.view.View#isAccessibilityDataSensitive()} may not populate all event properties on
|
||||
* events sent from higher up in the view hierarchy.
|
||||
* </p>
|
||||
* <p>
|
||||
@@ -1168,17 +1168,17 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
* 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.
|
||||
* Initial value matches the {@link android.view.View#isAccessibilityDataSensitive} 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
|
||||
* @see #setAccessibilityDataSensitive
|
||||
*/
|
||||
@Override
|
||||
public boolean isAccessibilityDataPrivate() {
|
||||
return super.isAccessibilityDataPrivate();
|
||||
public boolean isAccessibilityDataSensitive() {
|
||||
return super.isAccessibilityDataSensitive();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1193,13 +1193,13 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
* 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
|
||||
* @param accessibilityDataSensitive 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);
|
||||
public void setAccessibilityDataSensitive(boolean accessibilityDataSensitive) {
|
||||
super.setAccessibilityDataSensitive(accessibilityDataSensitive);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -834,6 +834,8 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
|
||||
private static final int BOOLEAN_PROPERTY_REQUEST_TOUCH_PASSTHROUGH = 1 << 25;
|
||||
|
||||
private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 1 << 26;
|
||||
|
||||
/**
|
||||
* Bits that provide the id of a virtual descendant of a view.
|
||||
*/
|
||||
@@ -2643,6 +2645,34 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
setBooleanProperty(BOOLEAN_PROPERTY_REQUEST_TOUCH_PASSTHROUGH, touchPassthrough);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets if the node's accessibility data is considered sensitive.
|
||||
*
|
||||
* @return True if the node is editable, false otherwise.
|
||||
* @see View#isAccessibilityDataSensitive()
|
||||
*/
|
||||
public boolean isAccessibilityDataSensitive() {
|
||||
return getBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether this node's accessibility data is considered sensitive.
|
||||
*
|
||||
* <p>
|
||||
* <strong>Note:</strong> Cannot be called from an {@link AccessibilityService}.
|
||||
* This class is made immutable before being delivered to an AccessibilityService.
|
||||
* </p>
|
||||
*
|
||||
* @param accessibilityDataSensitive True if the node's accessibility data is considered
|
||||
* sensitive.
|
||||
* @throws IllegalStateException If called from an AccessibilityService.
|
||||
* @see View#setAccessibilityDataSensitive
|
||||
*/
|
||||
public void setAccessibilityDataSensitive(boolean accessibilityDataSensitive) {
|
||||
setBooleanProperty(BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE,
|
||||
accessibilityDataSensitive);
|
||||
}
|
||||
|
||||
/**
|
||||
* If this node represents a visually distinct region of the screen that may update separately
|
||||
* from the rest of the window, it is considered a pane. Set the pane title to indicate that
|
||||
|
||||
@@ -72,7 +72,7 @@ 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 PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 0x00000400;
|
||||
|
||||
private static final int GET_SOURCE_PREFETCH_FLAGS =
|
||||
AccessibilityNodeInfo.FLAG_PREFETCH_ANCESTORS
|
||||
@@ -160,8 +160,8 @@ public class AccessibilityRecord {
|
||||
important = root.isImportantForAccessibility();
|
||||
rootViewId = root.getAccessibilityViewId();
|
||||
mSourceWindowId = root.getAccessibilityWindowId();
|
||||
setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE,
|
||||
root.isAccessibilityDataPrivate());
|
||||
setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_SENSITIVE,
|
||||
root.isAccessibilityDataSensitive());
|
||||
}
|
||||
setBooleanProperty(PROPERTY_IMPORTANT_FOR_ACCESSIBILITY, important);
|
||||
mSourceNodeId = AccessibilityNodeInfo.makeNodeId(rootViewId, virtualDescendantId);
|
||||
@@ -391,20 +391,20 @@ public class AccessibilityRecord {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see AccessibilityEvent#isAccessibilityDataPrivate
|
||||
* @see AccessibilityEvent#isAccessibilityDataSensitive
|
||||
* @hide
|
||||
*/
|
||||
boolean isAccessibilityDataPrivate() {
|
||||
return getBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE);
|
||||
boolean isAccessibilityDataSensitive() {
|
||||
return getBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_SENSITIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see AccessibilityEvent#setAccessibilityDataPrivate
|
||||
* @see AccessibilityEvent#setAccessibilityDataSensitive
|
||||
* @hide
|
||||
*/
|
||||
void setAccessibilityDataPrivate(boolean accessibilityDataPrivate) {
|
||||
void setAccessibilityDataSensitive(boolean accessibilityDataSensitive) {
|
||||
enforceNotSealed();
|
||||
setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_PRIVATE, accessibilityDataPrivate);
|
||||
setBooleanProperty(PROPERTY_ACCESSIBILITY_DATA_SENSITIVE, accessibilityDataSensitive);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -962,7 +962,7 @@ public class AccessibilityRecord {
|
||||
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);
|
||||
appendUnless(false, PROPERTY_ACCESSIBILITY_DATA_SENSITIVE, builder);
|
||||
|
||||
append(builder, "BeforeText", mBeforeText);
|
||||
append(builder, "FromIndex", mFromIndex);
|
||||
@@ -996,8 +996,8 @@ public class AccessibilityRecord {
|
||||
case PROPERTY_SCROLLABLE: return "Scrollable";
|
||||
case PROPERTY_IMPORTANT_FOR_ACCESSIBILITY:
|
||||
return "ImportantForAccessibility";
|
||||
case PROPERTY_ACCESSIBILITY_DATA_PRIVATE:
|
||||
return "AccessibilityDataPrivate";
|
||||
case PROPERTY_ACCESSIBILITY_DATA_SENSITIVE:
|
||||
return "AccessibilityDataSensitive";
|
||||
default: return Integer.toHexString(prop);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13221,10 +13221,10 @@ 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.
|
||||
if (this.isAccessibilityDataSensitive() && !event.isAccessibilityDataSensitive()) {
|
||||
// This view's accessibility data is sensitive, 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -3201,8 +3201,8 @@
|
||||
|
||||
<!-- Describes whether this view should allow interactions from AccessibilityServices only
|
||||
if the service sets the isAccessibilityTool property. -->
|
||||
<attr name="accessibilityDataPrivate" format="integer">
|
||||
<!-- The system determines whether the view's accessibility data is private
|
||||
<attr name="accessibilityDataSensitive" format="integer">
|
||||
<!-- The system determines whether the view's accessibility data is sensitive
|
||||
- default (recommended). -->
|
||||
<enum name="auto" value="0" />
|
||||
<!-- Allow interactions from AccessibilityServices only if the service sets the
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
<public name="handwritingBoundsOffsetTop" />
|
||||
<public name="handwritingBoundsOffsetRight" />
|
||||
<public name="handwritingBoundsOffsetBottom" />
|
||||
<public name="accessibilityDataPrivate" />
|
||||
<public name="accessibilityDataSensitive" />
|
||||
<public name="enableTextStylingShortcuts" />
|
||||
<public name="requiredDisplayCategory"/>
|
||||
<public name="removed_maxConcurrentSessionsCount" />
|
||||
|
||||
@@ -58,7 +58,7 @@ public class AccessibilityNodeInfoTest {
|
||||
|
||||
// The number of flags held in boolean properties. Their values should also be double-checked
|
||||
// in the methods above.
|
||||
private static final int NUM_BOOLEAN_PROPERTIES = 26;
|
||||
private static final int NUM_BOOLEAN_PROPERTIES = 27;
|
||||
|
||||
@Test
|
||||
public void testStandardActions_serializationFlagIsValid() {
|
||||
|
||||
@@ -1635,7 +1635,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
|
||||
return false;
|
||||
}
|
||||
|
||||
if (event.isAccessibilityDataPrivate()
|
||||
if (event.isAccessibilityDataSensitive()
|
||||
&& (mFetchFlags & AccessibilityNodeInfo.FLAG_SERVICE_IS_ACCESSIBILITY_TOOL) == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user