From db85ad56adb74f0310b604228dac8bbc03ac2769 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 1 Oct 2013 00:27:21 -0700 Subject: Fail print jobs targeted to unavailable services. It is possible that a print job is scheduled for handling, i.e. it is queued, after the target print service is uninstalled or disabled. In case like this we fail the print job with an appropriate error message. Now the user can cancel the job when he/she sees the notification or the status in the print settings. Trying to restart such a job will end up failing it again with the same error message. So the user will just have to canel the print job. This apporach quarantees that the user is informed for the failure and also is much simpler than trying to update the UI when print job's target serivce is uninstalled. For example, the settings UI has to be updated as well as the notifications. Also due to the async nature of the system this we cannot completely avoid having a restart option for a print job whose target service is gone. This scenario is very unlikely but still we have to handle it. bug:11012251 Change-Id: Id8c8c3cff75e0b6325552676b130ff1406edc069 --- services/java/com/android/server/print/UserState.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'services/java/com') diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java index bc70fe3..3b0ee24 100644 --- a/services/java/com/android/server/print/UserState.java +++ b/services/java/com/android/server/print/UserState.java @@ -134,6 +134,11 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { } if (service != null) { service.onPrintJobQueued(printJob); + } else { + // The service for the job is no longer enabled, so just + // fail the job with the appropriate message. + mSpooler.setPrintJobState(printJob.getId(), PrintJobInfo.STATE_FAILED, + mContext.getString(R.string.reason_service_unavailable)); } } @@ -779,7 +784,7 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks { for (int i = 0; i < printJobCount; i++) { PrintJobInfo printJob = printJobs.get(i); mSpooler.setPrintJobState(printJob.getId(), PrintJobInfo.STATE_FAILED, - mContext.getString(R.string.reason_unknown)); + mContext.getString(R.string.reason_service_unavailable)); } } finally { Binder.restoreCallingIdentity(identity); -- cgit v1.1