Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ef0c148 authored by Svetoslav's avatar Svetoslav
Browse files

Print service meta-data changes not handled properly.

The package monitor in the PrintManagerService was not overriding
the correct callback to capture changes in the print service package
including meta-data. Hence, there was a missed signal the the old
meta-data was used.

The implication is that if a vendor adds new feature such as custom
print options activity or print service settings that were not there
before, then they will not be show until the device reboots.

bug:11772977

Change-Id: Idf756c430f30ae6d16760a257c199a72a52cf5c5
parent 266f48cc
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -399,7 +399,7 @@ public final class PrintManagerService extends IPrintManager.Stub {
    private void registerBoradcastReceivers() {
        PackageMonitor monitor = new PackageMonitor() {
            @Override
            public boolean onPackageChanged(String packageName, int uid, String[] components) {
            public void onPackageModified(String packageName) {
                synchronized (mLock) {
                    UserState userState = getOrCreateUserStateLocked(getChangingUserId());
                    Iterator<ComponentName> iterator = userState.getEnabledServices().iterator();
@@ -407,11 +407,9 @@ public final class PrintManagerService extends IPrintManager.Stub {
                        ComponentName componentName = iterator.next();
                        if (packageName.equals(componentName.getPackageName())) {
                            userState.updateIfNeededLocked();
                            return true;
                        }
                    }
                }
                return false;
            }

            @Override
+27 −1
Original line number Diff line number Diff line
@@ -657,7 +657,33 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
            tempPrintServices.add(PrintServiceInfo.create(installedService, mContext));
        }

        if (!tempPrintServices.equals(mInstalledServices)) {
        boolean someServiceChanged = false;

        if (tempPrintServices.size() != mInstalledServices.size()) {
            someServiceChanged = true;
        } else {
            for (PrintServiceInfo newService: tempPrintServices) {
                final int oldServiceIndex = mInstalledServices.indexOf(newService);
                if (oldServiceIndex < 0) {
                    someServiceChanged = true;
                    break;
                }
                // PrintServiceInfo#equals compares only the id not all members,
                // so we are also comparing the members coming from meta-data.
                PrintServiceInfo oldService = mInstalledServices.get(oldServiceIndex);
                if (!TextUtils.equals(oldService.getAddPrintersActivityName(),
                            newService.getAddPrintersActivityName())
                        || !TextUtils.equals(oldService.getAdvancedOptionsActivityName(),
                                newService.getAdvancedOptionsActivityName())
                        || !TextUtils.equals(oldService.getSettingsActivityName(),
                                newService.getSettingsActivityName())) {
                    someServiceChanged = true;
                    break;
                }
            }
        }

        if (someServiceChanged) {
            mInstalledServices.clear();
            mInstalledServices.addAll(tempPrintServices);
            return true;