(cherrypick from master) 3322879 Device soft reboots on enabling and disabling accessibility settings

Change-Id: I7cf6f9da010113d591bd0eb2c59f7a4b92a38764
diff --git a/services/java/com/android/server/AccessibilityManagerService.java b/services/java/com/android/server/AccessibilityManagerService.java
index 77b6dd0..393beda 100644
--- a/services/java/com/android/server/AccessibilityManagerService.java
+++ b/services/java/com/android/server/AccessibilityManagerService.java
@@ -532,11 +532,8 @@
 
         for (int i = 0, count = services.size(); i < count; i++) {
             Service service = services.get(i);
-
             service.unbind();
-            mComponentNameToServiceMap.remove(service.mComponentName);
         }
-        services.clear();
     }
 
     /**
@@ -588,15 +585,18 @@
             Service service = componentNameToServiceMap.get(componentName);
 
             if (isEnabled) {
-                if (enabledServices.contains(componentName) && service == null) {
-                    new Service(componentName).bind();
-                } else if (!enabledServices.contains(componentName) && service != null) {
-                    // clean up done in Service#onServiceDisconnected
-                    service.unbind();
+                if (enabledServices.contains(componentName)) {
+                    if (service == null) {
+                        service = new Service(componentName);
+                    }
+                    service.bind();
+                } else if (!enabledServices.contains(componentName)) {
+                    if (service != null) {
+                        service.unbind();
+                    }
                 }
             } else {
                 if (service != null) {
-                    // clean up done in Service#onServiceDisconnected
                     service.unbind();
                 }
             }
@@ -679,6 +679,8 @@
         public void unbind() {
             if (mService != null) {
                 mContext.unbindService(this);
+                mComponentNameToServiceMap.remove(mComponentName);
+                mServices.remove(this);
             }
         }