@@ -143,6 +143,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
143143
144144 private final SecurityPolicy mSecurityPolicy ;
145145
146+ private Service mUiAutomationService ;
147+
146148 /**
147149 * Handler for delayed event dispatch.
148150 */
@@ -494,19 +496,15 @@ public void registerUiTestAutomationService(IEventListener listener,
494496 }
495497 }
496498 // Hook the automation service up.
497- Service service = new Service (componentName , accessibilityServiceInfo , true );
498- service .onServiceConnected (componentName , listener .asBinder ());
499+ mUiAutomationService = new Service (componentName , accessibilityServiceInfo , true );
500+ mUiAutomationService .onServiceConnected (componentName , listener .asBinder ());
499501 }
500502
501503 public void unregisterUiTestAutomationService (IEventListener listener ) {
502504 synchronized (mLock ) {
503- final int serviceCount = mServices .size ();
504- for (int i = 0 ; i < serviceCount ; i ++) {
505- Service service = mServices .get (i );
506- if (service .mServiceInterface == listener && service .mIsAutomation ) {
507- // Automation service is not bound, so pretend it died to perform clean up.
508- service .binderDied ();
509- }
505+ // Automation service is not bound, so pretend it died to perform clean up.
506+ if (mUiAutomationService != null ) {
507+ mUiAutomationService .binderDied ();
510508 }
511509 }
512510 }
@@ -741,7 +739,10 @@ private boolean canDispathEventLocked(Service service, AccessibilityEvent event,
741739 * Manages services by starting enabled ones and stopping disabled ones.
742740 */
743741 private void manageServicesLocked () {
744- unbindAutomationService ();
742+ // While the UI automation service is running it takes over.
743+ if (mUiAutomationService != null ) {
744+ return ;
745+ }
745746 populateEnabledServicesLocked (mEnabledServices );
746747 final int enabledInstalledServicesCount = updateServicesStateLocked (mInstalledServices ,
747748 mEnabledServices );
@@ -768,21 +769,6 @@ private void unbindAllServicesLocked() {
768769 }
769770 }
770771
771- /**
772- * Unbinds the automation service if such is running.
773- */
774- private void unbindAutomationService () {
775- List <Service > runningServices = mServices ;
776- int runningServiceCount = mServices .size ();
777- for (int i = 0 ; i < runningServiceCount ; i ++) {
778- Service service = runningServices .get (i );
779- if (service .mIsAutomation ) {
780- service .unbind ();
781- return ;
782- }
783- }
784- }
785-
786772 /**
787773 * Populates a list with the {@link ComponentName}s of all enabled
788774 * {@link AccessibilityService}s.
@@ -1248,6 +1234,7 @@ public void binderDied() {
12481234 // We no longer have an automation service, so restore
12491235 // the state based on values in the settings database.
12501236 if (mIsAutomation ) {
1237+ mUiAutomationService = null ;
12511238 handleAccessibilityEnabledSettingChangedLocked ();
12521239 }
12531240 }
0 commit comments