diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2013-09-03 18:02:57 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-09-03 18:02:58 +0000 |
commit | ad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d (patch) | |
tree | a3b2194050062741184305f55ad14752995a8c51 /services | |
parent | e1de4b3216055d53e21ace27c0281359847332a2 (diff) | |
parent | 9186d0cb2bd325d9b52da15dbd513937c1e42caa (diff) | |
download | frameworks_base-ad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d.zip frameworks_base-ad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d.tar.gz frameworks_base-ad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d.tar.bz2 |
Merge "Bug fixes in the printer dialog activity and fused printer loader." into klp-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/print/RemotePrintService.java | 12 | ||||
-rw-r--r-- | services/java/com/android/server/print/UserState.java | 45 |
2 files changed, 34 insertions, 23 deletions
diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java index 14af9d8..3c67aa9 100644 --- a/services/java/com/android/server/print/RemotePrintService.java +++ b/services/java/com/android/server/print/RemotePrintService.java @@ -163,7 +163,7 @@ final class RemotePrintService implements DeathRecipient { if (isBound()) { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleOnAllPrintJobsHandled()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] onAllPrintJobsHandled()"); } // If the service has a printer discovery session @@ -185,7 +185,7 @@ final class RemotePrintService implements DeathRecipient { // which means that there are no print jobs to be cancelled. if (isBound()) { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleRequestCancelPrintJob()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] requestCancelPrintJob()"); } try { mPrintService.requestCancelPrintJob(printJob); @@ -215,7 +215,7 @@ final class RemotePrintService implements DeathRecipient { }); } else { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleOnPrintJobQueued()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] onPrintJobQueued()"); } try { mPrintService.onPrintJobQueued(printJob); @@ -358,7 +358,7 @@ final class RemotePrintService implements DeathRecipient { }); } else { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleValidatePrinters()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] validatePrinters()"); } try { mPrintService.validatePrinters(printerIds); @@ -385,7 +385,7 @@ final class RemotePrintService implements DeathRecipient { }); } else { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleStartPrinterTracking()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] startPrinterTracking()"); } try { mPrintService.startPrinterStateTracking(printerId); @@ -412,7 +412,7 @@ final class RemotePrintService implements DeathRecipient { }); } else { if (DEBUG) { - Slog.i(LOG_TAG, "[user: " + mUserId + "] handleStopPrinterTracking()"); + Slog.i(LOG_TAG, "[user: " + mUserId + "] stopPrinterTracking()"); } try { mPrintService.stopPrinterStateTracking(printerId); diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java index 7d94a42..b9c676d 100644 --- a/services/java/com/android/server/print/UserState.java +++ b/services/java/com/android/server/print/UserState.java @@ -62,7 +62,7 @@ final class UserState implements PrintSpoolerCallbacks { private static final boolean DEBUG = true && Build.IS_DEBUGGABLE; - private static final int MAX_ITEMS_PER_CALLBACK = 100; + private static final int MAX_ITEMS_PER_CALLBACK = 50; private static final char COMPONENT_NAME_SEPARATOR = ':'; @@ -576,10 +576,12 @@ final class UserState implements PrintSpoolerCallbacks { // Remember we got a start request to match with an end. mStartedPrinterDiscoveryTokens.add(observer.asBinder()); + // The service are already performing discovery - nothing to do. if (mStartedPrinterDiscoveryTokens.size() > 1) { return; } + List<RemotePrintService> services = new ArrayList<RemotePrintService>( mActiveServices.values()); SomeArgs args = SomeArgs.obtain(); @@ -858,11 +860,7 @@ final class UserState implements PrintSpoolerCallbacks { final int observerCount = mDiscoveryObservers.beginBroadcast(); for (int i = 0; i < observerCount; i++) { IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i); - try { - observer.onPrintersAdded(addedPrinters); - } catch (RemoteException re) { - Log.i(LOG_TAG, "Error dispatching added printers", re); - } + handlePrintersAdded(observer, addedPrinters); } mDiscoveryObservers.finishBroadcast(); } @@ -871,11 +869,7 @@ final class UserState implements PrintSpoolerCallbacks { final int observerCount = mDiscoveryObservers.beginBroadcast(); for (int i = 0; i < observerCount; i++) { IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i); - try { - observer.onPrintersRemoved(removedPrinterIds); - } catch (RemoteException re) { - Log.i(LOG_TAG, "Error dispatching removed printers", re); - } + handlePrintersRemoved(observer, removedPrinterIds); } mDiscoveryObservers.finishBroadcast(); } @@ -884,11 +878,7 @@ final class UserState implements PrintSpoolerCallbacks { final int observerCount = mDiscoveryObservers.beginBroadcast(); for (int i = 0; i < observerCount; i++) { IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i); - try { - observer.onPrintersUpdated(updatedPrinters); - } catch (RemoteException re) { - Log.i(LOG_TAG, "Error dispatching updated printers", re); - } + handlePrintersUpdated(observer, updatedPrinters); } mDiscoveryObservers.finishBroadcast(); } @@ -957,7 +947,7 @@ final class UserState implements PrintSpoolerCallbacks { final int start = i * MAX_ITEMS_PER_CALLBACK; final int end = Math.min(start + MAX_ITEMS_PER_CALLBACK, printerCount); List<PrinterInfo> subPrinters = printers.subList(start, end); - observer.onPrintersAdded(subPrinters); + observer.onPrintersAdded(subPrinters); } } } catch (RemoteException re) { @@ -986,6 +976,27 @@ final class UserState implements PrintSpoolerCallbacks { } } + private void handlePrintersUpdated(IPrinterDiscoveryObserver observer, + List<PrinterInfo> 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<PrinterInfo> 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; |