Update accessibility compat classes for N.
Adding getTitle and getAnchor to AccessibilityWindowInfoCompat.
Adding getDrawingOrder, setDrawingOrder, isImportantForAccessibility,
and setImportantForAccessibility to AccessibilityNodeInfoCompat.
Updating API and making CompatApi24 classes package private.
Bug: 28912621
Change-Id: I30cf7567abf1535f35b5176b9fe4c644ce4d2d72
diff --git a/v4/api/current.txt b/v4/api/current.txt
index d36c8e9..bda93c5 100644
--- a/v4/api/current.txt
+++ b/v4/api/current.txt
@@ -2966,6 +2966,7 @@
method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat getCollectionInfo();
method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat getCollectionItemInfo();
method public java.lang.CharSequence getContentDescription();
+ method public int getDrawingOrder();
method public java.lang.CharSequence getError();
method public android.os.Bundle getExtras();
method public java.lang.Object getInfo();
@@ -2997,6 +2998,7 @@
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();
@@ -3027,11 +3029,13 @@
method public void setContentDescription(java.lang.CharSequence);
method public void setContentInvalid(boolean);
method public void setDismissable(boolean);
+ method public void setDrawingOrder(int);
method public void setEditable(boolean);
method public void setEnabled(boolean);
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);
@@ -3217,6 +3221,7 @@
}
public class AccessibilityWindowInfoCompat {
+ method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
method public void getBoundsInScreen(android.graphics.Rect);
method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getChild(int);
method public int getChildCount();
@@ -3224,6 +3229,7 @@
method public int getLayer();
method public android.support.v4.view.accessibility.AccessibilityWindowInfoCompat getParent();
method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getRoot();
+ method public java.lang.CharSequence getTitle();
method public int getType();
method public boolean isAccessibilityFocused();
method public boolean isActive();
diff --git a/v4/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java b/v4/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java
new file mode 100644
index 0000000..dedf88d
--- /dev/null
+++ b/v4/api24/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatApi24.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.view.accessibility;
+
+import android.view.accessibility.AccessibilityNodeInfo;
+
+/**
+ * Api24-specific AccessibilityNodeInfo API implementation.
+ */
+class AccessibilityNodeInfoCompatApi24 {
+ public static int getDrawingOrder(Object info) {
+ return ((AccessibilityNodeInfo) info).getDrawingOrder();
+ }
+
+ public static void setDrawingOrder(Object info, int drawingOrderInParent) {
+ ((AccessibilityNodeInfo) info).setDrawingOrder(drawingOrderInParent);
+ }
+
+ public static boolean isImportantForAccessibility(Object info) {
+ return ((AccessibilityNodeInfo) info).isImportantForAccessibility();
+ }
+
+ public static void setImportantForAccessibility(Object info,
+ boolean importantForAccessibility) {
+ ((AccessibilityNodeInfo) info).setImportantForAccessibility(importantForAccessibility);
+ }
+}
diff --git a/v4/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java b/v4/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java
new file mode 100644
index 0000000..34ba542
--- /dev/null
+++ b/v4/api24/android/support/v4/view/accessibility/AccessibilityWindowInfoCompatApi24.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v4.view.accessibility;
+
+import android.view.accessibility.AccessibilityWindowInfo;
+
+/**
+ * Api24-specific AccessibilityWindowInfo API implementation.
+ */
+class AccessibilityWindowInfoCompatApi24 {
+ public static CharSequence getTitle(Object info) {
+ return ((AccessibilityWindowInfo) info).getTitle();
+ }
+
+ public static Object getAnchor(Object info) {
+ return ((AccessibilityWindowInfo) info).getAnchor();
+ }
+}
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java b/v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
index b894ad80..5bd94e4 100644
--- a/v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/v4/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -609,6 +609,10 @@
public void setDismissable(Object info, boolean dismissable);
public boolean isEditable(Object info);
public void setEditable(Object info, boolean editable);
+ public int getDrawingOrder(Object info);
+ public void setDrawingOrder(Object info, int drawingOrderInParent);
+ public boolean isImportantForAccessibility(Object info);
+ public void setImportantForAccessibility(Object info, boolean importantForAccessibility);
public boolean isMultiLine(Object info);
public void setMultiLine(Object info, boolean multiLine);
public boolean refresh(Object info);
@@ -1227,6 +1231,24 @@
@Override
public void setRoleDescription(Object info, CharSequence roleDescription) {
}
+
+ @Override
+ public int getDrawingOrder(Object info) {
+ return 0;
+ }
+
+ @Override
+ public void setDrawingOrder(Object info, int drawingOrderInParent) {
+ }
+
+ @Override
+ public boolean isImportantForAccessibility(Object info) {
+ return true;
+ }
+
+ @Override
+ public void setImportantForAccessibility(Object info, boolean importantForAccessibility) {
+ }
}
static class AccessibilityNodeInfoIcsImpl extends AccessibilityNodeInfoStubImpl {
@@ -1895,8 +1917,34 @@
}
}
+ static class AccessibilityNodeInfoApi24Impl extends AccessibilityNodeInfoApi22Impl {
+ @Override
+ public int getDrawingOrder(Object info) {
+ return AccessibilityNodeInfoCompatApi24.getDrawingOrder(info);
+ }
+
+ @Override
+ public void setDrawingOrder(Object info, int drawingOrderInParent) {
+ AccessibilityNodeInfoCompatApi24.setDrawingOrder(info, drawingOrderInParent);
+ }
+
+ @Override
+ public boolean isImportantForAccessibility(Object info) {
+ return AccessibilityNodeInfoCompatApi24.isImportantForAccessibility(info);
+ }
+
+ @Override
+ public void setImportantForAccessibility(Object info, boolean importantForAccessibility) {
+ AccessibilityNodeInfoCompatApi24.setImportantForAccessibility(
+ info, importantForAccessibility);
+ }
+
+ }
+
static {
- if (Build.VERSION.SDK_INT >= 22) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ IMPL = new AccessibilityNodeInfoApi24Impl();
+ } else if (Build.VERSION.SDK_INT >= 22) {
IMPL = new AccessibilityNodeInfoApi22Impl();
} else if (Build.VERSION.SDK_INT >= 21) {
IMPL = new AccessibilityNodeInfoApi21Impl();
@@ -3025,6 +3073,33 @@
}
/**
+ * 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 IMPL.isImportantForAccessibility(mInfo);
+ }
+
+ /**
+ * Sets whether the node is considered important for accessibility.
+ * <p>
+ * <strong>Note:</strong> Cannot be called from an
+ * {@link android.accessibilityservice.AccessibilityService}.
+ * This class is made immutable before being delivered to an AccessibilityService.
+ * </p>
+ *
+ * @param important {@code true} if the node is considered important for accessibility,
+ * {@code false} otherwise
+ */
+ public void setImportantForAccessibility(boolean important) {
+ IMPL.setImportantForAccessibility(mInfo, important);
+ }
+
+ /**
* Gets the package this node comes from.
*
* @return The package name.
@@ -3201,6 +3276,36 @@
}
/**
+ * Get the drawing order of the view corresponding it this node.
+ * <p>
+ * Drawing order is determined only within the node's parent, so this index is only relative
+ * to its siblings.
+ * <p>
+ * In some cases, the drawing order is essentially simultaneous, so it is possible for two
+ * siblings to return the same value. It is also possible that values will be skipped.
+ *
+ * @return The drawing position of the view corresponding to this node relative to its siblings.
+ */
+ public int getDrawingOrder() {
+ return IMPL.getDrawingOrder(mInfo);
+ }
+
+ /**
+ * Set the drawing order of the view corresponding it this node.
+ *
+ * <p>
+ * <strong>Note:</strong> Cannot be called from an
+ * {@link android.accessibilityservice.AccessibilityService}.
+ * This class is made immutable before being delivered to an AccessibilityService.
+ * </p>
+ * @param drawingOrderInParent
+ * @throws IllegalStateException If called from an AccessibilityService.
+ */
+ public void setDrawingOrder(int drawingOrderInParent) {
+ IMPL.setDrawingOrder(mInfo, drawingOrderInParent);
+ }
+
+ /**
* Gets the collection info if the node is a collection. A collection
* child is always a collection item.
*
diff --git a/v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java b/v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
index 3197bb1..738924c 100644
--- a/v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
+++ b/v4/java/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.java
@@ -39,10 +39,12 @@
public boolean isAccessibilityFocused(Object info);
public int getChildCount(Object info);
public Object getChild(Object info, int index);
+ public CharSequence getTitle(Object info);
+ public Object getAnchor(Object info);
public void recycle(Object info);
}
- private static class AccessibilityWindowInfoStubImpl implements AccessibilityWindowInfoImpl {
+ private static class AccessibilityWindowInfoStubImpl implements AccessibilityWindowInfoImpl {
@Override
public Object obtain() {
@@ -111,6 +113,16 @@
@Override
public void recycle(Object info) {
}
+
+ @Override
+ public CharSequence getTitle(Object info) {
+ return null;
+ }
+
+ @Override
+ public Object getAnchor(Object info) {
+ return null;
+ }
}
private static class AccessibilityWindowInfoApi21Impl extends AccessibilityWindowInfoStubImpl {
@@ -185,8 +197,22 @@
}
}
+ private static class AccessibilityWindowInfoApi24Impl extends AccessibilityWindowInfoApi21Impl {
+ @Override
+ public CharSequence getTitle(Object info) {
+ return AccessibilityWindowInfoCompatApi24.getTitle(info);
+ }
+
+ @Override
+ public Object getAnchor(Object info) {
+ return AccessibilityWindowInfoCompatApi24.getAnchor(info);
+ }
+ }
+
static {
- if (Build.VERSION.SDK_INT >= 21) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ IMPL = new AccessibilityWindowInfoApi24Impl();
+ } else if (Build.VERSION.SDK_INT >= 21) {
IMPL = new AccessibilityWindowInfoApi21Impl();
} else {
IMPL = new AccessibilityWindowInfoStubImpl();
@@ -355,6 +381,25 @@
}
/**
+ * Gets the title of the window.
+ *
+ * @return The title of the window, or the application label for the window if no title was
+ * explicitly set, or {@code null} if neither is available.
+ */
+ public CharSequence getTitle() {
+ return IMPL.getTitle(mInfo);
+ }
+
+ /**
+ * Gets the node that anchors this window to another.
+ *
+ * @return The anchor node, or {@code null} if none exists.
+ */
+ public AccessibilityNodeInfoCompat getAnchor() {
+ return AccessibilityNodeInfoCompat.wrapNonNullInstance(IMPL.getAnchor(mInfo));
+ }
+
+ /**
* Returns a cached instance if such is available or a new one is
* created.
*