From d270cb9264f762257d1aadbeba9c4b38866e171c Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Thu, 31 Oct 2013 14:27:16 -0700 Subject: [PATCH] Cancel current work in PrintDocumentAdatper if printing is cancelled. Layout and write may take some time during which the user can cancel printing. Currently we wait for the last operation, being write or layout, to complete before closing the print dialog. Now in such a scenario we request a cancellation of the ongoing operation. bug:11329523 Change-Id: Ia9d747163cc73509369a86c8b5afc83b7ee54859 --- core/java/android/print/IPrintDocumentAdapter.aidl | 1 + core/java/android/print/PrintManager.java | 12 ++++++++++++ .../android/printspooler/PrintJobConfigActivity.java | 3 +++ .../printspooler/RemotePrintDocumentAdapter.java | 11 +++++++++++ 4 files changed, 27 insertions(+) diff --git a/core/java/android/print/IPrintDocumentAdapter.aidl b/core/java/android/print/IPrintDocumentAdapter.aidl index 9d384fba874df..2b95c1244f795 100644 --- a/core/java/android/print/IPrintDocumentAdapter.aidl +++ b/core/java/android/print/IPrintDocumentAdapter.aidl @@ -37,4 +37,5 @@ oneway interface IPrintDocumentAdapter { void write(in PageRange[] pages, in ParcelFileDescriptor fd, IWriteResultCallback callback, int sequence); void finish(); + void cancel(); } diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index bbfc3072b898d..d6d56bb42e2cf 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -615,6 +615,18 @@ public final class PrintManager { } } + @Override + public void cancel() { + // Start not called or finish called or destroyed - nothing to do. + if (!mStartReqeusted || mFinishRequested || mDestroyed) { + return; + } + // Request cancellation of pending work if needed. + synchronized (mLock) { + cancelPreviousCancellableOperationLocked(); + } + } + @Override public void onActivityPaused(Activity activity) { /* do nothing */ diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java index 8f263612e5a04..6d0ecd77bad20 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java @@ -357,6 +357,9 @@ public class PrintJobConfigActivity extends Activity { } public void cancel() { + if (isWorking()) { + mRemotePrintAdapter.cancel(); + } mControllerState = CONTROLLER_STATE_CANCELLED; } diff --git a/packages/PrintSpooler/src/com/android/printspooler/RemotePrintDocumentAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/RemotePrintDocumentAdapter.java index fd14af929d1db..d9ccb5dad5907 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/RemotePrintDocumentAdapter.java +++ b/packages/PrintSpooler/src/com/android/printspooler/RemotePrintDocumentAdapter.java @@ -137,4 +137,15 @@ final class RemotePrintDocumentAdapter { Log.e(LOG_TAG, "Error calling finish()", re); } } + + public void cancel() { + if (DEBUG) { + Log.i(LOG_TAG, "cancel()"); + } + try { + mRemoteInterface.cancel(); + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error calling cancel()", re); + } + } }