From 9b6d3a153f44010a75907c6a9742c89a57d4e5ee Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Sat, 12 Oct 2013 12:35:41 -0700 Subject: [PATCH] Fail only scheduled print jobs, i.e. handed to a service, if the service is disabled. When a print service is disabled we assume all print jobs for it failed as we have no way to know what happens to them. However we are also failing created print jobs, i.e. ones not given to the service. Such jobs are in process of construction and the print dialog is up. We should not fail such jobs as the dialog can still modify their state and potentially select a print from a different service. Therefore, we leave them alone and they will be failed if when constructed are passed to a disabled/uninstalled service. bug:11197432 Change-Id: Ie4fe54327e3e25776b1dd572be2dfafdd700c2e5 --- core/java/android/print/PrintJobInfo.java | 8 ++++++++ .../com/android/printspooler/PrintSpoolerService.java | 10 +++++++++- services/java/com/android/server/print/UserState.java | 8 ++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java index 4693556492e5d..e571986beae05 100644 --- a/core/java/android/print/PrintJobInfo.java +++ b/core/java/android/print/PrintJobInfo.java @@ -47,6 +47,14 @@ public final class PrintJobInfo implements Parcelable { */ public static final int STATE_ANY_ACTIVE = -3; + /** + * Constant for matching any scheduled, i.e. delivered to a print + * service, print job state. + * + * @hide + */ + public static final int STATE_ANY_SCHEDULED = -4; + /** * Print job state: The print job is being created but not yet * ready to be printed. diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java index a4d557f92e661..04b50b3f47142 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java +++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java @@ -268,7 +268,9 @@ public final class PrintSpoolerService extends Service { || (state == PrintJobInfo.STATE_ANY_VISIBLE_TO_CLIENTS && isStateVisibleToUser(printJob.getState())) || (state == PrintJobInfo.STATE_ANY_ACTIVE - && isActiveState(printJob.getState())); + && isActiveState(printJob.getState())) + || (state == PrintJobInfo.STATE_ANY_SCHEDULED + && isScheduledState(printJob.getState())); if (sameComponent && sameAppId && sameState) { if (foundPrintJobs == null) { foundPrintJobs = new ArrayList(); @@ -554,6 +556,12 @@ public final class PrintSpoolerService extends Service { || printJobState == PrintJobInfo.STATE_QUEUED); } + private boolean isScheduledState(int printJobState) { + return printJobState == PrintJobInfo.STATE_QUEUED + || printJobState == PrintJobInfo.STATE_STARTED + || printJobState == PrintJobInfo.STATE_BLOCKED; + } + private boolean isActiveState(int printJobState) { return printJobState == PrintJobInfo.STATE_CREATED || printJobState == PrintJobInfo.STATE_QUEUED diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java index 1b373edf5d54f..b894855d6fe32 100644 --- a/services/java/com/android/server/print/UserState.java +++ b/services/java/com/android/server/print/UserState.java @@ -798,17 +798,17 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { BackgroundThread.getHandler().post(new Runnable() { @Override public void run() { - failActivePrintJobsForServiceInternal(serviceName); + failScheduledPrintJobsForServiceInternal(serviceName); } }); } else { - failActivePrintJobsForServiceInternal(serviceName); + failScheduledPrintJobsForServiceInternal(serviceName); } } - private void failActivePrintJobsForServiceInternal(ComponentName serviceName) { + private void failScheduledPrintJobsForServiceInternal(ComponentName serviceName) { List printJobs = mSpooler.getPrintJobInfos(serviceName, - PrintJobInfo.STATE_ANY_ACTIVE, PrintManager.APP_ID_ANY); + PrintJobInfo.STATE_ANY_SCHEDULED, PrintManager.APP_ID_ANY); if (printJobs == null) { return; }