summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2013-09-03 18:02:57 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-09-03 18:02:58 +0000
commitad0ec16fbe27e69e22b90ad9f1b9e322d8c20e8d (patch)
treea3b2194050062741184305f55ad14752995a8c51 /services
parente1de4b3216055d53e21ace27c0281359847332a2 (diff)
parent9186d0cb2bd325d9b52da15dbd513937c1e42caa (diff)
downloadframeworks_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.java12
-rw-r--r--services/java/com/android/server/print/UserState.java45
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;