From 30ac645210ecf96ae28fc5cb3b663aeb83dbdec1 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Fri, 1 Jun 2012 09:10:25 -0700 Subject: AccessibilityInteractionController crash with IndexOutOfBoundException. 1. The findAccessibilityNodeInfosByTextUiThread was reusing an ArrayList instance also used by the logic to initialize an AccessibilityNodeInfo. Hence, if the find method got some view and creates the infos for them the method creating the info was reusing the same array list and was nuking its contents. bug:6556585 Change-Id: I1d013bf7b1f715f8b4c4ba60c677233bec40647c --- core/java/android/view/AccessibilityInteractionController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java index 6dc31dd..bd86a8d 100644 --- a/core/java/android/view/AccessibilityInteractionController.java +++ b/core/java/android/view/AccessibilityInteractionController.java @@ -62,6 +62,8 @@ final class AccessibilityInteractionController { private final int mMyProcessId; + private final ArrayList mTempArrayList = new ArrayList(); + public AccessibilityInteractionController(ViewRootImpl viewRootImpl) { Looper looper = viewRootImpl.mHandler.getLooper(); mMyLooperThreadId = looper.getThread().getId(); @@ -313,7 +315,7 @@ final class AccessibilityInteractionController { infos = provider.findAccessibilityNodeInfosByText(text, virtualDescendantId); } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED) { - ArrayList foundViews = mViewRootImpl.mAttachInfo.mTempArrayList; + ArrayList foundViews = mTempArrayList; foundViews.clear(); root.findViewsWithText(foundViews, text, View.FIND_VIEWS_WITH_TEXT | View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION -- cgit v1.1