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();