Skip to content

Commit 0ee0969

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "UI automation service disconnected upon package change."
2 parents 87a36a3 + 9b666d0 commit 0ee0969

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

services/java/com/android/server/accessibility/AccessibilityManagerService.java

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)