From 419036b560e79c11705e376ad171688ac496bb7d Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Tue, 30 Sep 2014 16:03:20 -0700 Subject: [PATCH] Invalid accessibility state if UI test process crashes in a bad time. We allow a fake accessibility service to connect to the system for UI automation. If the process hosting the fake service dies right after registering it, the accessibility layer ends up in a bad state and subsequent attempts to connect UI automation service fail. bug:17725904 Change-Id: Idad288eab41bbdd486d95e1e5803220640653fb7 --- .../accessibility/AccessibilityManagerService.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index be3fc47ef07fd..63db31d37bf1a 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1982,7 +1982,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } else { userState.mBindingServices.add(mComponentName); mService = userState.mUiAutomationServiceClient.asBinder(); - onServiceConnected(mComponentName, mService); + mMainHandler.post(new Runnable() { + @Override + public void run() { + // Simulate asynchronous connection since in onServiceConnected + // we may modify the state data in case of an error but bind is + // called while iterating over the data and bad things can happen. + onServiceConnected(mComponentName, mService); + } + }); userState.mUiAutomationService = this; } return false;