Merge "Notify system when uiAutomation terminates"
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 972a426..270a762 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -772,7 +772,6 @@
     public void unregisterUiTestAutomationService(IAccessibilityServiceClient serviceClient) {
         synchronized (mLock) {
             mUiAutomationManager.unregisterUiTestAutomationServiceLocked(serviceClient);
-            onUserStateChangedLocked(getCurrentUserStateLocked());
         }
     }
 
diff --git a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
index f057112..56a9534 100644
--- a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
@@ -28,6 +28,7 @@
 import android.util.Slog;
 import android.view.accessibility.AccessibilityEvent;
 
+import com.android.internal.util.DumpUtils;
 import com.android.server.wm.WindowManagerInternal;
 
 import java.io.FileDescriptor;
@@ -45,6 +46,8 @@
 
     private AccessibilityServiceInfo mUiAutomationServiceInfo;
 
+    private AccessibilityClientConnection.SystemSupport mSystemSupport;
+
     private int mUiAutomationFlags;
 
     private IBinder mUiAutomationServiceOwner;
@@ -92,6 +95,7 @@
             return;
         }
 
+        mSystemSupport = systemSupport;
         mUiAutomationService = new UiAutomationService(context, accessibilityServiceInfo, id,
                 mainHandler, lock, securityPolicy, systemSupport, windowManagerInternal,
                 globalActionPerfomer);
@@ -169,6 +173,7 @@
             mUiAutomationServiceOwner.unlinkToDeath(mUiAutomationServiceOwnerDeathRecipient, 0);
             mUiAutomationServiceOwner = null;
         }
+        mSystemSupport.onClientChange(false);
     }
 
     private class UiAutomationService extends AccessibilityClientConnection {
@@ -224,6 +229,17 @@
             return true;
         }
 
+        @Override
+        public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
+            if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, pw)) return;
+            synchronized (mLock) {
+                pw.append("Ui Automation[eventTypes="
+                        + AccessibilityEvent.eventTypeToString(mEventTypes));
+                pw.append(", notificationTimeout=" + mNotificationTimeout);
+                pw.append("]");
+            }
+        }
+
         // Since this isn't really an accessibility service, several methods are just stubbed here.
         @Override
         public boolean setSoftKeyboardShowMode(int mode) {
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/UiAutomationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/UiAutomationManagerTest.java
index dbebd01..45ecbfb 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/UiAutomationManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/UiAutomationManagerTest.java
@@ -153,13 +153,14 @@
     }
 
     @Test
-    public void uiAutomationBinderDiesBeforeConnecting_shouldNotCrash() throws Exception {
+    public void uiAutomationBinderDiesBeforeConnecting_notifiesSystem() throws Exception {
         register(0);
         ArgumentCaptor<IBinder.DeathRecipient> captor = ArgumentCaptor.forClass(
                 IBinder.DeathRecipient.class);
         verify(mMockOwner).linkToDeath(captor.capture(), anyInt());
         captor.getValue().binderDied();
         mMessageCapturingHandler.sendAllMessages();
+        verify(mMockSystemSupport).onClientChange(false);
     }
 
     private void register(int flags) {