diff options
2 files changed, 19 insertions, 1 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 7798cf7af3cb..b2c1beddec46 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3743,6 +3743,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub /** * Removes a service. + * There are three states to a service here: off, bound, and binding. + * This stops tracking the service as bound. * * @param serviceConnection The service. */ @@ -3759,6 +3761,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub scheduleNotifyClientsOfServicesStateChange(this); } + /** + * Make sure a services disconnected but still 'on' state is reflected in UserState + * There are three states to a service here: off, bound, and binding. + * This drops a service from a bound state, to the binding state. + * The binding state describes the situation where a service is on, but not bound. + * + * @param serviceConnection The service. + */ + public void serviceDisconnectedLocked(AccessibilityServiceConnection serviceConnection) { + removeServiceLocked(serviceConnection); + mBindingServices.add(serviceConnection.getComponentName()); + } + public Set<ComponentName> getBindingServicesLocked() { return mBindingServices; } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java index eb18f06baae0..105df9238f8d 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java @@ -258,7 +258,10 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect return; } mWasConnectedAndDied = true; - resetLocked(); + UserState userState = mUserStateWeakReference.get(); + if (userState != null) { + userState.serviceDisconnectedLocked(this); + } if (mId == mSystemSupport.getMagnificationController().getIdOfLastServiceToMagnify()) { mSystemSupport.getMagnificationController().resetIfNeeded(true); } |