From d4bdd6befa4e3cc29bedaaea3678c1075e0b7d24 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Thu, 31 Oct 2013 17:25:01 -0700 Subject: [PATCH] Temporary detached views not properly reported to accessibility layer. A view may be temporary detached. While in this state the view state may change for which we fire accessibility events. Clients use them to know when the view changed and what the change is. However, detached views do not fire accessibility events. Hence, a client may hold a stale AccessibilityNodeInfo since the changes to its source view happened in a temporary detached state. bug:11388752 Change-Id: I9052700ca9195841cc2881b65c17f5615e6f71fb --- core/java/android/widget/AbsListView.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 3eb0052145569..092f4749e0404 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -6686,6 +6686,13 @@ public abstract class AbsListView extends AdapterView implements Te scrap.dispatchStartTemporaryDetach(); + // The the accessibility state of the view may change while temporary + // detached and we do not allow detached views to fire accessibility + // events. So we are announcing that the subtree changed giving a chance + // to clients holding on to a view in this subtree to refresh it. + notifyViewAccessibilityStateChangedIfNeeded( + AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); + // Don't scrap views that have transient state. final boolean scrapHasTransientState = scrap.hasTransientState(); if (scrapHasTransientState) {