am 64655e81: am 65d7b8d0: Merge "The list of active print jobs in print service retunring wrong result." into klp-dev

* commit '64655e81640ad5623d6a1b03f04320c16be8b101':
  The list of active print jobs in print service retunring wrong result.
diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java
index e571986be..9f935c8 100644
--- a/core/java/android/print/PrintJobInfo.java
+++ b/core/java/android/print/PrintJobInfo.java
@@ -131,7 +131,7 @@
     /** 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 @@
         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 @@
             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 @@
                 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 @@
         if (mPrintJobStateChangeListeners.isEmpty()) {
             mPrintJobStateChangeListeners = null;
         }
+        wrappedListener.destroy();
         try {
             mService.removePrintJobStateChangeListener(wrappedListener, mUserId);
         } catch (RemoteException re) {
@@ -769,12 +773,19 @@
             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 @@
             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 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);
                 }