Loading core/java/android/print/IPrintManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ interface IPrintManager { void removePrintJobStateChangeListener(in IPrintJobStateChangeListener listener, int userId); List<PrintServiceInfo> getInstalledPrintServices(int userId); List<PrintServiceInfo> getEnabledPrintServices(int userId); void createPrinterDiscoverySession(in IPrinterDiscoveryObserver observer, int userId); Loading core/java/android/print/PrintManager.java +20 −1 Original line number Diff line number Diff line Loading @@ -289,7 +289,26 @@ public final class PrintManager { return enabledServices; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error getting the enalbed print services", re); Log.e(LOG_TAG, "Error getting the enabled print services", re); } return Collections.emptyList(); } /** * Gets the list of installed print services. * * @return The installed service list or an empty list. * * @hide */ public List<PrintServiceInfo> getInstalledPrintServices() { try { List<PrintServiceInfo> installedServices = mService.getInstalledPrintServices(mUserId); if (installedServices != null) { return installedServices; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error getting the installed print services", re); } return Collections.emptyList(); } Loading packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java +28 −0 Original line number Diff line number Diff line Loading @@ -19,13 +19,16 @@ package com.android.printspooler; import android.content.ComponentName; import android.content.Context; import android.content.Loader; import android.content.pm.ServiceInfo; import android.os.AsyncTask; import android.print.PrintManager; import android.print.PrinterDiscoverySession; import android.print.PrinterDiscoverySession.OnPrintersChangeListener; import android.print.PrinterId; import android.print.PrinterInfo; import android.printservice.PrintServiceInfo; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Log; import android.util.Slog; Loading @@ -46,6 +49,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import libcore.io.IoUtils; Loading Loading @@ -384,6 +388,30 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { + FusedPrintersProvider.this.hashCode()); } // Ignore printer records whose target services are not installed. PrintManager printManager = (PrintManager) getContext() .getSystemService(Context.PRINT_SERVICE); List<PrintServiceInfo> services = printManager .getInstalledPrintServices(); Set<ComponentName> installedComponents = new ArraySet<ComponentName>(); final int installedServiceCount = services.size(); for (int i = 0; i < installedServiceCount; i++) { ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ComponentName componentName = new ComponentName( serviceInfo.packageName, serviceInfo.name); installedComponents.add(componentName); } final int printerCount = printers.size(); for (int i = printerCount - 1; i >= 0; i--) { ComponentName printerServiceName = printers.get(i).getId().getServiceName(); if (!installedComponents.contains(printerServiceName.getPackageName())) { printers.remove(i); } } // Store the filtered list. mHistoricalPrinters = printers; // Compute the favorite printers. Loading services/java/com/android/server/print/PrintManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,21 @@ public final class PrintManagerService extends IPrintManager.Stub { } } @Override public List<PrintServiceInfo> getInstalledPrintServices(int userId) { final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId); final UserState userState; synchronized (mLock) { userState = getOrCreateUserStateLocked(resolvedUserId); } final long identity = Binder.clearCallingIdentity(); try { return userState.getInstalledPrintServices(); } finally { Binder.restoreCallingIdentity(identity); } } @Override public void createPrinterDiscoverySession(IPrinterDiscoveryObserver observer, int userId) { Loading services/java/com/android/server/print/UserState.java +12 −4 Original line number Diff line number Diff line Loading @@ -205,11 +205,13 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { // Add everything else the spooler knows about. List<PrintJobInfo> printJobs = mSpooler.getPrintJobInfos(null, PrintJobInfo.STATE_ANY, appId); if (printJobs != null) { final int printJobCount = printJobs.size(); for (int i = 0; i < printJobCount; i++) { PrintJobInfo printJob = printJobs.get(i); result.put(printJob.getId(), printJob); } } return new ArrayList<PrintJobInfo>(result.values()); } Loading Loading @@ -272,6 +274,12 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { } } public List<PrintServiceInfo> getInstalledPrintServices() { synchronized (mLock) { return mInstalledServices; } } public void createPrinterDiscoverySession(IPrinterDiscoveryObserver observer) { synchronized (mLock) { throwIfDestroyedLocked(); Loading Loading
core/java/android/print/IPrintManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ interface IPrintManager { void removePrintJobStateChangeListener(in IPrintJobStateChangeListener listener, int userId); List<PrintServiceInfo> getInstalledPrintServices(int userId); List<PrintServiceInfo> getEnabledPrintServices(int userId); void createPrinterDiscoverySession(in IPrinterDiscoveryObserver observer, int userId); Loading
core/java/android/print/PrintManager.java +20 −1 Original line number Diff line number Diff line Loading @@ -289,7 +289,26 @@ public final class PrintManager { return enabledServices; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error getting the enalbed print services", re); Log.e(LOG_TAG, "Error getting the enabled print services", re); } return Collections.emptyList(); } /** * Gets the list of installed print services. * * @return The installed service list or an empty list. * * @hide */ public List<PrintServiceInfo> getInstalledPrintServices() { try { List<PrintServiceInfo> installedServices = mService.getInstalledPrintServices(mUserId); if (installedServices != null) { return installedServices; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error getting the installed print services", re); } return Collections.emptyList(); } Loading
packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java +28 −0 Original line number Diff line number Diff line Loading @@ -19,13 +19,16 @@ package com.android.printspooler; import android.content.ComponentName; import android.content.Context; import android.content.Loader; import android.content.pm.ServiceInfo; import android.os.AsyncTask; import android.print.PrintManager; import android.print.PrinterDiscoverySession; import android.print.PrinterDiscoverySession.OnPrintersChangeListener; import android.print.PrinterId; import android.print.PrinterInfo; import android.printservice.PrintServiceInfo; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Log; import android.util.Slog; Loading @@ -46,6 +49,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import libcore.io.IoUtils; Loading Loading @@ -384,6 +388,30 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> { + FusedPrintersProvider.this.hashCode()); } // Ignore printer records whose target services are not installed. PrintManager printManager = (PrintManager) getContext() .getSystemService(Context.PRINT_SERVICE); List<PrintServiceInfo> services = printManager .getInstalledPrintServices(); Set<ComponentName> installedComponents = new ArraySet<ComponentName>(); final int installedServiceCount = services.size(); for (int i = 0; i < installedServiceCount; i++) { ServiceInfo serviceInfo = services.get(i).getResolveInfo().serviceInfo; ComponentName componentName = new ComponentName( serviceInfo.packageName, serviceInfo.name); installedComponents.add(componentName); } final int printerCount = printers.size(); for (int i = printerCount - 1; i >= 0; i--) { ComponentName printerServiceName = printers.get(i).getId().getServiceName(); if (!installedComponents.contains(printerServiceName.getPackageName())) { printers.remove(i); } } // Store the filtered list. mHistoricalPrinters = printers; // Compute the favorite printers. Loading
services/java/com/android/server/print/PrintManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -193,6 +193,21 @@ public final class PrintManagerService extends IPrintManager.Stub { } } @Override public List<PrintServiceInfo> getInstalledPrintServices(int userId) { final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId); final UserState userState; synchronized (mLock) { userState = getOrCreateUserStateLocked(resolvedUserId); } final long identity = Binder.clearCallingIdentity(); try { return userState.getInstalledPrintServices(); } finally { Binder.restoreCallingIdentity(identity); } } @Override public void createPrinterDiscoverySession(IPrinterDiscoveryObserver observer, int userId) { Loading
services/java/com/android/server/print/UserState.java +12 −4 Original line number Diff line number Diff line Loading @@ -205,11 +205,13 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { // Add everything else the spooler knows about. List<PrintJobInfo> printJobs = mSpooler.getPrintJobInfos(null, PrintJobInfo.STATE_ANY, appId); if (printJobs != null) { final int printJobCount = printJobs.size(); for (int i = 0; i < printJobCount; i++) { PrintJobInfo printJob = printJobs.get(i); result.put(printJob.getId(), printJob); } } return new ArrayList<PrintJobInfo>(result.values()); } Loading Loading @@ -272,6 +274,12 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { } } public List<PrintServiceInfo> getInstalledPrintServices() { synchronized (mLock) { return mInstalledServices; } } public void createPrinterDiscoverySession(IPrinterDiscoveryObserver observer) { synchronized (mLock) { throwIfDestroyedLocked(); Loading