Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b666d0f authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

UI automation service disconnected upon package change.

1. The AccessibilityManagerService used to disable the IU
   automation service on package change. This behavior
   was incorrect since the automation service has to
   survive package installations.

bug:5975207

Change-Id: Idb5e76d02625c333a5842a6b5c5bc90c9b9634c9
parent d36ad9b1
Loading
Loading
Loading
Loading
+12 −25
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub

    private final SecurityPolicy mSecurityPolicy;

    private Service mUiAutomationService;

    /**
     * Handler for delayed event dispatch.
     */
@@ -494,19 +496,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            }
        }
        // Hook the automation service up.
        Service service = new Service(componentName, accessibilityServiceInfo, true);
        service.onServiceConnected(componentName, listener.asBinder());
        mUiAutomationService = new Service(componentName, accessibilityServiceInfo, true);
        mUiAutomationService.onServiceConnected(componentName, listener.asBinder());
    }

    public void unregisterUiTestAutomationService(IEventListener listener) {
        synchronized (mLock) {
            final int serviceCount = mServices.size();
            for (int i = 0; i < serviceCount; i++) {
                Service service = mServices.get(i);
                if (service.mServiceInterface == listener && service.mIsAutomation) {
            // Automation service is not bound, so pretend it died to perform clean up.
                    service.binderDied();
                }
            if (mUiAutomationService != null) {
                mUiAutomationService.binderDied();
            }
        }
    }
@@ -741,7 +739,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
     * Manages services by starting enabled ones and stopping disabled ones.
     */
    private void manageServicesLocked() {
        unbindAutomationService();
        // While the UI automation service is running it takes over.
        if (mUiAutomationService != null) {
            return;
        }
        populateEnabledServicesLocked(mEnabledServices);
        final int enabledInstalledServicesCount = updateServicesStateLocked(mInstalledServices,
                mEnabledServices);
@@ -768,21 +769,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        }
    }

    /**
     * Unbinds the automation service if such is running.
     */
    private void unbindAutomationService() {
        List<Service> runningServices = mServices;
        int runningServiceCount = mServices.size();
        for (int i = 0; i < runningServiceCount; i++) {
            Service service = runningServices.get(i);
            if (service.mIsAutomation) {
                 service.unbind();
                 return;
            }
        }
    }

    /**
     * Populates a list with the {@link ComponentName}s of all enabled
     * {@link AccessibilityService}s.
@@ -1248,6 +1234,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                // We no longer have an automation service, so restore
                // the state based on values in the settings database.
                if (mIsAutomation) {
                    mUiAutomationService = null;
                    handleAccessibilityEnabledSettingChangedLocked();
                }
            }