Accessibility layer in inconsistent state after running UI test automation tests.
1. The accessibility layer has a back door for a UI test automation code running
from the shell to attach. The unregister code does an incorrect identity check
and as a result the register UI test automation service is not disconnected
until its process is killed. The fix is super safe and simple.
bug:7409261
Change-Id: I4b1da18be6c5619dadd4a58fca6724529bc59dea
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 7c482f5..6b277c7 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -558,8 +558,9 @@
public void unregisterUiTestAutomationService(IAccessibilityServiceClient serviceClient) {
synchronized (mLock) {
// Automation service is not bound, so pretend it died to perform clean up.
- if (mUiAutomationService != null
- && mUiAutomationService.mServiceInterface == serviceClient) {
+ if (mUiAutomationService != null && mUiAutomationService.mServiceInterface != null
+ && serviceClient != null && mUiAutomationService.mServiceInterface
+ .asBinder() == serviceClient.asBinder()) {
mUiAutomationService.binderDied();
}
}