diff options
| author | 2013-05-20 22:41:28 +0000 | |
|---|---|---|
| committer | 2013-05-20 22:41:28 +0000 | |
| commit | 78a4630edaa11846b09bdad84bac18a0441c500a (patch) | |
| tree | 679a2677d2250652efcef9e7be0d5d55fbade7e5 | |
| parent | 2539c3946fa3d5cffffa9f742fb1842dfbc5a577 (diff) | |
| parent | 50776863a2a2ed6e4015edc60bacd4f562a907ee (diff) | |
Merge "Taking into account data change for AbsListView when prefetching node infos." into jb-mr2-dev
| -rw-r--r-- | core/java/android/view/View.java | 38 | ||||
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 12 |
2 files changed, 50 insertions, 0 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 0cd7c6e1c668..4e8005fafaa1 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4928,6 +4928,17 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @see AccessibilityNodeInfo */ public AccessibilityNodeInfo createAccessibilityNodeInfo() { + if (mAccessibilityDelegate != null) { + return mAccessibilityDelegate.createAccessibilityNodeInfo(this); + } else { + return createAccessibilityNodeInfoInternal(); + } + } + + /** + * @see #createAccessibilityNodeInfo() + */ + AccessibilityNodeInfo createAccessibilityNodeInfoInternal() { AccessibilityNodeProvider provider = getAccessibilityNodeProvider(); if (provider != null) { return provider.createAccessibilityNodeInfo(View.NO_ID); @@ -18690,6 +18701,33 @@ public class View implements Drawable.Callback, KeyEvent.Callback, public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) { return null; } + + /** + * Returns an {@link AccessibilityNodeInfo} representing the host view from the + * point of view of an {@link android.accessibilityservice.AccessibilityService}. + * This method is responsible for obtaining an accessibility node info from a + * pool of reusable instances and calling + * {@link #onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo)} on the host + * view to initialize the former. + * <p> + * <strong>Note:</strong> The client is responsible for recycling the obtained + * instance by calling {@link AccessibilityNodeInfo#recycle()} to minimize object + * creation. + * </p> + * <p> + * The default implementation behaves as + * {@link View#createAccessibilityNodeInfo() View#createAccessibilityNodeInfo()} for + * the case of no accessibility delegate been set. + * </p> + * @return A populated {@link AccessibilityNodeInfo}. + * + * @see AccessibilityNodeInfo + * + * @hide + */ + public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) { + return host.createAccessibilityNodeInfoInternal(); + } } private class MatchIdPredicate implements Predicate<View> { diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 5a40368d5935..bf662924b7f3 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2213,6 +2213,18 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te class ListItemAccessibilityDelegate extends AccessibilityDelegate { @Override + public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) { + // If the data changed the children are invalid since the data model changed. + // Hence, we pretend they do not exist. After a layout the children will sync + // with the model at which point we notify that the accessibility state changed, + // so a service will be able to re-fetch the views. + if (mDataChanged) { + return null; + } + return super.createAccessibilityNodeInfo(host); + } + + @Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); |