From 773f54de3de9bce7b6f915aa47ed686b161d77aa Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Tue, 3 Sep 2013 14:01:43 -0700 Subject: Print API updated. 1. Removed the updatePrinters API on PrinterDiscoverySession. Now re-adding a printer updates it. 2. Added getTrackedPrinters() API to allow a print service to figure out which printers' state should be tracked by the service. 3. Removed the APIs on PrintDocumentInfo that describe the layout of the content as they are not needed. For example, if the print attributes passed in layout require landscape mode, the the app should just create a PDF page with the wider side up and draw its content in portrait. The printer will then rotate the page. Change-Id: Idd72c6e9c129e8b17eef1236573a99773f8ff0a2 --- .../android/server/print/RemotePrintService.java | 14 --- .../java/com/android/server/print/UserState.java | 102 +++------------------ 2 files changed, 12 insertions(+), 104 deletions(-) (limited to 'services') diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java index 3c67aa9..2ded202 100644 --- a/services/java/com/android/server/print/RemotePrintService.java +++ b/services/java/com/android/server/print/RemotePrintService.java @@ -684,20 +684,6 @@ final class RemotePrintService implements DeathRecipient { } } - @Override - public void onPrintersUpdated(List printers) { - RemotePrintService service = mWeakService.get(); - if (service != null) { - throwIfPrinterIdsForPrinterInfoTampered(service.mComponentName, printers); - final long identity = Binder.clearCallingIdentity(); - try { - service.mUserState.onPrintersUpdated(printers); - } finally { - Binder.restoreCallingIdentity(identity); - } - } - } - private void throwIfPrinterIdsForPrinterInfoTampered(ComponentName serviceName, List printerInfos) { final int printerInfoCount = printerInfos.size(); diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java index b9c676d..8fe979b 100644 --- a/services/java/com/android/server/print/UserState.java +++ b/services/java/com/android/server/print/UserState.java @@ -276,22 +276,6 @@ final class UserState implements PrintSpoolerCallbacks { } } - public void onPrintersUpdated(List printers) { - synchronized (mLock) { - throwIfDestroyedLocked(); - // No services - nothing to do. - if (mActiveServices.isEmpty()) { - return; - } - // No session - nothing to do. - if (mPrinterDiscoverySession == null) { - return; - } - // Request an updated. - mPrinterDiscoverySession.onPrintersUpdatedLocked(printers); - } - } - public void updateIfNeededLocked() { throwIfDestroyedLocked(); if (readConfigurationLocked()) { @@ -746,8 +730,8 @@ final class UserState implements PrintSpoolerCallbacks { final int addedPrinterCount = printers.size(); for (int i = 0; i < addedPrinterCount; i++) { PrinterInfo printer = printers.get(i); - if (!mPrinters.containsKey(printer.getId())) { - mPrinters.put(printer.getId(), printer); + PrinterInfo oldPrinter = mPrinters.put(printer.getId(), printer); + if (oldPrinter == null || !oldPrinter.equals(printer)) { if (addedPrinters == null) { addedPrinters = new ArrayList(); } @@ -785,32 +769,6 @@ final class UserState implements PrintSpoolerCallbacks { } } - public void onPrintersUpdatedLocked(List printers) { - if (DEBUG) { - Log.i(LOG_TAG, "onPrintersUpdatedLocked()"); - } - if (mIsDestroyed) { - Log.w(LOG_TAG, "Not updating printers - session destroyed"); - return; - } - List updatedPrinters = null; - final int updatedPrinterCount = printers.size(); - for (int i = 0; i < updatedPrinterCount; i++) { - PrinterInfo updatedPrinter = printers.get(i); - if (mPrinters.containsKey(updatedPrinter.getId())) { - mPrinters.put(updatedPrinter.getId(), updatedPrinter); - if (updatedPrinters == null) { - updatedPrinters = new ArrayList(); - } - updatedPrinters.add(updatedPrinter); - } - } - if (updatedPrinters != null) { - mHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_UPDATED, - updatedPrinters).sendToTarget(); - } - } - public void onServiceRemovedLocked(ComponentName serviceName) { if (mIsDestroyed) { Log.w(LOG_TAG, "Not updating removed service - session destroyed"); @@ -874,15 +832,6 @@ final class UserState implements PrintSpoolerCallbacks { mDiscoveryObservers.finishBroadcast(); } - private void handleDispatchPrintersUpdated(List updatedPrinters) { - final int observerCount = mDiscoveryObservers.beginBroadcast(); - for (int i = 0; i < observerCount; i++) { - IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i); - handlePrintersUpdated(observer, updatedPrinters); - } - mDiscoveryObservers.finishBroadcast(); - } - private void handleDispatchCreatePrinterDiscoverySession( List services) { final int serviceCount = services.size(); @@ -976,43 +925,21 @@ final class UserState implements PrintSpoolerCallbacks { } } - private void handlePrintersUpdated(IPrinterDiscoveryObserver observer, - List updatedPrinters) { - try { - final int printerCount = updatedPrinters.size(); - if (printerCount <= MAX_ITEMS_PER_CALLBACK) { - observer.onPrintersUpdated(updatedPrinters); - } else { - // Send the added printers in chunks avoiding the binder transaction limit. - final int transactionCount = (printerCount / MAX_ITEMS_PER_CALLBACK) + 1; - for (int i = 0; i < transactionCount; i++) { - final int start = i * MAX_ITEMS_PER_CALLBACK; - final int end = Math.min(start + MAX_ITEMS_PER_CALLBACK, printerCount); - List subPrinters = updatedPrinters.subList(start, end); - observer.onPrintersUpdated(subPrinters); - } - } - } catch (RemoteException re) { - Log.e(LOG_TAG, "Error sending updated printers", re); - } - } - private final class SessionHandler extends Handler { public static final int MSG_PRINTERS_ADDED = 1; public static final int MSG_PRINTERS_REMOVED = 2; public static final int MSG_DISPATCH_PRINTERS_ADDED = 3; public static final int MSG_DISPATCH_PRINTERS_REMOVED = 4; - public static final int MSG_DISPATCH_PRINTERS_UPDATED = 5; - - public static final int MSG_CREATE_PRINTER_DISCOVERY_SESSION = 6; - public static final int MSG_START_PRINTER_DISCOVERY = 7; - public static final int MSG_DISPATCH_CREATE_PRINTER_DISCOVERY_SESSION = 8; - public static final int MSG_DISPATCH_DESTROY_PRINTER_DISCOVERY_SESSION = 9; - public static final int MSG_DISPATCH_START_PRINTER_DISCOVERY = 10; - public static final int MSG_DISPATCH_STOP_PRINTER_DISCOVERY = 11; - public static final int MSG_VALIDATE_PRINTERS = 12; - public static final int MSG_START_PRINTER_STATE_TRACKING = 13; - public static final int MSG_STOP_PRINTER_STATE_TRACKING = 14; + + public static final int MSG_CREATE_PRINTER_DISCOVERY_SESSION = 5; + public static final int MSG_START_PRINTER_DISCOVERY = 6; + public static final int MSG_DISPATCH_CREATE_PRINTER_DISCOVERY_SESSION = 7; + public static final int MSG_DISPATCH_DESTROY_PRINTER_DISCOVERY_SESSION = 8; + public static final int MSG_DISPATCH_START_PRINTER_DISCOVERY = 9; + public static final int MSG_DISPATCH_STOP_PRINTER_DISCOVERY = 10; + public static final int MSG_VALIDATE_PRINTERS = 11; + public static final int MSG_START_PRINTER_STATE_TRACKING = 12; + public static final int MSG_STOP_PRINTER_STATE_TRACKING = 13; SessionHandler(Looper looper) { super(looper, null, false); @@ -1048,11 +975,6 @@ final class UserState implements PrintSpoolerCallbacks { handleDispatchPrintersRemoved(removedPrinterIds); } break; - case MSG_DISPATCH_PRINTERS_UPDATED: { - List updatedPrinters = (List) message.obj; - handleDispatchPrintersUpdated(updatedPrinters); - } break; - case MSG_CREATE_PRINTER_DISCOVERY_SESSION: { RemotePrintService service = (RemotePrintService) message.obj; service.createPrinterDiscoverySession(); -- cgit v1.1