Updating folder icons when the shortcut is updated. (Bug 10803060)

Change-Id: Idee158b3458213e441c01890e0db341a3bcce1f7
This commit is contained in:
Winson Chung
2013-10-16 17:51:49 -07:00
parent 51b9f6a570
commit 8c90331193

View File

@@ -4381,29 +4381,45 @@ public class Workspace extends SmoothPagedView
stripEmptyScreens();
}
private void updateShortcut(HashMap<ComponentName, AppInfo> appsMap, ItemInfo info,
View child) {
ComponentName cn = info.getIntent().getComponent();
if (cn != null) {
AppInfo appInfo = appsMap.get(info.getIntent().getComponent());
if ((appInfo != null) && LauncherModel.isShortcutInfoUpdateable(info)) {
ShortcutInfo shortcutInfo = (ShortcutInfo) info;
BubbleTextView shortcut = (BubbleTextView) child;
shortcutInfo.updateIcon(mIconCache);
shortcutInfo.title = appInfo.title.toString();
shortcut.applyFromShortcutInfo(shortcutInfo, mIconCache);
}
}
}
void updateShortcuts(ArrayList<AppInfo> apps) {
// Create a map of the apps to test against
final HashMap<ComponentName, AppInfo> appsMap = new HashMap<ComponentName, AppInfo>();
for (AppInfo ai : apps) {
appsMap.put(ai.componentName, ai);
}
ArrayList<ShortcutAndWidgetContainer> childrenLayouts = getAllShortcutAndWidgetContainers();
for (ShortcutAndWidgetContainer layout: childrenLayouts) {
int childCount = layout.getChildCount();
for (int j = 0; j < childCount; j++) {
final View view = layout.getChildAt(j);
Object tag = view.getTag();
if (LauncherModel.isShortcutInfoUpdateable((ItemInfo) tag)) {
ShortcutInfo info = (ShortcutInfo) tag;
final Intent intent = info.intent;
final ComponentName name = intent.getComponent();
final int appCount = apps.size();
for (int k = 0; k < appCount; k++) {
AppInfo app = apps.get(k);
if (app.componentName.equals(name)) {
BubbleTextView shortcut = (BubbleTextView) view;
info.updateIcon(mIconCache);
info.title = app.title.toString();
shortcut.applyFromShortcutInfo(info, mIconCache);
}
// Update all the children shortcuts
final HashMap<ItemInfo, View> children = new HashMap<ItemInfo, View>();
for (int j = 0; j < layout.getChildCount(); j++) {
View v = layout.getChildAt(j);
ItemInfo info = (ItemInfo) v.getTag();
if (info instanceof FolderInfo && v instanceof FolderIcon) {
FolderIcon folder = (FolderIcon) v;
ArrayList<View> folderChildren = folder.getFolder().getItemsInReadingOrder();
for (View fv : folderChildren) {
info = (ItemInfo) fv.getTag();
updateShortcut(appsMap, info, fv);
}
folder.invalidate();
} else if (info instanceof ShortcutInfo) {
updateShortcut(appsMap, info, v);
}
}
}