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:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user