diff options
| author | Svetoslav <svetoslavganov@google.com> | 2013-07-15 17:12:41 -0700 |
|---|---|---|
| committer | Svetoslav <svetoslavganov@google.com> | 2013-07-15 17:22:04 -0700 |
| commit | 8d820ecffdc853aab88cc85bb45bfe72dd2ad893 (patch) | |
| tree | 06ae2a4e5164930f1d1ba1b17631a887a095eea0 /core/java/android/view/ViewRootImpl.java | |
| parent | 326ef35f6f0ee3221804585592e462a9307c2df1 (diff) | |
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
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 16 |
1 files changed, 11 insertions, 5 deletions
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; } |
