diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2014-09-09 17:15:59 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2014-09-12 08:03:30 -0700 |
commit | ad5c2bf9983f6685d9ce6b2099ccdfd7ad83def9 (patch) | |
tree | d1c4f69fde14ca29bbc8e485e658779bf9b37e73 | |
parent | 8e894faadfce1d779b94692d8c7eccf558e23727 (diff) | |
download | android_packages_apps_Trebuchet-ad5c2bf9983f6685d9ce6b2099ccdfd7ad83def9.tar.gz android_packages_apps_Trebuchet-ad5c2bf9983f6685d9ce6b2099ccdfd7ad83def9.tar.bz2 android_packages_apps_Trebuchet-ad5c2bf9983f6685d9ce6b2099ccdfd7ad83def9.zip |
Updating shourcuts only when the corresponding user also matches the AppInfo
issue: 17480447
Change-Id: I0afbd80e760b7b73b84e483be325b2e905d65a00
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f7a0df681..909cf5f8c 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4801,6 +4801,25 @@ public class Workspace extends SmoothPagedView } void updateShortcutsAndWidgets(ArrayList<AppInfo> apps) { + // Break the appinfo list per user + final HashMap<UserHandleCompat, ArrayList<AppInfo>> appsPerUser = + new HashMap<UserHandleCompat, ArrayList<AppInfo>>(); + for (AppInfo info : apps) { + ArrayList<AppInfo> filtered = appsPerUser.get(info.user); + if (filtered == null) { + filtered = new ArrayList<AppInfo>(); + appsPerUser.put(info.user, filtered); + } + filtered.add(info); + } + + for (Map.Entry<UserHandleCompat, ArrayList<AppInfo>> entry : appsPerUser.entrySet()) { + updateShortcutsAndWidgetsPerUser(entry.getValue(), entry.getKey()); + } + } + + private void updateShortcutsAndWidgetsPerUser(ArrayList<AppInfo> apps, + final UserHandleCompat user) { // Create a map of the apps to test against final HashMap<ComponentName, AppInfo> appsMap = new HashMap<ComponentName, AppInfo>(); final HashSet<String> pkgNames = new HashSet<String>(); @@ -4808,9 +4827,8 @@ public class Workspace extends SmoothPagedView appsMap.put(ai.componentName, ai); pkgNames.add(ai.componentName.getPackageName()); } + final HashSet<ComponentName> iconsToRemove = new HashSet<ComponentName>(); - final HashMap<UserHandleCompat, HashSet<ComponentName>> iconsToRemove = - new HashMap<UserHandleCompat, HashSet<ComponentName>>(); mapOverItems(MAP_RECURSE, new ItemOperator() { @Override public boolean evaluate(ItemInfo info, View v, View parent) { @@ -4818,7 +4836,8 @@ public class Workspace extends SmoothPagedView ShortcutInfo shortcutInfo = (ShortcutInfo) info; ComponentName cn = shortcutInfo.getTargetComponent(); AppInfo appInfo = appsMap.get(cn); - if (cn != null && LauncherModel.isShortcutInfoUpdateable(info) + if (user.equals(shortcutInfo.user) && cn != null + && LauncherModel.isShortcutInfoUpdateable(info) && pkgNames.contains(cn.getPackageName())) { boolean promiseStateChanged = false; boolean infoUpdated = false; @@ -4841,13 +4860,7 @@ public class Workspace extends SmoothPagedView if ((intent == null) || (appsMap == null)) { // Could not find a default activity. Remove this item. - HashSet<ComponentName> cnSet = iconsToRemove - .get(shortcutInfo.user); - if (cnSet == null) { - cnSet = new HashSet<>(); - iconsToRemove.put(shortcutInfo.user, cnSet); - } - cnSet.add(shortcutInfo.getTargetComponent()); + iconsToRemove.add(shortcutInfo.getTargetComponent()); // process next shortcut. return false; @@ -4894,12 +4907,11 @@ public class Workspace extends SmoothPagedView }); if (!iconsToRemove.isEmpty()) { - for (Map.Entry<UserHandleCompat, HashSet<ComponentName>> entry : - iconsToRemove.entrySet()) { - removeItemsByComponentName(entry.getValue(), entry.getKey()); - } + removeItemsByComponentName(iconsToRemove, user); + } + if (user.equals(UserHandleCompat.myUserHandle())) { + restorePendingWidgets(pkgNames); } - restorePendingWidgets(pkgNames); } public void removeAbandonedPromise(String packageName, UserHandleCompat user) { @@ -4946,6 +4958,7 @@ public class Workspace extends SmoothPagedView } } + // Note that package states are sent only for myUser if (!completedPackages.isEmpty()) { restorePendingWidgets(completedPackages); } |