ShortcutManager: Fix work profile

- Pinned shortcuts need to know not only which package
has pinned them, but also on which user's, due to work profile.

- Launcher can always launch shortcuts that it has pinned.

Bug 27548047

Change-Id: I23b4e7dfbb6ecc42099d31008bcfd61d44e2c7fb
diff --git a/services/core/java/com/android/server/pm/ShortcutLauncher.java b/services/core/java/com/android/server/pm/ShortcutLauncher.java
index 740a8f7..b759e16 100644
--- a/services/core/java/com/android/server/pm/ShortcutLauncher.java
+++ b/services/core/java/com/android/server/pm/ShortcutLauncher.java
@@ -40,6 +40,7 @@
     private static final String TAG_PACKAGE = "package";
     private static final String TAG_PIN = "pin";
 
+    private static final String ATTR_LAUNCHER_USER_ID = "launcher-user";
     private static final String ATTR_VALUE = "value";
     private static final String ATTR_PACKAGE_NAME = "package-name";
 
@@ -49,14 +50,19 @@
     @NonNull
     private final String mPackageName;
 
+    @UserIdInt
+    private final int mLauncherUserId;
+
     /**
      * Package name -> IDs.
      */
     final private ArrayMap<String, ArraySet<String>> mPinnedShortcuts = new ArrayMap<>();
 
-    ShortcutLauncher(@UserIdInt int userId, @NonNull String packageName) {
+    ShortcutLauncher(@UserIdInt int userId, @NonNull String packageName,
+            @UserIdInt int launcherUserId) {
         mUserId = userId;
         mPackageName = packageName;
+        mLauncherUserId = launcherUserId;
     }
 
     @UserIdInt
@@ -64,6 +70,11 @@
         return mUserId;
     }
 
+    @UserIdInt
+    public int getLauncherUserId() {
+        return mLauncherUserId;
+    }
+
     @NonNull
     public String getPackageName() {
         return mPackageName;
@@ -120,8 +131,8 @@
         }
 
         out.startTag(null, TAG_ROOT);
-        ShortcutService.writeAttr(out, ATTR_PACKAGE_NAME,
-                mPackageName);
+        ShortcutService.writeAttr(out, ATTR_PACKAGE_NAME, mPackageName);
+        ShortcutService.writeAttr(out, ATTR_LAUNCHER_USER_ID, mLauncherUserId);
 
         for (int i = 0; i < size; i++) {
             out.startTag(null, TAG_PACKAGE);
@@ -142,12 +153,15 @@
     /**
      * Load.
      */
-    public static ShortcutLauncher loadFromXml(XmlPullParser parser, int userId)
+    public static ShortcutLauncher loadFromXml(XmlPullParser parser, int ownerUserId)
             throws IOException, XmlPullParserException {
         final String launcherPackageName = ShortcutService.parseStringAttribute(parser,
                 ATTR_PACKAGE_NAME);
+        final int launcherUserId = ShortcutService.parseIntAttribute(parser,
+                ATTR_LAUNCHER_USER_ID, ownerUserId);
 
-        final ShortcutLauncher ret = new ShortcutLauncher(userId, launcherPackageName);
+        final ShortcutLauncher ret = new ShortcutLauncher(launcherUserId, launcherPackageName,
+                launcherUserId);
 
         ArraySet<String> ids = null;
         final int outerDepth = parser.getDepth();
@@ -184,6 +198,8 @@
         pw.print(prefix);
         pw.print("Launcher: ");
         pw.print(mPackageName);
+        pw.print("  UserId: ");
+        pw.print(mLauncherUserId);
         pw.println();
 
         final int size = mPinnedShortcuts.size();