diff options
4 files changed, 24 insertions, 10 deletions
diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java index e571986..9f935c8 100644 --- a/core/java/android/print/PrintJobInfo.java +++ b/core/java/android/print/PrintJobInfo.java @@ -131,7 +131,7 @@ public final class PrintJobInfo implements Parcelable { /** The name of the printer - internally used */ private String mPrinterName; - /** The status of the print job. */ + /** The state of the print job. */ private int mState; /** The id of the app that created the job. */ @@ -555,7 +555,7 @@ public final class PrintJobInfo implements Parcelable { builder.append("PrintJobInfo{"); builder.append("label: ").append(mLabel); builder.append(", id: ").append(mId); - builder.append(", status: ").append(stateToString(mState)); + builder.append(", state: ").append(stateToString(mState)); builder.append(", printer: " + mPrinterId); builder.append(", tag: ").append(mTag); builder.append(", creationTime: " + mCreationTime); @@ -583,6 +583,9 @@ public final class PrintJobInfo implements Parcelable { case STATE_STARTED: { return "STATE_STARTED"; } + case STATE_BLOCKED: { + return "STATE_BLOCKED"; + } case STATE_FAILED: { return "STATE_FAILED"; } diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java index 1233da2..dbd8278 100644 --- a/core/java/android/print/PrintManager.java +++ b/core/java/android/print/PrintManager.java @@ -146,11 +146,14 @@ public final class PrintManager { switch (message.what) { case MSG_NOTIFY_PRINT_JOB_STATE_CHANGED: { SomeArgs args = (SomeArgs) message.obj; - PrintJobStateChangeListener listener = - (PrintJobStateChangeListener) args.arg1; - PrintJobId printJobId = (PrintJobId) args.arg2; + PrintJobStateChangeListenerWrapper wrapper = + (PrintJobStateChangeListenerWrapper) args.arg1; + PrintJobStateChangeListener listener = wrapper.getListener(); + if (listener != null) { + PrintJobId printJobId = (PrintJobId) args.arg2; + listener.onPrintJobStateChanged(printJobId); + } args.recycle(); - listener.onPrintJobStateChanged(printJobId); } break; } } @@ -217,6 +220,7 @@ public final class PrintManager { if (mPrintJobStateChangeListeners.isEmpty()) { mPrintJobStateChangeListeners = null; } + wrappedListener.destroy(); try { mService.removePrintJobStateChangeListener(wrappedListener, mUserId); } catch (RemoteException re) { @@ -769,12 +773,19 @@ public final class PrintManager { PrintJobStateChangeListener listener = mWeakListener.get(); if (handler != null && listener != null) { SomeArgs args = SomeArgs.obtain(); - args.arg1 = listener; + args.arg1 = this; args.arg2 = printJobId; handler.obtainMessage(MSG_NOTIFY_PRINT_JOB_STATE_CHANGED, args).sendToTarget(); } } - } + public void destroy() { + mWeakListener.clear(); + } + + public PrintJobStateChangeListener getListener() { + return mWeakListener.get(); + } + } } diff --git a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java index 4aa8686..968a8bf 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java +++ b/packages/PrintSpooler/src/com/android/printspooler/NotificationController.java @@ -189,7 +189,7 @@ public class NotificationController { if (i == printJobCount - 1) { builder.setLargeIcon(((BitmapDrawable) mContext.getResources().getDrawable( computeNotificationIcon(printJob))).getBitmap()); - builder.setSmallIcon(com.android.internal.R.drawable.ic_print); + builder.setSmallIcon(computeNotificationIcon(printJob)); builder.setContentTitle(computeNotificationTitle(printJob)); builder.setContentText(printJob.getPrinterName()); } diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java index 5b9dc28..1bb61d2 100644 --- a/services/java/com/android/server/print/RemotePrintService.java +++ b/services/java/com/android/server/print/RemotePrintService.java @@ -682,7 +682,7 @@ final class RemotePrintService implements DeathRecipient { final long identity = Binder.clearCallingIdentity(); try { return service.mSpooler.getPrintJobInfos(service.mComponentName, - PrintJobInfo.STATE_ANY_VISIBLE_TO_CLIENTS, PrintManager.APP_ID_ANY); + PrintJobInfo.STATE_ANY_SCHEDULED, PrintManager.APP_ID_ANY); } finally { Binder.restoreCallingIdentity(identity); } |