(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);
}
}