Merge "Removing per-user PiP component."
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 51fa425..8580085 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -95,8 +95,7 @@
      */
     private final Class<?>[] SERVICES_PER_USER = new Class[] {
             Dependency.class,
-            Recents.class,
-            PipUI.class
+            Recents.class
     };
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
index cc35f3c..9a8090d 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipUI.java
@@ -23,6 +23,7 @@
 import android.content.res.Configuration;
 
 import com.android.systemui.SystemUI;
+import com.android.systemui.recents.misc.SystemServicesProxy;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -35,7 +36,6 @@
     private BasePipManager mPipManager;
 
     private boolean mSupportsPip;
-    private boolean mIsLeanBackOnly;
 
     @Override
     public void start() {
@@ -45,6 +45,12 @@
             return;
         }
 
+        // Ensure that we are the primary user's SystemUI.
+        final int processUser = SystemServicesProxy.getInstance(mContext).getProcessUser();
+        if (!SystemServicesProxy.getInstance(mContext).isSystemUser(processUser)) {
+            throw new IllegalStateException("Non-primary Pip component not currently supported.");
+        }
+
         mPipManager = pm.hasSystemFeature(FEATURE_LEANBACK_ONLY)
                 ? com.android.systemui.pip.tv.PipManager.getInstance()
                 : com.android.systemui.pip.phone.PipManager.getInstance();
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
index 2597ce1..ebda2e8 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java
@@ -18,6 +18,7 @@
 
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ACTIONS;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_CONTROLLER_MESSENGER;
+import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_DISMISS_FRACTION;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_MOVEMENT_BOUNDS;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_SHOW_MENU;
 import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_STACK_BOUNDS;
@@ -113,24 +114,29 @@
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
-                case MESSAGE_SHOW_MENU:
-                    Pair<Rect, Rect> bounds = (Pair<Rect, Rect>) msg.obj;
-                    showMenu(bounds.first, bounds.second);
+                case MESSAGE_SHOW_MENU: {
+                    final Bundle data = (Bundle) msg.obj;
+                    showMenu(data.getParcelable(EXTRA_STACK_BOUNDS),
+                            data.getParcelable(EXTRA_MOVEMENT_BOUNDS));
                     break;
+                }
                 case MESSAGE_POKE_MENU:
                     cancelDelayedFinish();
                     break;
                 case MESSAGE_HIDE_MENU:
                     hideMenu();
                     break;
-                case MESSAGE_UPDATE_ACTIONS:
-                    Pair<Rect, ParceledListSlice> data = (Pair<Rect, ParceledListSlice>) msg.obj;
-                    setActions(data.first, data.second.getList());
+                case MESSAGE_UPDATE_ACTIONS: {
+                    final Bundle data = (Bundle) msg.obj;
+                    setActions(data.getParcelable(EXTRA_STACK_BOUNDS),
+                            ((ParceledListSlice) data.getParcelable(EXTRA_ACTIONS)).getList());
                     break;
-                case MESSAGE_UPDATE_DISMISS_FRACTION:
-                    float fraction = (float) msg.obj;
-                    updateDismissFraction(fraction);
+                }
+                case MESSAGE_UPDATE_DISMISS_FRACTION: {
+                    final Bundle data = (Bundle) msg.obj;
+                    updateDismissFraction(data.getFloat(EXTRA_DISMISS_FRACTION));
                     break;
+                }
             }
         }
     });
@@ -313,9 +319,8 @@
             mActions.addAll(actions.getList());
         }
         if (intent.getBooleanExtra(EXTRA_SHOW_MENU, false)) {
-            Rect stackBounds = Rect.unflattenFromString(intent.getStringExtra(EXTRA_STACK_BOUNDS));
-            Rect movementBounds = Rect.unflattenFromString(intent.getStringExtra(
-                    EXTRA_MOVEMENT_BOUNDS));
+            Rect stackBounds = intent.getParcelableExtra(EXTRA_STACK_BOUNDS);
+            Rect movementBounds = intent.getParcelableExtra(EXTRA_MOVEMENT_BOUNDS);
             showMenu(stackBounds, movementBounds);
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
index 724f453..e2069e2 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java
@@ -26,6 +26,7 @@
 import android.content.Intent;
 import android.content.pm.ParceledListSlice;
 import android.graphics.Rect;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.os.Messenger;
@@ -56,6 +57,7 @@
     public static final String EXTRA_STACK_BOUNDS = "stack_bounds";
     public static final String EXTRA_MOVEMENT_BOUNDS = "movement_bounds";
     public static final String EXTRA_SHOW_MENU = "show_menu";
+    public static final String EXTRA_DISMISS_FRACTION = "dismiss_fraction";
 
     public static final int MESSAGE_MENU_VISIBILITY_CHANGED = 100;
     public static final int MESSAGE_EXPAND_PIP = 101;
@@ -103,6 +105,8 @@
     private ParceledListSlice mMediaActions;
     private boolean mMenuVisible;
 
+    private Bundle mTmpData = new Bundle();
+
     private boolean mStartActivityRequested;
     private Messenger mToActivityMessenger;
     private Messenger mMessenger = new Messenger(new Handler() {
@@ -191,9 +195,11 @@
      */
     public void setDismissFraction(float fraction) {
         if (mToActivityMessenger != null) {
+            mTmpData.clear();
+            mTmpData.putFloat(EXTRA_DISMISS_FRACTION, fraction);
             Message m = Message.obtain();
             m.what = PipMenuActivity.MESSAGE_UPDATE_DISMISS_FRACTION;
-            m.obj = fraction;
+            m.obj = mTmpData;
             try {
                 mToActivityMessenger.send(m);
             } catch (RemoteException e) {
@@ -210,9 +216,12 @@
      */
     public void showMenu(Rect stackBounds, Rect movementBounds) {
         if (mToActivityMessenger != null) {
+            mTmpData.clear();
+            mTmpData.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
+            mTmpData.putParcelable(EXTRA_MOVEMENT_BOUNDS, movementBounds);
             Message m = Message.obtain();
             m.what = PipMenuActivity.MESSAGE_SHOW_MENU;
-            m.obj = new Pair<>(stackBounds, movementBounds);
+            m.obj = mTmpData;
             try {
                 mToActivityMessenger.send(m);
             } catch (RemoteException e) {
@@ -290,10 +299,10 @@
                 intent.putExtra(EXTRA_CONTROLLER_MESSENGER, mMessenger);
                 intent.putExtra(EXTRA_ACTIONS, resolveMenuActions());
                 if (stackBounds != null) {
-                    intent.putExtra(EXTRA_STACK_BOUNDS, stackBounds.flattenToString());
+                    intent.putExtra(EXTRA_STACK_BOUNDS, stackBounds);
                 }
                 if (movementBounds != null) {
-                    intent.putExtra(EXTRA_MOVEMENT_BOUNDS, movementBounds.flattenToString());
+                    intent.putExtra(EXTRA_MOVEMENT_BOUNDS, movementBounds);
                 }
                 intent.putExtra(EXTRA_SHOW_MENU, showMenu);
                 ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
@@ -327,9 +336,12 @@
                 Log.e(TAG, "Error showing PIP menu activity", e);
             }
 
+            mTmpData.clear();
+            mTmpData.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
+            mTmpData.putParcelable(EXTRA_ACTIONS, resolveMenuActions());
             Message m = Message.obtain();
             m.what = PipMenuActivity.MESSAGE_UPDATE_ACTIONS;
-            m.obj = new Pair<>(stackBounds, resolveMenuActions());
+            m.obj = mTmpData;
             try {
                 mToActivityMessenger.send(m);
             } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index dc4806a..d041c11 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -53,6 +53,7 @@
 
 import java.io.PrintWriter;
 import java.util.Arrays;
+import java.util.Set;
 import java.util.function.Consumer;
 
 final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
@@ -583,6 +584,13 @@
         if (mInputFreezeReason != null) {
             pw.println(prefix + "mInputFreezeReason=" + mInputFreezeReason);
         }
+        final Set<String> inputConsumerKeys = mInputConsumers.keySet();
+        if (!inputConsumerKeys.isEmpty()) {
+            pw.println(prefix + "InputConsumers:");
+            for (String key : inputConsumerKeys) {
+                pw.println(prefix + "  name=" + key);
+            }
+        }
     }
 
     private final class UpdateInputForAllWindowsConsumer implements Consumer<WindowState> {