From 2d80ae4fbbafa9396148b0f45172f73514d0e98b Mon Sep 17 00:00:00 2001 From: Casey Burkhardt Date: Sun, 31 Jan 2016 12:52:23 -0800 Subject: [PATCH] Exposes accessibility importance on AccessibilityNodeInfo This allows a service configured with FLAG_INCLUDE_NOT_IMPORTANT_VIEWS to discover which views in the hierarchy were evaluated as important. Change-Id: Ife9411e41326b4872fc0682773722b9dae7ce994 --- api/current.txt | 2 ++ api/system-current.txt | 2 ++ api/test-current.txt | 2 ++ core/java/android/view/View.java | 7 +++++ .../accessibility/AccessibilityNodeInfo.java | 29 +++++++++++++++++++ 5 files changed, 42 insertions(+) diff --git a/api/current.txt b/api/current.txt index 4d98e9c8f2b7b..ada883b8e0e05 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43669,6 +43669,7 @@ package android.view.accessibility { method public boolean isEnabled(); method public boolean isFocusable(); method public boolean isFocused(); + method public boolean isImportantForAccessibility(); method public boolean isLongClickable(); method public boolean isMultiLine(); method public boolean isPassword(); @@ -43707,6 +43708,7 @@ package android.view.accessibility { method public void setError(java.lang.CharSequence); method public void setFocusable(boolean); method public void setFocused(boolean); + method public void setImportantForAccessibility(boolean); method public void setInputType(int); method public void setLabelFor(android.view.View); method public void setLabelFor(android.view.View, int); diff --git a/api/system-current.txt b/api/system-current.txt index 8265a85cadd00..c276d3ba499d5 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -46089,6 +46089,7 @@ package android.view.accessibility { method public boolean isEnabled(); method public boolean isFocusable(); method public boolean isFocused(); + method public boolean isImportantForAccessibility(); method public boolean isLongClickable(); method public boolean isMultiLine(); method public boolean isPassword(); @@ -46127,6 +46128,7 @@ package android.view.accessibility { method public void setError(java.lang.CharSequence); method public void setFocusable(boolean); method public void setFocused(boolean); + method public void setImportantForAccessibility(boolean); method public void setInputType(int); method public void setLabelFor(android.view.View); method public void setLabelFor(android.view.View, int); diff --git a/api/test-current.txt b/api/test-current.txt index 0b625750db123..39b12c482f0a8 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -43686,6 +43686,7 @@ package android.view.accessibility { method public boolean isEnabled(); method public boolean isFocusable(); method public boolean isFocused(); + method public boolean isImportantForAccessibility(); method public boolean isLongClickable(); method public boolean isMultiLine(); method public boolean isPassword(); @@ -43724,6 +43725,7 @@ package android.view.accessibility { method public void setError(java.lang.CharSequence); method public void setFocusable(boolean); method public void setFocused(boolean); + method public void setImportantForAccessibility(boolean); method public void setInputType(int); method public void setLabelFor(android.view.View); method public void setLabelFor(android.view.View, int); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index dd0887f8f8c5f..4a0a0b0dbeb7c 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -6770,6 +6770,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, info.setVisibleToUser(isVisibleToUser()); + if ((mAttachInfo != null) && ((mAttachInfo.mAccessibilityFetchFlags + & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0)) { + info.setImportantForAccessibility(isImportantForAccessibility()); + } else { + info.setImportantForAccessibility(true); + } + info.setPackageName(mContext.getPackageName()); info.setClassName(getAccessibilityClassName()); info.setContentDescription(getContentDescription()); diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index b673386550579..816095cec9d68 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -568,6 +568,8 @@ public class AccessibilityNodeInfo implements Parcelable { private static final int BOOLEAN_PROPERTY_CONTEXT_CLICKABLE = 0x00020000; + private static final int BOOLEAN_PROPERTY_IMPORTANCE = 0x0040000; + /** * Bits that provide the id of a virtual descendant of a view. */ @@ -2155,6 +2157,33 @@ public class AccessibilityNodeInfo implements Parcelable { setBooleanProperty(BOOLEAN_PROPERTY_DISMISSABLE, dismissable); } + /** + * Returns whether the node originates from a view considered important for accessibility. + * + * @return {@code true} if the node originates from a view considered important for + * accessibility, {@code false} otherwise + * + * @see View#isImportantForAccessibility() + */ + public boolean isImportantForAccessibility() { + return getBooleanProperty(BOOLEAN_PROPERTY_IMPORTANCE); + } + + /** + * Sets whether the node is considered important for accessibility. + *

+ * Note: Cannot be called from an + * {@link android.accessibilityservice.AccessibilityService}. + * This class is made immutable before being delivered to an AccessibilityService. + *

+ * + * @param important {@code true} if the node is considered important for accessibility, + * {@code false} otherwise + */ + public void setImportantForAccessibility(boolean important) { + setBooleanProperty(BOOLEAN_PROPERTY_IMPORTANCE, important); + } + /** * Gets the package this node comes from. *