Merge "New window cling for immersive mode." into klp-dev
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/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 43bd735..40a705c 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -79,7 +79,7 @@
         letter.setTextSize(300);
         letter.setTextColor(0xFFFFFFFF);
         letter.setGravity(Gravity.CENTER);
-        letter.setText(String.valueOf(Build.VERSION.RELEASE).substring(0, 1));
+        letter.setText(String.valueOf(Build.ID).substring(0, 1));
 
         final int p = (int)(4 * metrics.density);
 
diff --git a/core/res/res/drawable-hdpi/stat_sys_adb_am.png b/core/res/res/drawable-hdpi/stat_sys_adb_am.png
index 382557e..dad614c 100644
--- a/core/res/res/drawable-hdpi/stat_sys_adb_am.png
+++ b/core/res/res/drawable-hdpi/stat_sys_adb_am.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_adb_am.png b/core/res/res/drawable-mdpi/stat_sys_adb_am.png
index 4380035..5482f34 100644
--- a/core/res/res/drawable-mdpi/stat_sys_adb_am.png
+++ b/core/res/res/drawable-mdpi/stat_sys_adb_am.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_adb_am.png b/core/res/res/drawable-xhdpi/stat_sys_adb_am.png
index 3222a76..e53f498 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_adb_am.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb_am.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/stat_sys_adb_am.png b/core/res/res/drawable-xxhdpi/stat_sys_adb_am.png
index e01ad386..d6018dd 100644
--- a/core/res/res/drawable-xxhdpi/stat_sys_adb_am.png
+++ b/core/res/res/drawable-xxhdpi/stat_sys_adb_am.png
Binary files differ
diff --git a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
index a0b59a7..da82e40 100644
--- a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
@@ -94,67 +94,12 @@
                     android:textAppearance="?android:attr/textAppearanceSmall"
                     android:textSize="12dp" />
             </RelativeLayout>
-            <LinearLayout
-                android:id="@+id/transient_rating"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:visibility="invisible">
-                <RatingBar
-                    android:id="@+id/transient_rating_bar_stars"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content" />
-                <LinearLayout
-                    android:id="@+id/transient_rating_thumbs"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal">
-                    <FrameLayout
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_weight="1">
-                        <ImageButton
-                            android:id="@+id/btn_thumbs_up"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center"
-                            android:src="@drawable/ic_media_previous"
-                            android:background="?android:attr/selectableItemBackground"
-                            android:minWidth="48dp"
-                            android:minHeight="48dp"
-                            android:contentDescription="@string/keyguard_accessibility_transport_thumbs_up_description"/>
-                    </FrameLayout>
-                    <FrameLayout
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_weight="1">
-                        <ImageButton
-                            android:id="@+id/btn_thumbs_down"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center"
-                            android:src="@drawable/ic_media_next"
-                            android:background="?android:attr/selectableItemBackground"
-                            android:minWidth="48dp"
-                            android:minHeight="48dp"
-                            android:contentDescription="@string/keyguard_accessibility_transport_thumbs_down_description"/>
-                    </FrameLayout>
-                </LinearLayout>
-                <ToggleButton
-                    android:id="@+id/transient_rating_heart"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:visibility="invisible"
-                    android:minWidth="48dp"
-                    android:minHeight="48dp"
-                    android:contentDescription="@string/keyguard_accessibility_transport_heart_description" />
-            </LinearLayout>
         </FrameLayout>
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:layout_marginTop="5dip">
+            android:layout_marginTop="4dp"
+            android:orientation="horizontal">
             <FrameLayout
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
index ca4892d..b7720ef 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
@@ -511,7 +511,7 @@
         if ((flags & flag) != 0) {
             view.setVisibility(View.VISIBLE);
         } else {
-            view.setVisibility(View.GONE);
+            view.setVisibility(View.INVISIBLE);
         }
     }
 
diff --git a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
index 8aa290c..0601467 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
@@ -254,6 +254,9 @@
         if (isStarted() && mDiscoverySession != null
                 && mDiscoverySession.isPrinterDiscoveryStarted()) {
             if (mTrackedPrinter != null) {
+                if (mTrackedPrinter.equals(printerId)) {
+                    return;
+                }
                 mDiscoverySession.stopPrinterStateTracking(mTrackedPrinter);
             }
             mTrackedPrinter = printerId;
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/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 135bc03..22a9950 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -760,6 +760,7 @@
                         public void run() {
                             mEditor.initialize();
                             mEditor.bindUi();
+                            mEditor.reselectCurrentPrinter();
                             mEditor.updateUi();
                         }
                     });
diff --git a/services/java/com/android/server/print/PrintManagerService.java b/services/java/com/android/server/print/PrintManagerService.java
index 7538caf..edd6b25 100644
--- a/services/java/com/android/server/print/PrintManagerService.java
+++ b/services/java/com/android/server/print/PrintManagerService.java
@@ -474,7 +474,8 @@
                     ComponentName component = new ComponentName(serviceInfo.packageName,
                             serviceInfo.name);
                     String label = serviceInfo.loadLabel(mContext.getPackageManager()).toString();
-                    showEnableInstalledPrintServiceNotification(component, label);
+                    showEnableInstalledPrintServiceNotification(component, label,
+                            getChangingUserId());
                 }
             }
 
@@ -622,12 +623,14 @@
     }
 
     private void showEnableInstalledPrintServiceNotification(ComponentName component,
-            String label) {
+            String label, int userId) {
+        UserHandle userHandle = new UserHandle(userId);
+
         Intent intent = new Intent(Settings.ACTION_PRINT_SETTINGS);
         intent.putExtra(EXTRA_PRINT_SERVICE_COMPONENT_NAME, component.flattenToString());
 
-        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
-                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT, null);
+        PendingIntent pendingIntent = PendingIntent.getActivityAsUser(mContext, 0, intent,
+                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT, null, userHandle);
 
         Notification.Builder builder = new Notification.Builder(mContext)
                 .setSmallIcon(R.drawable.ic_print)
@@ -642,6 +645,7 @@
                 .getSystemService(Context.NOTIFICATION_SERVICE);
 
         String notificationTag = getClass().getName() + ":" + component.flattenToString();
-        notificationManager.notify(notificationTag, 0, builder.build());
+        notificationManager.notifyAsUser(notificationTag, 0, builder.build(),
+                userHandle);
     }
 }
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);
                 }
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index b894855d..b69dcee 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -37,6 +37,7 @@
 import android.os.Message;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.print.IPrintDocumentAdapter;
 import android.print.IPrintJobStateChangeListener;
 import android.print.IPrinterDiscoveryObserver;
@@ -199,9 +200,10 @@
             intent.putExtra(PrintManager.EXTRA_PRINT_JOB, printJob);
             intent.putExtra(DocumentsContract.EXTRA_PACKAGE_NAME, packageName);
 
-            IntentSender intentSender = PendingIntent.getActivity(
+            IntentSender intentSender = PendingIntent.getActivityAsUser(
                     mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT
-                    | PendingIntent.FLAG_CANCEL_CURRENT).getIntentSender();
+                    | PendingIntent.FLAG_CANCEL_CURRENT, null, new UserHandle(mUserId))
+                    .getIntentSender();
 
             Bundle result = new Bundle();
             result.putParcelable(PrintManager.EXTRA_PRINT_JOB, printJob);