Restart accessibility services after they update.
In ag/1273924, we stopped restarting services that were still bound. When the package changes, however, the system unbinds from a service and has no way to tell us that it is not going to restart it (as it would if the service crashed.) Now we listen for package updates and unbind affected services. The services will then be restarted as there will be enabled services that are no longer bound. Bug: 30866905 Change-Id: I375edfd6a37ed25f959ec354930cec8f288deb6b
This commit is contained in:
@@ -278,6 +278,31 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPackageUpdateFinished(String packageName, int uid) {
|
||||
// Unbind all services from this package, and then update the user state to
|
||||
// re-bind new versions of them.
|
||||
synchronized (mLock) {
|
||||
final int userId = getChangingUserId();
|
||||
if (userId != mCurrentUserId) {
|
||||
return;
|
||||
}
|
||||
UserState userState = getUserStateLocked(userId);
|
||||
boolean unboundAService = false;
|
||||
for (int i = userState.mBoundServices.size() - 1; i >= 0; i--) {
|
||||
Service boundService = userState.mBoundServices.get(i);
|
||||
String servicePkg = boundService.mComponentName.getPackageName();
|
||||
if (servicePkg.equals(packageName)) {
|
||||
boundService.unbindLocked();
|
||||
unboundAService = true;
|
||||
}
|
||||
}
|
||||
if (unboundAService) {
|
||||
onUserStateChangedLocked(userState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPackageRemoved(String packageName, int uid) {
|
||||
synchronized (mLock) {
|
||||
|
||||
Reference in New Issue
Block a user