diff options
Diffstat (limited to 'core/java/android/print/PrintManager.java')
-rw-r--r-- | core/java/android/print/PrintManager.java | 117 |
1 files changed, 112 insertions, 5 deletions
diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index 5429155..a015388 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -30,6 +30,7 @@ import android.print.PrintDocumentAdapter.LayoutResultCallback; import android.print.PrintDocumentAdapter.WriteResultCallback; import android.printservice.PrintServiceInfo; import android.text.TextUtils; +import android.util.ArrayMap; import android.util.Log; import com.android.internal.os.SomeArgs; @@ -40,6 +41,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; /** * System level service for accessing the printing capabilities of the platform. @@ -70,6 +72,19 @@ public final class PrintManager { private final Handler mHandler; + private Map<PrintJobStateChangeListener, PrintJobStateChangeListenerWrapper> mPrintJobStateChangeListeners; + + /** @hide */ + public interface PrintJobStateChangeListener { + + /** + * Callback notifying that a print job state changed. + * + * @param printJobId The print job id. + */ + public void onPrintJobsStateChanged(PrintJobId printJobId); + } + /** * Creates a new instance. * @@ -106,7 +121,6 @@ public final class PrintManager { * @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. - * * @hide */ public PrintManager getGlobalPrintManagerForUser(int userId) { @@ -123,6 +137,75 @@ 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) { + if (mPrintJobStateChangeListeners == null) { + mPrintJobStateChangeListeners = new ArrayMap<PrintJobStateChangeListener, + PrintJobStateChangeListenerWrapper>(); + } + PrintJobStateChangeListenerWrapper wrappedListener = + new PrintJobStateChangeListenerWrapper(listener); + try { + mService.addPrintJobStateChangeListener(wrappedListener, mAppId, mUserId); + mPrintJobStateChangeListeners.put(listener, wrappedListener); + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error adding print job state change listener", re); + } + } + + /** + * Removes a listener for observing the state of print jobs. + * + * @param listener The listener to remove. + * + * @hide + */ + public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) { + if (mPrintJobStateChangeListeners == null) { + return; + } + PrintJobStateChangeListenerWrapper wrappedListener = + mPrintJobStateChangeListeners.remove(listener); + if (wrappedListener == null) { + return; + } + if (mPrintJobStateChangeListeners.isEmpty()) { + mPrintJobStateChangeListeners = null; + } + try { + mService.removePrintJobStateChangeListener(wrappedListener, mUserId); + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error removing print job state change listener", re); + } + } + + /** + * Gets a print job given its id. + * + * @return The print job list. + * + * @see PrintJob + * + * @hide + */ + public PrintJob getPrintJob(PrintJobId printJobId) { + try { + PrintJobInfo printJob = mService.getPrintJobInfo(printJobId, mAppId, mUserId); + if (printJob != null) { + return new PrintJob(printJob, this); + } + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error getting print job", re); + } + return null; + } + + /** * Gets the print jobs for this application. * * @return The print job list. @@ -155,6 +238,14 @@ public final class PrintManager { } } + void restartPrintJob(PrintJobId printJobId) { + try { + mService.restartPrintJob(printJobId, mAppId, mUserId); + } catch (RemoteException re) { + Log.e(LOG_TAG, "Error restarting a print job: " + printJobId, re); + } + } + /** * Creates a print job for printing a {@link PrintDocumentAdapter} with default print * attributes. @@ -163,7 +254,6 @@ public final class PrintManager { * @param documentAdapter An adapter that emits the document to print. * @param attributes The default print job attributes. * @return The created print job on success or null on failure. - * * @see PrintJob */ public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter, @@ -220,11 +310,11 @@ public final class PrintManager { } @Override - public void startPrintJobConfigActivity(IntentSender intent) { + public void startPrintJobConfigActivity(IntentSender intent) { PrintManager manager = mWeakPrintManager.get(); if (manager != null) { SomeArgs args = SomeArgs.obtain(); - args.arg1 = manager.mContext; + args.arg1 = manager.mContext; args.arg2 = intent; manager.mHandler.obtainMessage(0, args).sendToTarget(); } @@ -271,7 +361,7 @@ public final class PrintManager { @Override public void write(PageRange[] pages, ParcelFileDescriptor fd, - IWriteResultCallback callback, int sequence) { + IWriteResultCallback callback, int sequence) { synchronized (mLock) { if (mLayoutOrWriteCancellation != null) { mLayoutOrWriteCancellation.cancel(); @@ -492,4 +582,21 @@ public final class PrintManager { } } } + + private static final class PrintJobStateChangeListenerWrapper extends + IPrintJobStateChangeListener.Stub { + private final WeakReference<PrintJobStateChangeListener> mWeakListener; + + public PrintJobStateChangeListenerWrapper(PrintJobStateChangeListener listener) { + mWeakListener = new WeakReference<PrintJobStateChangeListener>(listener); + } + + @Override + public void onPrintJobStateChanged(PrintJobId printJobId) { + PrintJobStateChangeListener listener = mWeakListener.get(); + if (listener != null) { + listener.onPrintJobsStateChanged(printJobId); + } + } + } } |