diff options
| author | Svetoslav Ganov <svetoslavganov@google.com> | 2013-10-10 17:10:59 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-10-10 17:10:59 +0000 |
| commit | 0ea16e9e763b5815707971f503d5408dc1b66c10 (patch) | |
| tree | 9de82aacbaa54a00b982792d733884033ffac23b /core/java/android | |
| parent | 94ba89763e2bd660662fbcf293968d3e8423ef68 (diff) | |
| parent | a18661d5922e5ae24ccce8e815aeba437a2fba82 (diff) | |
Merge "Coalescing multiple print job notifications." into klp-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/print/IPrintSpooler.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/print/PrintJobInfo.java | 29 | ||||
| -rw-r--r-- | core/java/android/print/PrintManager.java | 110 |
3 files changed, 98 insertions, 42 deletions
diff --git a/core/java/android/print/IPrintSpooler.aidl b/core/java/android/print/IPrintSpooler.aidl index 96b168d3908a..5f06b834ade1 100644 --- a/core/java/android/print/IPrintSpooler.aidl +++ b/core/java/android/print/IPrintSpooler.aidl @@ -48,4 +48,5 @@ oneway interface IPrintSpooler { int sequence); void writePrintJobData(in ParcelFileDescriptor fd, in PrintJobId printJobId); void setClient(IPrintSpoolerClient client); + void setPrintJobCancelling(in PrintJobId printJobId, boolean cancelling); } diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java index ccb4f440df05..92bda4042c92 100644 --- a/core/java/android/print/PrintJobInfo.java +++ b/core/java/android/print/PrintJobInfo.java @@ -153,6 +153,9 @@ public final class PrintJobInfo implements Parcelable { /** Information about the printed document. */ private PrintDocumentInfo mDocumentInfo; + /** Whether we are trying to cancel this print job. */ + private boolean mCanceling; + /** @hide*/ public PrintJobInfo() { /* do nothing */ @@ -174,6 +177,7 @@ public final class PrintJobInfo implements Parcelable { mPageRanges = other.mPageRanges; mAttributes = other.mAttributes; mDocumentInfo = other.mDocumentInfo; + mCanceling = other.mCanceling; } private PrintJobInfo(Parcel parcel) { @@ -201,6 +205,7 @@ public final class PrintJobInfo implements Parcelable { if (parcel.readInt() == 1) { mDocumentInfo = PrintDocumentInfo.CREATOR.createFromParcel(parcel); } + mCanceling = (parcel.readInt() == 1); } /** @@ -503,6 +508,28 @@ public final class PrintJobInfo implements Parcelable { mDocumentInfo = info; } + /** + * Gets whether this print is being cancelled. + * + * @return True if the print job is being cancelled. + * + * @hide + */ + public boolean isCancelling() { + return mCanceling; + } + + /** + * Sets whether this print is being cancelled. + * + * @param cancelling True if the print job is being cancelled. + * + * @hide + */ + public void setCancelling(boolean cancelling) { + mCanceling = cancelling; + } + @Override public int describeContents() { return 0; @@ -539,6 +566,7 @@ public final class PrintJobInfo implements Parcelable { } else { parcel.writeInt(0); } + parcel.writeInt(mCanceling ? 1 : 0); } @Override @@ -556,6 +584,7 @@ public final class PrintJobInfo implements Parcelable { ? mAttributes.toString() : null)); builder.append(", documentInfo: " + (mDocumentInfo != null ? mDocumentInfo.toString() : null)); + builder.append(", cancelling: " + mCanceling); builder.append(", pages: " + (mPageRanges != null ? Arrays.toString(mPageRanges) : null)); builder.append("}"); diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index 9c7c1feb474f..1cb4e8d6e651 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -48,6 +48,7 @@ import java.util.Map; * <p> * To obtain a handle to the print manager do the following: * </p> + * * <pre> * PrintManager printManager = * (PrintManager) context.getSystemService(Context.PRINT_SERVICE); @@ -59,6 +60,9 @@ public final class PrintManager { private static final boolean DEBUG = false; + private static final int MSG_START_PRINT_JOB_CONFIG_ACTIVITY = 1; + private static final int MSG_NOTIFY_PRINT_JOB_STATE_CHANGED = 2; + /** @hide */ public static final int APP_ID_ANY = -2; @@ -81,18 +85,17 @@ public final class PrintManager { /** * Callback notifying that a print job state changed. - * + * * @param printJobId The print job id. */ - public void onPrintJobsStateChanged(PrintJobId printJobId); + public void onPrintJobStateChanged(PrintJobId printJobId); } /** * Creates a new instance. - * + * * @param context The current context in which to operate. * @param service The backing system service. - * * @hide */ public PrintManager(Context context, IPrintManager service, int userId, int appId) { @@ -104,14 +107,29 @@ public final class PrintManager { mHandler = new Handler(context.getMainLooper(), null, false) { @Override public void handleMessage(Message message) { - SomeArgs args = (SomeArgs) message.obj; - Context context = (Context) args.arg1; - IntentSender intent = (IntentSender) args.arg2; - args.recycle(); - try { - context.startIntentSender(intent, null, 0, 0, 0); - } catch (SendIntentException sie) { - Log.e(LOG_TAG, "Couldn't start print job config activity.", sie); + switch (message.what) { + case MSG_START_PRINT_JOB_CONFIG_ACTIVITY: { + SomeArgs args = (SomeArgs) message.obj; + Context context = (Context) args.arg1; + IntentSender intent = (IntentSender) args.arg2; + args.recycle(); + try { + context.startIntentSender(intent, null, 0, 0, 0); + } catch (SendIntentException sie) { + Log.e(LOG_TAG, "Couldn't start print job config activity.", sie); + } + } + break; + + case MSG_NOTIFY_PRINT_JOB_STATE_CHANGED: { + SomeArgs args = (SomeArgs) message.obj; + PrintJobStateChangeListener listener = + (PrintJobStateChangeListener) args.arg1; + PrintJobId printJobId = (PrintJobId) args.arg2; + args.recycle(); + listener.onPrintJobStateChanged(printJobId); + } + break; } } }; @@ -119,10 +137,10 @@ public final class PrintManager { /** * Creates an instance that can access all print jobs. - * + * * @param userId The user id for which to get all print jobs. - * @return An instance if the caller has the permission to access - * all print jobs, null otherwise. + * @return An instance if the caller has the permission to access all print + * jobs, null otherwise. * @hide */ public PrintManager getGlobalPrintManagerForUser(int userId) { @@ -140,9 +158,8 @@ public final class PrintManager { /** * Adds a listener for observing the state of print jobs. - * + * * @param listener The listener to add. - * * @hide */ public void addPrintJobStateChangeListener(PrintJobStateChangeListener listener) { @@ -151,7 +168,7 @@ public final class PrintManager { PrintJobStateChangeListenerWrapper>(); } PrintJobStateChangeListenerWrapper wrappedListener = - new PrintJobStateChangeListenerWrapper(listener); + new PrintJobStateChangeListenerWrapper(listener, mHandler); try { mService.addPrintJobStateChangeListener(wrappedListener, mAppId, mUserId); mPrintJobStateChangeListeners.put(listener, wrappedListener); @@ -162,9 +179,8 @@ public final class PrintManager { /** * Removes a listener for observing the state of print jobs. - * + * * @param listener The listener to remove. - * * @hide */ public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) { @@ -188,11 +204,9 @@ public final class PrintManager { /** * Gets a print job given its id. - * + * * @return The print job list. - * * @see PrintJob - * * @hide */ public PrintJob getPrintJob(PrintJobId printJobId) { @@ -209,9 +223,8 @@ public final class PrintManager { /** * Gets the print jobs for this application. - * + * * @return The print job list. - * * @see PrintJob */ public List<PrintJob> getPrintJobs() { @@ -249,9 +262,9 @@ public final class PrintManager { } /** - * Creates a print job for printing a {@link PrintDocumentAdapter} with default print - * attributes. - * + * Creates a print job for printing a {@link PrintDocumentAdapter} with + * default print attributes. + * * @param printJobName A name for the new print job. * @param documentAdapter An adapter that emits the document to print. * @param attributes The default print job attributes. @@ -279,9 +292,8 @@ public final class PrintManager { /** * Gets the list of enabled print services. - * + * * @return The enabled service list or an empty list. - * * @hide */ public List<PrintServiceInfo> getEnabledPrintServices() { @@ -298,9 +310,8 @@ public final class PrintManager { /** * Gets the list of installed print services. - * + * * @return The installed service list or an empty list. - * * @hide */ public List<PrintServiceInfo> getInstalledPrintServices() { @@ -337,7 +348,8 @@ public final class PrintManager { SomeArgs args = SomeArgs.obtain(); args.arg1 = manager.mContext; args.arg2 = intent; - manager.mHandler.obtainMessage(0, args).sendToTarget(); + manager.mHandler.obtainMessage(MSG_START_PRINT_JOB_CONFIG_ACTIVITY, + args).sendToTarget(); } } } @@ -348,7 +360,8 @@ public final class PrintManager { private CancellationSignal mLayoutOrWriteCancellation; - private PrintDocumentAdapter mDocumentAdapter; // Strong reference OK - cleared in finish() + private PrintDocumentAdapter mDocumentAdapter; // Strong reference OK - + // cleared in finish() private Handler mHandler; // Strong reference OK - cleared in finish() @@ -537,7 +550,8 @@ public final class PrintManager { switch (message.what) { case MSG_START: { mDocumentAdapter.onStart(); - } break; + } + break; case MSG_LAYOUT: { final CancellationSignal cancellation; @@ -559,14 +573,15 @@ public final class PrintManager { new MyLayoutResultCallback(layoutSpec.callback, layoutSpec.sequence), layoutSpec.metadata); } - } break; + } + break; case MSG_WRITE: { final CancellationSignal cancellation; final WriteSpec writeSpec; synchronized (mLock) { - writeSpec= mLastWriteSpec; + writeSpec = mLastWriteSpec; mLastWriteSpec = null; cancellation = new CancellationSignal(); mLayoutOrWriteCancellation = cancellation; @@ -580,7 +595,8 @@ public final class PrintManager { cancellation, new MyWriteResultCallback(writeSpec.callback, writeSpec.fd, writeSpec.sequence)); } - } break; + } + break; case MSG_FINISH: { if (DEBUG) { @@ -588,7 +604,8 @@ public final class PrintManager { } mDocumentAdapter.onFinish(); doFinish(); - } break; + } + break; default: { throw new IllegalArgumentException("Unknown message: " @@ -727,17 +744,26 @@ public final class PrintManager { private static final class PrintJobStateChangeListenerWrapper extends IPrintJobStateChangeListener.Stub { private final WeakReference<PrintJobStateChangeListener> mWeakListener; + private final WeakReference<Handler> mWeakHandler; - public PrintJobStateChangeListenerWrapper(PrintJobStateChangeListener listener) { + public PrintJobStateChangeListenerWrapper(PrintJobStateChangeListener listener, + Handler handler) { mWeakListener = new WeakReference<PrintJobStateChangeListener>(listener); + mWeakHandler = new WeakReference<Handler>(handler); } @Override public void onPrintJobStateChanged(PrintJobId printJobId) { + Handler handler = mWeakHandler.get(); PrintJobStateChangeListener listener = mWeakListener.get(); - if (listener != null) { - listener.onPrintJobsStateChanged(printJobId); + if (handler != null && listener != null) { + SomeArgs args = SomeArgs.obtain(); + args.arg1 = listener; + args.arg2 = printJobId; + handler.obtainMessage(MSG_NOTIFY_PRINT_JOB_STATE_CHANGED, + args).sendToTarget(); } } } + } |
