summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/print/PrintManagerService.java19
-rw-r--r--services/java/com/android/server/print/UserState.java20
2 files changed, 33 insertions, 6 deletions
diff --git a/services/java/com/android/server/print/PrintManagerService.java b/services/java/com/android/server/print/PrintManagerService.java
index a475639..e24fdb5 100644
--- a/services/java/com/android/server/print/PrintManagerService.java
+++ b/services/java/com/android/server/print/PrintManagerService.java
@@ -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();
+ }
}
}
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index 43757f9..f647814 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -71,6 +71,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -594,6 +595,8 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
.append(installedService.getSettingsActivityName()).println();
pw.append(installedServicePrefix).append(tab).append("addPrintersActivity=")
.append(installedService.getAddPrintersActivityName()).println();
+ pw.append(installedServicePrefix).append(tab).append("avancedOptionsActivity=")
+ .append(installedService.getAdvancedOptionsActivityName()).println();
}
pw.append(prefix).append(tab).append("enabled services:").println();
@@ -787,11 +790,16 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
}
private void onConfigurationChangedLocked() {
+ Set<ComponentName> installedComponents = new ArraySet<ComponentName>();
+
final int installedCount = mInstalledServices.size();
for (int i = 0; i < installedCount; i++) {
ResolveInfo resolveInfo = mInstalledServices.get(i).getResolveInfo();
ComponentName serviceName = new ComponentName(resolveInfo.serviceInfo.packageName,
resolveInfo.serviceInfo.name);
+
+ installedComponents.add(serviceName);
+
if (mEnabledServices.contains(serviceName)) {
if (!mActiveServices.containsKey(serviceName)) {
RemotePrintService service = new RemotePrintService(
@@ -805,6 +813,18 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
}
}
}
+
+ Iterator<Map.Entry<ComponentName, RemotePrintService>> iterator =
+ mActiveServices.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<ComponentName, RemotePrintService> entry = iterator.next();
+ ComponentName serviceName = entry.getKey();
+ RemotePrintService service = entry.getValue();
+ if (!installedComponents.contains(serviceName)) {
+ removeServiceLocked(service);
+ iterator.remove();
+ }
+ }
}
private void addServiceLocked(RemotePrintService service) {