Removed print services not fully cleaned up.

1. When a print services is removed it is removed from the
   installed and enabled services but not from the active
   ones while it should.

2. If a package has more than one print service (very rare
   but possible) we are executing the "make everything right"
   code for each of them which is not very optimal.

Change-Id: I7f6fc4eef10b6757d3b2ede33eb298c3399c3ff7
This commit is contained in:
Svetoslav
2013-12-18 17:29:49 -08:00
parent 1732f2639b
commit dbcc95d4d8
2 changed files with 33 additions and 6 deletions

View File

@@ -401,33 +401,40 @@ public final class PrintManagerService extends IPrintManager.Stub {
@Override
public void onPackageModified(String packageName) {
synchronized (mLock) {
boolean servicesChanged = false;
UserState userState = getOrCreateUserStateLocked(getChangingUserId());
Iterator<ComponentName> iterator = userState.getEnabledServices().iterator();
while (iterator.hasNext()) {
ComponentName componentName = iterator.next();
if (packageName.equals(componentName.getPackageName())) {
userState.updateIfNeededLocked();
servicesChanged = true;
}
}
if (servicesChanged) {
userState.updateIfNeededLocked();
}
}
}
@Override
public void onPackageRemoved(String packageName, int uid) {
synchronized (mLock) {
boolean servicesRemoved = false;
UserState userState = getOrCreateUserStateLocked(getChangingUserId());
Iterator<ComponentName> iterator = userState.getEnabledServices().iterator();
while (iterator.hasNext()) {
ComponentName componentName = iterator.next();
if (packageName.equals(componentName.getPackageName())) {
iterator.remove();
persistComponentNamesToSettingLocked(
Settings.Secure.ENABLED_PRINT_SERVICES,
userState.getEnabledServices(), getChangingUserId());
userState.updateIfNeededLocked();
return;
servicesRemoved = true;
}
}
if (servicesRemoved) {
persistComponentNamesToSettingLocked(
Settings.Secure.ENABLED_PRINT_SERVICES,
userState.getEnabledServices(), getChangingUserId());
userState.updateIfNeededLocked();
}
}
}