From 8d820ecffdc853aab88cc85bb45bfe72dd2ad893 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Mon, 15 Jul 2013 17:12:41 -0700 Subject: Fixing bugs discovered by the CTS tests. 1. Delayed accessibility events sent when a view subtree changes may be be delivered after accessibility is disabled leading to a crash. It is possible that accessibility was disabled while we were waiting for the timeout before sending the event. Added a check before dispatching. 2. When refreshing a cached node the accessibility node info cache was not using the correct bypass cache argument value and as result was not getting the latest node but its cached value. We really want to get the latest state to update the cache. 3. The debugging cache integrity verification logic was incorrectly removing nodes from the cache while doing its work. 4. Removed the comments for some debug logging. bug:9857067 Change-Id: I20ee1a6ffa65ad35457b51d3f2dc0bc5d8d784e6 --- core/java/android/view/ViewRootImpl.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'core/java/android/view/ViewRootImpl.java') diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 93c6d6e70302..b0f67ac47c08 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -6435,11 +6435,17 @@ public final class ViewRootImpl implements ViewParent, public long mLastEventTimeMillis; public void run() { - mLastEventTimeMillis = SystemClock.uptimeMillis(); - AccessibilityEvent event = AccessibilityEvent.obtain(); - event.setEventType(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - event.setContentChangeType(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); - mSource.sendAccessibilityEventUnchecked(event); + // The accessibility may be turned off while we were waiting so check again. + if (AccessibilityManager.getInstance(mContext).isEnabled()) { + mLastEventTimeMillis = SystemClock.uptimeMillis(); + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.setEventType(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + event.setContentChangeType(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); + mSource.sendAccessibilityEventUnchecked(event); + } else { + mLastEventTimeMillis = 0; + } + // In any case reset to initial state. mSource.resetSubtreeAccessibilityStateChanged(); mSource = null; } -- cgit v1.2.3